footprintjs 3.0.16 → 3.0.17
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.
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* Called by FlowChartBuilder.build() to enrich the compiled chart with
|
|
6
6
|
* d3-style chainable run methods and self-describing outputs.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { normalizeSchema } from '../contract/schema.js';
|
|
9
9
|
import { RunContext } from './RunContext.js';
|
|
10
|
-
//
|
|
10
|
+
// Cache for no-options toOpenAPI() calls only — parameterized calls are not cached
|
|
11
|
+
// because different options produce different output.
|
|
11
12
|
const openAPICache = new WeakMap();
|
|
12
13
|
const mcpCache = new WeakMap();
|
|
13
14
|
/**
|
|
@@ -27,13 +28,18 @@ export function makeRunnable(chart) {
|
|
|
27
28
|
};
|
|
28
29
|
runnable.toOpenAPI = function (options) {
|
|
29
30
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
31
|
+
// Only cache no-options calls — parameterized calls vary by options
|
|
32
|
+
if (!options) {
|
|
33
|
+
const cached = openAPICache.get(chart);
|
|
34
|
+
if (cached)
|
|
35
|
+
return cached;
|
|
36
|
+
}
|
|
33
37
|
const builderChart = chart;
|
|
34
38
|
const title = (_c = (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : (_b = builderChart.description) === null || _b === void 0 ? void 0 : _b.split('\n')[0]) !== null && _c !== void 0 ? _c : 'API';
|
|
35
39
|
const version = (_d = options === null || options === void 0 ? void 0 : options.version) !== null && _d !== void 0 ? _d : '1.0.0';
|
|
36
|
-
|
|
40
|
+
// Use root.id (the explicit machine-readable id) as the path segment, sanitized
|
|
41
|
+
const rawId = (_f = (_e = builderChart.root) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : 'execute';
|
|
42
|
+
const path = (_g = options === null || options === void 0 ? void 0 : options.path) !== null && _g !== void 0 ? _g : `/${slugify(rawId)}`;
|
|
37
43
|
const spec = {
|
|
38
44
|
openapi: '3.1.0',
|
|
39
45
|
info: { title, version, description: (_h = options === null || options === void 0 ? void 0 : options.description) !== null && _h !== void 0 ? _h : builderChart.description },
|
|
@@ -61,7 +67,8 @@ export function makeRunnable(chart) {
|
|
|
61
67
|
},
|
|
62
68
|
},
|
|
63
69
|
};
|
|
64
|
-
|
|
70
|
+
if (!options)
|
|
71
|
+
openAPICache.set(chart, spec);
|
|
65
72
|
return spec;
|
|
66
73
|
};
|
|
67
74
|
runnable.toMCPTool = function () {
|
|
@@ -70,34 +77,36 @@ export function makeRunnable(chart) {
|
|
|
70
77
|
if (cached)
|
|
71
78
|
return cached;
|
|
72
79
|
const builderChart = chart;
|
|
73
|
-
|
|
80
|
+
// Use root.id (explicit machine-readable id), sanitized to MCP name character allowlist
|
|
81
|
+
const name = sanitizeMCPName((_b = (_a = builderChart.root) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : 'execute');
|
|
74
82
|
const description = builderChart.description || `Execute the ${name} flowchart`;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
83
|
+
// MCP spec requires inputSchema to always be present.
|
|
84
|
+
// When no contract is defined, use the recommended no-parameter form.
|
|
85
|
+
const inputSchema = builderChart.inputSchema
|
|
86
|
+
? normalizeSchema(builderChart.inputSchema)
|
|
87
|
+
: { type: 'object', properties: {}, additionalProperties: false };
|
|
88
|
+
const tool = { name, description, inputSchema };
|
|
80
89
|
mcpCache.set(chart, tool);
|
|
81
90
|
return tool;
|
|
82
91
|
};
|
|
83
92
|
return runnable;
|
|
84
93
|
}
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Sanitize a string to conform to the MCP tool name character allowlist:
|
|
96
|
+
* [A-Za-z0-9_\-.] — any other character is replaced with underscore.
|
|
97
|
+
* Trims leading/trailing underscores introduced by replacement.
|
|
98
|
+
*/
|
|
99
|
+
function sanitizeMCPName(id) {
|
|
100
|
+
return id.replace(/[^A-Za-z0-9_\-.]/g, '_').replace(/^_+|_+$/g, '') || 'execute';
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Slugify a string for use as an OpenAPI path segment.
|
|
104
|
+
* Lowercases and replaces non-alphanumeric runs with hyphens.
|
|
105
|
+
*/
|
|
106
|
+
function slugify(id) {
|
|
107
|
+
return (id
|
|
108
|
+
.toLowerCase()
|
|
109
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
110
|
+
.replace(/^-|-$/g, '') || 'execute');
|
|
102
111
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXhELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFxQzdELDhCQUE4QjtBQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFlLEtBQThCO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLEtBQXdDLENBQUM7SUFFMUQsUUFBUSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQTBCO1FBQ3RELE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUF1QjtRQUNqRCxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsR0FBRyxHQUFHLFVBQVUsT0FBb0I7UUFDM0MsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLFNBQVMsR0FBRyxVQUFVLE9BQTZCOztRQUMxRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLElBQUksTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBRTFC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SUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLFNBQVMsZUFBZSxDQUFDLE1BQWU7SUFDdEMsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUMzQiwwREFBMEQ7SUFDMUQsSUFDRSxPQUFPLE1BQU0sS0FBSyxRQUFRO1FBQzFCLE1BQU0sS0FBSyxJQUFJO1FBQ2YsT0FBUSxNQUFrQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQy9ELENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLGVBQWUsQ0FBQyxNQUFpQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUFDLFdBQU0sQ0FBQztZQUNQLGdFQUFnRTtZQUNoRSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1bm5hYmxlQ2hhcnQgLS0gQWRkcyAucmVjb3JkZXIoKSwgLnJlZGFjdCgpLCAucnVuKCksIC50b09wZW5BUEkoKSwgLnRvTUNQVG9vbCgpXG4gKiB0byBhIEZsb3dDaGFydCBvYmplY3QuXG4gKlxuICogQ2FsbGVkIGJ5IEZsb3dDaGFydEJ1aWxkZXIuYnVpbGQoKSB0byBlbnJpY2ggdGhlIGNvbXBpbGVkIGNoYXJ0IHdpdGhcbiAqIGQzLXN0eWxlIGNoYWluYWJsZSBydW4gbWV0aG9kcyBhbmQgc2VsZi1kZXNjcmliaW5nIG91dHB1dHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQgfSBmcm9tICcuLi9idWlsZGVyL3R5cGVzLmpzJztcbmltcG9ydCB7IHpvZFRvSnNvblNjaGVtYSB9IGZyb20gJy4uL2NvbnRyYWN0L3NjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dSZWNvcmRlciB9IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSdW5PcHRpb25zIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXIsIFJlZGFjdGlvblBvbGljeSB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgUnVuUmVzdWx0LCBSdW5Db250ZXh0IH0gZnJvbSAnLi9SdW5Db250ZXh0LmpzJztcblxuLyoqIE9wZW5BUEkgZ2VuZXJhdGlvbiBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFydE9wZW5BUElPcHRpb25zIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xufVxuXG4vKiogTUNQIHRvb2wgZGVzY3JpcHRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE1DUFRvb2xEZXNjcmlwdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEZsb3dDaGFydCBlbnJpY2hlZCB3aXRoIGQzLXN0eWxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqXG4gKiBFeHRlbmRzIGJ1aWxkZXIuRmxvd0NoYXJ0ICh3aGljaCBhbHJlYWR5IGNhcnJpZXMgYnVpbGRUaW1lU3RydWN0dXJlLCBkZXNjcmlwdGlvbixcbiAqIHN0YWdlRGVzY3JpcHRpb25zLCBpbnB1dFNjaGVtYSwgb3V0cHV0U2NoZW1hLCBvdXRwdXRNYXBwZXIpIGFuZCBhZGRzIHRoZSBydW50aW1lXG4gKiBtZXRob2RzIGF0dGFjaGVkIGJ5IG1ha2VSdW5uYWJsZSgpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gZXh0ZW5kcyBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPiB7XG4gIC8qKiBBdHRhY2ggYSByZWNvcmRlciBmb3IgdGhlIG5leHQgcnVuLiBSZXR1cm5zIGEgY2hhaW5hYmxlIFJ1bkNvbnRleHQuICovXG4gIHJlY29yZGVyKHI6IFJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+O1xuICAvKiogU2V0IHJlZGFjdGlvbiBwb2xpY3kgZm9yIHRoZSBuZXh0IHJ1bi4gUmV0dXJucyBhIGNoYWluYWJsZSBSdW5Db250ZXh0LiAqL1xuICByZWRhY3QocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT47XG4gIC8qKiBFeGVjdXRlIHRoZSBjaGFydCBkaXJlY3RseSAoYmFyZSBydW4sIG5vIHJlY29yZGVycykuICovXG4gIHJ1bihvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UnVuUmVzdWx0PjtcbiAgLyoqIEdlbmVyYXRlIE9wZW5BUEkgMy4xIHNwZWMgZnJvbSBjaGFydCBtZXRhZGF0YSArIGNvbnRyYWN0LiBDYWNoZWQuICovXG4gIHRvT3BlbkFQSShvcHRpb25zPzogQ2hhcnRPcGVuQVBJT3B0aW9ucyk6IG9iamVjdDtcbiAgLyoqIEdlbmVyYXRlIE1DUCB0b29sIGRlc2NyaXB0aW9uIGZyb20gY2hhcnQgbWV0YWRhdGEuIENhY2hlZC4gKi9cbiAgdG9NQ1BUb29sKCk6IE1DUFRvb2xEZXNjcmlwdGlvbjtcbn1cblxuLy8gQ2FjaGVzIGZvciBkZXNjcmliZSBvdXRwdXRzXG5jb25zdCBvcGVuQVBJQ2FjaGUgPSBuZXcgV2Vha01hcDxGbG93Q2hhcnQsIG9iamVjdD4oKTtcbmNvbnN0IG1jcENhY2hlID0gbmV3IFdlYWtNYXA8Rmxvd0NoYXJ0LCBNQ1BUb29sRGVzY3JpcHRpb24+KCk7XG5cbi8qKlxuICogRW5yaWNoIGEgRmxvd0NoYXJ0IHdpdGggcnVuICsgZGVzY3JpYmUgbWV0aG9kcy5cbiAqIENhbGxlZCBieSBGbG93Q2hhcnRCdWlsZGVyLmJ1aWxkKCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlUnVubmFibGU8VE91dCwgVFNjb3BlPihjaGFydDogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4pOiBSdW5uYWJsZUZsb3dDaGFydDxUT3V0LCBUU2NvcGU+IHtcbiAgY29uc3QgcnVubmFibGUgPSBjaGFydCBhcyBSdW5uYWJsZUZsb3dDaGFydDxUT3V0LCBUU2NvcGU+O1xuXG4gIHJ1bm5hYmxlLnJlY29yZGVyID0gZnVuY3Rpb24gKHI6IFJlY29yZGVyIHwgRmxvd1JlY29yZGVyKTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJlY29yZGVyKHIpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnJlZGFjdCA9IGZ1bmN0aW9uIChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5yZWRhY3QocG9saWN5KTtcbiAgfTtcblxuICBydW5uYWJsZS5ydW4gPSBmdW5jdGlvbiAob3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucnVuKG9wdGlvbnMpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnRvT3BlbkFQSSA9IGZ1bmN0aW9uIChvcHRpb25zPzogQ2hhcnRPcGVuQVBJT3B0aW9ucyk6IG9iamVjdCB7XG4gICAgY29uc3QgY2FjaGVkID0gb3BlbkFQSUNhY2hlLmdldChjaGFydCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJ1aWxkZXJDaGFydCA9IGNoYXJ0IGFzIGFueTtcbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnM/LnRpdGxlID8/IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbj8uc3BsaXQoJ1xcbicpWzBdID8/ICdBUEknO1xuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/ICcxLjAuMCc7XG4gICAgY29uc3QgcGF0aCA9IG9wdGlvbnM/LnBhdGggPz8gYC8keyhidWlsZGVyQ2hhcnQucm9vdD8ubmFtZSA/PyAnZXhlY3V0ZScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnLScpfWA7XG5cbiAgICBjb25zdCBzcGVjOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIG9wZW5hcGk6ICczLjEuMCcsXG4gICAgICBpbmZvOiB7IHRpdGxlLCB2ZXJzaW9uLCBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24gPz8gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uIH0sXG4gICAgICBwYXRoczoge1xuICAgICAgICBbcGF0aF06IHtcbiAgICAgICAgICBwb3N0OiB7XG4gICAgICAgICAgICBzdW1tYXJ5OiB0aXRsZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAuLi4oYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hKSB9IH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgJzIwMCc6IHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIC4uLihidWlsZGVyQ2hhcnQub3V0cHV0U2NoZW1hXG4gICAgICAgICAgICAgICAgICA/IHsgY29udGVudDogeyAnYXBwbGljYXRpb24vanNvbic6IHsgc2NoZW1hOiBub3JtYWxpemVTY2hlbWEoYnVpbGRlckNoYXJ0Lm91dHB1dFNjaGVtYSkgfSB9IH1cbiAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgb3BlbkFQSUNhY2hlLnNldChjaGFydCwgc3BlYyk7XG4gICAgcmV0dXJuIHNwZWM7XG4gIH07XG5cbiAgcnVubmFibGUudG9NQ1BUb29sID0gZnVuY3Rpb24gKCk6IE1DUFRvb2xEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgY2FjaGVkID0gbWNwQ2FjaGUuZ2V0KGNoYXJ0KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYnVpbGRlckNoYXJ0ID0gY2hhcnQgYXMgYW55O1xuICAgIGNvbnN0IG5hbWUgPSAoYnVpbGRlckNoYXJ0LnJvb3Q/Lm5hbWUgPz8gJ2V4ZWN1dGUnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJ18nKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbiB8fCBgRXhlY3V0ZSB0aGUgJHtuYW1lfSBmbG93Y2hhcnRgO1xuXG4gICAgY29uc3QgdG9vbDogTUNQVG9vbERlc2NyaXB0aW9uID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgLi4uKGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYSA/IHsgaW5wdXRTY2hlbWE6IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWEpIH0gOiB7fSksXG4gICAgfTtcblxuICAgIG1jcENhY2hlLnNldChjaGFydCwgdG9vbCk7XG4gICAgcmV0dXJuIHRvb2w7XG4gIH07XG5cbiAgcmV0dXJuIHJ1bm5hYmxlO1xufVxuXG4vKiogTm9ybWFsaXplIGEgWm9kIHNjaGVtYSBvciBwbGFpbiBKU09OIFNjaGVtYSB0byBKU09OIFNjaGVtYSBvYmplY3QuICovXG5mdW5jdGlvbiBub3JtYWxpemVTY2hlbWEoc2NoZW1hOiB1bmtub3duKTogdW5rbm93biB7XG4gIGlmICghc2NoZW1hKSByZXR1cm4gc2NoZW1hO1xuICAvLyBJZiBpdCdzIGEgWm9kIHNjaGVtYSB3aXRoIC5fZGVmLCBjb252ZXJ0IHRvIEpTT04gU2NoZW1hXG4gIGlmIChcbiAgICB0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0JyAmJlxuICAgIHNjaGVtYSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiAoc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5fZGVmICE9PSAndW5kZWZpbmVkJ1xuICApIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHpvZFRvSnNvblNjaGVtYShzY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgY29udmVyc2lvbiBmYWlscyAoZS5nLiB1bnN1cHBvcnRlZCBab2QgdHlwZSksIHJldHVybiBhcy1pc1xuICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYTtcbn1cbiJdfQ==
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3hELE9BQU8sRUFBa0IsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUEwQzdELG1GQUFtRjtBQUNuRixzREFBc0Q7QUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQXFCLENBQUM7QUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQWlDLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBZSxLQUE4QjtJQUN2RSxNQUFNLFFBQVEsR0FBRyxLQUF3QyxDQUFDO0lBRTFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUEwQjtRQUN0RCxPQUFPLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsTUFBTSxHQUFHLFVBQVUsTUFBdUI7UUFDakQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLEdBQUcsR0FBRyxVQUFVLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxPQUE2Qjs7UUFDMUQsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMs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QUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUVwRSxNQUFNLElBQUksR0FBdUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXBFLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxFQUFVO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxPQUFPLENBQUMsRUFBVTtJQUN6QixPQUFPLENBQ0wsRUFBRTtTQUNDLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUN0QyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVubmFibGVDaGFydCAtLSBBZGRzIC5yZWNvcmRlcigpLCAucmVkYWN0KCksIC5ydW4oKSwgLnRvT3BlbkFQSSgpLCAudG9NQ1BUb29sKClcbiAqIHRvIGEgRmxvd0NoYXJ0IG9iamVjdC5cbiAqXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpIHRvIGVucmljaCB0aGUgY29tcGlsZWQgY2hhcnQgd2l0aFxuICogZDMtc3R5bGUgY2hhaW5hYmxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2NoZW1hIH0gZnJvbSAnLi4vY29udHJhY3Qvc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgSnNvblNjaGVtYSB9IGZyb20gJy4uL2NvbnRyYWN0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9wdGlvbnMgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlciwgUmVkYWN0aW9uUG9saWN5IH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBSdW5SZXN1bHQsIFJ1bkNvbnRleHQgfSBmcm9tICcuL1J1bkNvbnRleHQuanMnO1xuXG4vKiogT3BlbkFQSSBnZW5lcmF0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0T3BlbkFQSU9wdGlvbnMge1xuICB0aXRsZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKiBNQ1AgdG9vbCBkZXNjcmlwdGlvbiDigJQgc2hhcGUgcmVxdWlyZWQgYnkgdGhlIE1vZGVsIENvbnRleHQgUHJvdG9jb2wgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUNQVG9vbERlc2NyaXB0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogSlNPTiBTY2hlbWEgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHRvb2wncyBpbnB1dC5cbiAgICogQWx3YXlzIHByZXNlbnQg4oCUIHRoZSBNQ1Agc3BlYyByZXF1aXJlcyBpbnB1dFNjaGVtYSBldmVuIGZvciB0b29scyB3aXRoIG5vIHBhcmFtZXRlcnMuXG4gICAqIERlZmF1bHRzIHRvIGB7IHR5cGU6ICdvYmplY3QnLCBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlIH1gLlxuICAgKi9cbiAgaW5wdXRTY2hlbWE6IEpzb25TY2hlbWE7XG59XG5cbi8qKlxuICogRmxvd0NoYXJ0IGVucmljaGVkIHdpdGggZDMtc3R5bGUgcnVuIG1ldGhvZHMgYW5kIHNlbGYtZGVzY3JpYmluZyBvdXRwdXRzLlxuICpcbiAqIEV4dGVuZHMgYnVpbGRlci5GbG93Q2hhcnQgKHdoaWNoIGFscmVhZHkgY2FycmllcyBidWlsZFRpbWVTdHJ1Y3R1cmUsIGRlc2NyaXB0aW9uLFxuICogc3RhZ2VEZXNjcmlwdGlvbnMsIGlucHV0U2NoZW1hLCBvdXRwdXRTY2hlbWEsIG91dHB1dE1hcHBlcikgYW5kIGFkZHMgdGhlIHJ1bnRpbWVcbiAqIG1ldGhvZHMgYXR0YWNoZWQgYnkgbWFrZVJ1bm5hYmxlKCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmFibGVGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiBleHRlbmRzIEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+IHtcbiAgLyoqIEF0dGFjaCBhIHJlY29yZGVyIGZvciB0aGUgbmV4dCBydW4uIFJldHVybnMgYSBjaGFpbmFibGUgUnVuQ29udGV4dC4gKi9cbiAgcmVjb3JkZXIocjogUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT47XG4gIC8qKiBTZXQgcmVkYWN0aW9uIHBvbGljeSBmb3IgdGhlIG5leHQgcnVuLiBSZXR1cm5zIGEgY2hhaW5hYmxlIFJ1bkNvbnRleHQuICovXG4gIHJlZGFjdChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPjtcbiAgLyoqIEV4ZWN1dGUgdGhlIGNoYXJ0IGRpcmVjdGx5IChiYXJlIHJ1biwgbm8gcmVjb3JkZXJzKS4gKi9cbiAgcnVuKG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSdW5SZXN1bHQ+O1xuICAvKiogR2VuZXJhdGUgT3BlbkFQSSAzLjEgc3BlYyBmcm9tIGNoYXJ0IG1ldGFkYXRhICsgY29udHJhY3QuIENhY2hlZCBmb3Igbm8tb3B0aW9ucyBjYWxscy4gKi9cbiAgdG9PcGVuQVBJKG9wdGlvbnM/OiBDaGFydE9wZW5BUElPcHRpb25zKTogb2JqZWN0O1xuICAvKiogR2VuZXJhdGUgTUNQIHRvb2wgZGVzY3JpcHRpb24gZnJvbSBjaGFydCBtZXRhZGF0YS4gQ2FjaGVkLiAqL1xuICB0b01DUFRvb2woKTogTUNQVG9vbERlc2NyaXB0aW9uO1xufVxuXG4vLyBDYWNoZSBmb3Igbm8tb3B0aW9ucyB0b09wZW5BUEkoKSBjYWxscyBvbmx5IOKAlCBwYXJhbWV0ZXJpemVkIGNhbGxzIGFyZSBub3QgY2FjaGVkXG4vLyBiZWNhdXNlIGRpZmZlcmVudCBvcHRpb25zIHByb2R1Y2UgZGlmZmVyZW50IG91dHB1dC5cbmNvbnN0IG9wZW5BUElDYWNoZSA9IG5ldyBXZWFrTWFwPEZsb3dDaGFydCwgb2JqZWN0PigpO1xuY29uc3QgbWNwQ2FjaGUgPSBuZXcgV2Vha01hcDxGbG93Q2hhcnQsIE1DUFRvb2xEZXNjcmlwdGlvbj4oKTtcblxuLyoqXG4gKiBFbnJpY2ggYSBGbG93Q2hhcnQgd2l0aCBydW4gKyBkZXNjcmliZSBtZXRob2RzLlxuICogQ2FsbGVkIGJ5IEZsb3dDaGFydEJ1aWxkZXIuYnVpbGQoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSdW5uYWJsZTxUT3V0LCBUU2NvcGU+KGNoYXJ0OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPik6IFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4ge1xuICBjb25zdCBydW5uYWJsZSA9IGNoYXJ0IGFzIFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT47XG5cbiAgcnVubmFibGUucmVjb3JkZXIgPSBmdW5jdGlvbiAocjogUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucmVjb3JkZXIocik7XG4gIH07XG5cbiAgcnVubmFibGUucmVkYWN0ID0gZnVuY3Rpb24gKHBvbGljeTogUmVkYWN0aW9uUG9saWN5KTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJlZGFjdChwb2xpY3kpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnJ1biA9IGZ1bmN0aW9uIChvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UnVuUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5ydW4ob3B0aW9ucyk7XG4gIH07XG5cbiAgcnVubmFibGUudG9PcGVuQVBJID0gZnVuY3Rpb24gKG9wdGlvbnM/OiBDaGFydE9wZW5BUElPcHRpb25zKTogb2JqZWN0IHtcbiAgICAvLyBPbmx5IGNhY2hlIG5vLW9wdGlvbnMgY2FsbHMg4oCUIHBhcmFtZXRlcml6ZWQgY2FsbHMgdmFyeSBieSBvcHRpb25zXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBjb25zdCBjYWNoZWQgPSBvcGVuQVBJQ2FjaGUuZ2V0KGNoYXJ0KTtcbiAgICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRlckNoYXJ0ID0gY2hhcnQgYXMgYW55O1xuICAgIGNvbnN0IHRpdGxlID0gb3B0aW9ucz8udGl0bGUgPz8gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uPy5zcGxpdCgnXFxuJylbMF0gPz8gJ0FQSSc7XG4gICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnM/LnZlcnNpb24gPz8gJzEuMC4wJztcbiAgICAvLyBVc2Ugcm9vdC5pZCAodGhlIGV4cGxpY2l0IG1hY2hpbmUtcmVhZGFibGUgaWQpIGFzIHRoZSBwYXRoIHNlZ21lbnQsIHNhbml0aXplZFxuICAgIGNvbnN0IHJhd0lkID0gYnVpbGRlckNoYXJ0LnJvb3Q/LmlkID8/ICdleGVjdXRlJztcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucz8ucGF0aCA/PyBgLyR7c2x1Z2lmeShyYXdJZCl9YDtcblxuICAgIGNvbnN0IHNwZWM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgb3BlbmFwaTogJzMuMS4wJyxcbiAgICAgIGluZm86IHsgdGl0bGUsIHZlcnNpb24sIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbiA/PyBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24gfSxcbiAgICAgIHBhdGhzOiB7XG4gICAgICAgIFtwYXRoXToge1xuICAgICAgICAgIHBvc3Q6IHtcbiAgICAgICAgICAgIHN1bW1hcnk6IHRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC4uLihidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWFcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogeyBzY2hlbWE6IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWEpIH0gfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgICAnMjAwJzoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgLi4uKGJ1aWxkZXJDaGFydC5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgICAgICAgID8geyBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogeyBzY2hlbWE6IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQub3V0cHV0U2NoZW1hKSB9IH0gfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoIW9wdGlvbnMpIG9wZW5BUElDYWNoZS5zZXQoY2hhcnQsIHNwZWMpO1xuICAgIHJldHVybiBzcGVjO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnRvTUNQVG9vbCA9IGZ1bmN0aW9uICgpOiBNQ1BUb29sRGVzY3JpcHRpb24ge1xuICAgIGNvbnN0IGNhY2hlZCA9IG1jcENhY2hlLmdldChjaGFydCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJ1aWxkZXJDaGFydCA9IGNoYXJ0IGFzIGFueTtcbiAgICAvLyBVc2Ugcm9vdC5pZCAoZXhwbGljaXQgbWFjaGluZS1yZWFkYWJsZSBpZCksIHNhbml0aXplZCB0byBNQ1AgbmFtZSBjaGFyYWN0ZXIgYWxsb3dsaXN0XG4gICAgY29uc3QgbmFtZSA9IHNhbml0aXplTUNQTmFtZShidWlsZGVyQ2hhcnQucm9vdD8uaWQgPz8gJ2V4ZWN1dGUnKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbiB8fCBgRXhlY3V0ZSB0aGUgJHtuYW1lfSBmbG93Y2hhcnRgO1xuXG4gICAgLy8gTUNQIHNwZWMgcmVxdWlyZXMgaW5wdXRTY2hlbWEgdG8gYWx3YXlzIGJlIHByZXNlbnQuXG4gICAgLy8gV2hlbiBubyBjb250cmFjdCBpcyBkZWZpbmVkLCB1c2UgdGhlIHJlY29tbWVuZGVkIG5vLXBhcmFtZXRlciBmb3JtLlxuICAgIGNvbnN0IGlucHV0U2NoZW1hOiBKc29uU2NoZW1hID0gYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hXG4gICAgICA/IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWEpXG4gICAgICA6IHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UgfTtcblxuICAgIGNvbnN0IHRvb2w6IE1DUFRvb2xEZXNjcmlwdGlvbiA9IHsgbmFtZSwgZGVzY3JpcHRpb24sIGlucHV0U2NoZW1hIH07XG5cbiAgICBtY3BDYWNoZS5zZXQoY2hhcnQsIHRvb2wpO1xuICAgIHJldHVybiB0b29sO1xuICB9O1xuXG4gIHJldHVybiBydW5uYWJsZTtcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSBhIHN0cmluZyB0byBjb25mb3JtIHRvIHRoZSBNQ1AgdG9vbCBuYW1lIGNoYXJhY3RlciBhbGxvd2xpc3Q6XG4gKiBbQS1aYS16MC05X1xcLS5dIOKAlCBhbnkgb3RoZXIgY2hhcmFjdGVyIGlzIHJlcGxhY2VkIHdpdGggdW5kZXJzY29yZS5cbiAqIFRyaW1zIGxlYWRpbmcvdHJhaWxpbmcgdW5kZXJzY29yZXMgaW50cm9kdWNlZCBieSByZXBsYWNlbWVudC5cbiAqL1xuZnVuY3Rpb24gc2FuaXRpemVNQ1BOYW1lKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaWQucmVwbGFjZSgvW15BLVphLXowLTlfXFwtLl0vZywgJ18nKS5yZXBsYWNlKC9eXyt8XyskL2csICcnKSB8fCAnZXhlY3V0ZSc7XG59XG5cbi8qKlxuICogU2x1Z2lmeSBhIHN0cmluZyBmb3IgdXNlIGFzIGFuIE9wZW5BUEkgcGF0aCBzZWdtZW50LlxuICogTG93ZXJjYXNlcyBhbmQgcmVwbGFjZXMgbm9uLWFscGhhbnVtZXJpYyBydW5zIHdpdGggaHlwaGVucy5cbiAqL1xuZnVuY3Rpb24gc2x1Z2lmeShpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChcbiAgICBpZFxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9eLXwtJC9nLCAnJykgfHwgJ2V4ZWN1dGUnXG4gICk7XG59XG4iXX0=
|
|
@@ -10,7 +10,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.makeRunnable = void 0;
|
|
11
11
|
const schema_js_1 = require("../contract/schema.js");
|
|
12
12
|
const RunContext_js_1 = require("./RunContext.js");
|
|
13
|
-
//
|
|
13
|
+
// Cache for no-options toOpenAPI() calls only — parameterized calls are not cached
|
|
14
|
+
// because different options produce different output.
|
|
14
15
|
const openAPICache = new WeakMap();
|
|
15
16
|
const mcpCache = new WeakMap();
|
|
16
17
|
/**
|
|
@@ -30,13 +31,18 @@ function makeRunnable(chart) {
|
|
|
30
31
|
};
|
|
31
32
|
runnable.toOpenAPI = function (options) {
|
|
32
33
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
34
|
+
// Only cache no-options calls — parameterized calls vary by options
|
|
35
|
+
if (!options) {
|
|
36
|
+
const cached = openAPICache.get(chart);
|
|
37
|
+
if (cached)
|
|
38
|
+
return cached;
|
|
39
|
+
}
|
|
36
40
|
const builderChart = chart;
|
|
37
41
|
const title = (_c = (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : (_b = builderChart.description) === null || _b === void 0 ? void 0 : _b.split('\n')[0]) !== null && _c !== void 0 ? _c : 'API';
|
|
38
42
|
const version = (_d = options === null || options === void 0 ? void 0 : options.version) !== null && _d !== void 0 ? _d : '1.0.0';
|
|
39
|
-
|
|
43
|
+
// Use root.id (the explicit machine-readable id) as the path segment, sanitized
|
|
44
|
+
const rawId = (_f = (_e = builderChart.root) === null || _e === void 0 ? void 0 : _e.id) !== null && _f !== void 0 ? _f : 'execute';
|
|
45
|
+
const path = (_g = options === null || options === void 0 ? void 0 : options.path) !== null && _g !== void 0 ? _g : `/${slugify(rawId)}`;
|
|
40
46
|
const spec = {
|
|
41
47
|
openapi: '3.1.0',
|
|
42
48
|
info: { title, version, description: (_h = options === null || options === void 0 ? void 0 : options.description) !== null && _h !== void 0 ? _h : builderChart.description },
|
|
@@ -48,7 +54,7 @@ function makeRunnable(chart) {
|
|
|
48
54
|
...(builderChart.inputSchema
|
|
49
55
|
? {
|
|
50
56
|
requestBody: {
|
|
51
|
-
content: { 'application/json': { schema: normalizeSchema(builderChart.inputSchema) } },
|
|
57
|
+
content: { 'application/json': { schema: (0, schema_js_1.normalizeSchema)(builderChart.inputSchema) } },
|
|
52
58
|
},
|
|
53
59
|
}
|
|
54
60
|
: {}),
|
|
@@ -56,7 +62,7 @@ function makeRunnable(chart) {
|
|
|
56
62
|
'200': {
|
|
57
63
|
description: 'Success',
|
|
58
64
|
...(builderChart.outputSchema
|
|
59
|
-
? { content: { 'application/json': { schema: normalizeSchema(builderChart.outputSchema) } } }
|
|
65
|
+
? { content: { 'application/json': { schema: (0, schema_js_1.normalizeSchema)(builderChart.outputSchema) } } }
|
|
60
66
|
: {}),
|
|
61
67
|
},
|
|
62
68
|
},
|
|
@@ -64,7 +70,8 @@ function makeRunnable(chart) {
|
|
|
64
70
|
},
|
|
65
71
|
},
|
|
66
72
|
};
|
|
67
|
-
|
|
73
|
+
if (!options)
|
|
74
|
+
openAPICache.set(chart, spec);
|
|
68
75
|
return spec;
|
|
69
76
|
};
|
|
70
77
|
runnable.toMCPTool = function () {
|
|
@@ -73,35 +80,37 @@ function makeRunnable(chart) {
|
|
|
73
80
|
if (cached)
|
|
74
81
|
return cached;
|
|
75
82
|
const builderChart = chart;
|
|
76
|
-
|
|
83
|
+
// Use root.id (explicit machine-readable id), sanitized to MCP name character allowlist
|
|
84
|
+
const name = sanitizeMCPName((_b = (_a = builderChart.root) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : 'execute');
|
|
77
85
|
const description = builderChart.description || `Execute the ${name} flowchart`;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
// MCP spec requires inputSchema to always be present.
|
|
87
|
+
// When no contract is defined, use the recommended no-parameter form.
|
|
88
|
+
const inputSchema = builderChart.inputSchema
|
|
89
|
+
? (0, schema_js_1.normalizeSchema)(builderChart.inputSchema)
|
|
90
|
+
: { type: 'object', properties: {}, additionalProperties: false };
|
|
91
|
+
const tool = { name, description, inputSchema };
|
|
83
92
|
mcpCache.set(chart, tool);
|
|
84
93
|
return tool;
|
|
85
94
|
};
|
|
86
95
|
return runnable;
|
|
87
96
|
}
|
|
88
97
|
exports.makeRunnable = makeRunnable;
|
|
89
|
-
/**
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Sanitize a string to conform to the MCP tool name character allowlist:
|
|
100
|
+
* [A-Za-z0-9_\-.] — any other character is replaced with underscore.
|
|
101
|
+
* Trims leading/trailing underscores introduced by replacement.
|
|
102
|
+
*/
|
|
103
|
+
function sanitizeMCPName(id) {
|
|
104
|
+
return id.replace(/[^A-Za-z0-9_\-.]/g, '_').replace(/^_+|_+$/g, '') || 'execute';
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Slugify a string for use as an OpenAPI path segment.
|
|
108
|
+
* Lowercases and replaces non-alphanumeric runs with hyphens.
|
|
109
|
+
*/
|
|
110
|
+
function slugify(id) {
|
|
111
|
+
return (id
|
|
112
|
+
.toLowerCase()
|
|
113
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
114
|
+
.replace(/^-|-$/g, '') || 'execute');
|
|
106
115
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBR0gscURBQXdEO0FBSXhELG1EQUE2RDtBQXFDN0QsOEJBQThCO0FBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxFQUFxQixDQUFDO0FBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFpQyxDQUFDO0FBRTlEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBZSxLQUE4QjtJQUN2RSxNQUFNLFFBQVEsR0FBRyxLQUF3QyxDQUFDO0lBRTFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUEwQjtRQUN0RCxPQUFPLElBQUksMEJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQXVCO1FBQ2pELE9BQU8sSUFBSSwwQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsR0FBRyxHQUFHLFVBQVUsT0FBb0I7UUFDM0MsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxPQUE2Qjs7UUFDMUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUUxQixNQUFNLFlBQVksR0FBRyxLQUFZLENBQUM7UUFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFBLE9BQU8s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QUFRLENBQUM7QUFDbEIsQ0FBQztBQTNFRCxvQ0EyRUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBUyxlQUFlLENBQUMsTUFBZTtJQUN0QyxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzNCLDBEQUEwRDtJQUMxRCxJQUNFLE9BQU8sTUFBTSxLQUFLLFFBQVE7UUFDMUIsTUFBTSxLQUFLLElBQUk7UUFDZixPQUFRLE1BQWtDLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFDL0QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sSUFBQSwyQkFBZSxFQUFDLE1BQWlDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsV0FBTSxDQUFDO1lBQ1AsZ0VBQWdFO1lBQ2hFLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVubmFibGVDaGFydCAtLSBBZGRzIC5yZWNvcmRlcigpLCAucmVkYWN0KCksIC5ydW4oKSwgLnRvT3BlbkFQSSgpLCAudG9NQ1BUb29sKClcbiAqIHRvIGEgRmxvd0NoYXJ0IG9iamVjdC5cbiAqXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpIHRvIGVucmljaCB0aGUgY29tcGlsZWQgY2hhcnQgd2l0aFxuICogZDMtc3R5bGUgY2hhaW5hYmxlIHJ1biBtZXRob2RzIGFuZCBzZWxmLWRlc2NyaWJpbmcgb3V0cHV0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHsgem9kVG9Kc29uU2NoZW1hIH0gZnJvbSAnLi4vY29udHJhY3Qvc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bk9wdGlvbnMgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlciwgUmVkYWN0aW9uUG9saWN5IH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBSdW5SZXN1bHQsIFJ1bkNvbnRleHQgfSBmcm9tICcuL1J1bkNvbnRleHQuanMnO1xuXG4vKiogT3BlbkFQSSBnZW5lcmF0aW9uIG9wdGlvbnMuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXJ0T3BlbkFQSU9wdGlvbnMge1xuICB0aXRsZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKiBNQ1AgdG9vbCBkZXNjcmlwdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUNQVG9vbERlc2NyaXB0aW9uIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG59XG5cbi8qKlxuICogRmxvd0NoYXJ0IGVucmljaGVkIHdpdGggZDMtc3R5bGUgcnVuIG1ldGhvZHMgYW5kIHNlbGYtZGVzY3JpYmluZyBvdXRwdXRzLlxuICpcbiAqIEV4dGVuZHMgYnVpbGRlci5GbG93Q2hhcnQgKHdoaWNoIGFscmVhZHkgY2FycmllcyBidWlsZFRpbWVTdHJ1Y3R1cmUsIGRlc2NyaXB0aW9uLFxuICogc3RhZ2VEZXNjcmlwdGlvbnMsIGlucHV0U2NoZW1hLCBvdXRwdXRTY2hlbWEsIG91dHB1dE1hcHBlcikgYW5kIGFkZHMgdGhlIHJ1bnRpbWVcbiAqIG1ldGhvZHMgYXR0YWNoZWQgYnkgbWFrZVJ1bm5hYmxlKCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmFibGVGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiBleHRlbmRzIEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+IHtcbiAgLyoqIEF0dGFjaCBhIHJlY29yZGVyIGZvciB0aGUgbmV4dCBydW4uIFJldHVybnMgYSBjaGFpbmFibGUgUnVuQ29udGV4dC4gKi9cbiAgcmVjb3JkZXIocjogUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT47XG4gIC8qKiBTZXQgcmVkYWN0aW9uIHBvbGljeSBmb3IgdGhlIG5leHQgcnVuLiBSZXR1cm5zIGEgY2hhaW5hYmxlIFJ1bkNvbnRleHQuICovXG4gIHJlZGFjdChwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPjtcbiAgLyoqIEV4ZWN1dGUgdGhlIGNoYXJ0IGRpcmVjdGx5IChiYXJlIHJ1biwgbm8gcmVjb3JkZXJzKS4gKi9cbiAgcnVuKG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSdW5SZXN1bHQ+O1xuICAvKiogR2VuZXJhdGUgT3BlbkFQSSAzLjEgc3BlYyBmcm9tIGNoYXJ0IG1ldGFkYXRhICsgY29udHJhY3QuIENhY2hlZC4gKi9cbiAgdG9PcGVuQVBJKG9wdGlvbnM/OiBDaGFydE9wZW5BUElPcHRpb25zKTogb2JqZWN0O1xuICAvKiogR2VuZXJhdGUgTUNQIHRvb2wgZGVzY3JpcHRpb24gZnJvbSBjaGFydCBtZXRhZGF0YS4gQ2FjaGVkLiAqL1xuICB0b01DUFRvb2woKTogTUNQVG9vbERlc2NyaXB0aW9uO1xufVxuXG4vLyBDYWNoZXMgZm9yIGRlc2NyaWJlIG91dHB1dHNcbmNvbnN0IG9wZW5BUElDYWNoZSA9IG5ldyBXZWFrTWFwPEZsb3dDaGFydCwgb2JqZWN0PigpO1xuY29uc3QgbWNwQ2FjaGUgPSBuZXcgV2Vha01hcDxGbG93Q2hhcnQsIE1DUFRvb2xEZXNjcmlwdGlvbj4oKTtcblxuLyoqXG4gKiBFbnJpY2ggYSBGbG93Q2hhcnQgd2l0aCBydW4gKyBkZXNjcmliZSBtZXRob2RzLlxuICogQ2FsbGVkIGJ5IEZsb3dDaGFydEJ1aWxkZXIuYnVpbGQoKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSdW5uYWJsZTxUT3V0LCBUU2NvcGU+KGNoYXJ0OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPik6IFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4ge1xuICBjb25zdCBydW5uYWJsZSA9IGNoYXJ0IGFzIFJ1bm5hYmxlRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT47XG5cbiAgcnVubmFibGUucmVjb3JkZXIgPSBmdW5jdGlvbiAocjogUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucmVjb3JkZXIocik7XG4gIH07XG5cbiAgcnVubmFibGUucmVkYWN0ID0gZnVuY3Rpb24gKHBvbGljeTogUmVkYWN0aW9uUG9saWN5KTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJlZGFjdChwb2xpY3kpO1xuICB9O1xuXG4gIHJ1bm5hYmxlLnJ1biA9IGZ1bmN0aW9uIChvcHRpb25zPzogUnVuT3B0aW9ucyk6IFByb21pc2U8UnVuUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5ydW4ob3B0aW9ucyk7XG4gIH07XG5cbiAgcnVubmFibGUudG9PcGVuQVBJID0gZnVuY3Rpb24gKG9wdGlvbnM/OiBDaGFydE9wZW5BUElPcHRpb25zKTogb2JqZWN0IHtcbiAgICBjb25zdCBjYWNoZWQgPSBvcGVuQVBJQ2FjaGUuZ2V0KGNoYXJ0KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYnVpbGRlckNoYXJ0ID0gY2hhcnQgYXMgYW55O1xuICAgIGNvbnN0IHRpdGxlID0gb3B0aW9ucz8udGl0bGUgPz8gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uPy5zcGxpdCgnXFxuJylbMF0gPz8gJ0FQSSc7XG4gICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnM/LnZlcnNpb24gPz8gJzEuMC4wJztcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucz8ucGF0aCA/PyBgLyR7KGJ1aWxkZXJDaGFydC5yb290Py5uYW1lID8/ICdleGVjdXRlJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICctJyl9YDtcblxuICAgIGNvbnN0IHNwZWM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgb3BlbmFwaTogJzMuMS4wJyxcbiAgICAgIGluZm86IHsgdGl0bGUsIHZlcnNpb24sIGRlc2NyaXB0aW9uOiBvcHRpb25zPy5kZXNjcmlwdGlvbiA/PyBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24gfSxcbiAgICAgIHBhdGhzOiB7XG4gICAgICAgIFtwYXRoXToge1xuICAgICAgICAgIHBvc3Q6IHtcbiAgICAgICAgICAgIHN1bW1hcnk6IHRpdGxlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIC4uLihidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWFcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogeyBzY2hlbWE6IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWEpIH0gfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgICAgICAnMjAwJzoge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgLi4uKGJ1aWxkZXJDaGFydC5vdXRwdXRTY2hlbWFcbiAgICAgICAgICAgICAgICAgID8geyBjb250ZW50OiB7ICdhcHBsaWNhdGlvbi9qc29uJzogeyBzY2hlbWE6IG5vcm1hbGl6ZVNjaGVtYShidWlsZGVyQ2hhcnQub3V0cHV0U2NoZW1hKSB9IH0gfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBvcGVuQVBJQ2FjaGUuc2V0KGNoYXJ0LCBzcGVjKTtcbiAgICByZXR1cm4gc3BlYztcbiAgfTtcblxuICBydW5uYWJsZS50b01DUFRvb2wgPSBmdW5jdGlvbiAoKTogTUNQVG9vbERlc2NyaXB0aW9uIHtcbiAgICBjb25zdCBjYWNoZWQgPSBtY3BDYWNoZS5nZXQoY2hhcnQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBidWlsZGVyQ2hhcnQgPSBjaGFydCBhcyBhbnk7XG4gICAgY29uc3QgbmFtZSA9IChidWlsZGVyQ2hhcnQucm9vdD8ubmFtZSA/PyAnZXhlY3V0ZScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uIHx8IGBFeGVjdXRlIHRoZSAke25hbWV9IGZsb3djaGFydGA7XG5cbiAgICBjb25zdCB0b29sOiBNQ1BUb29sRGVzY3JpcHRpb24gPSB7XG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAuLi4oYnVpbGRlckNoYXJ0LmlucHV0U2NoZW1hID8geyBpbnB1dFNjaGVtYTogbm9ybWFsaXplU2NoZW1hKGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYSkgfSA6IHt9KSxcbiAgICB9O1xuXG4gICAgbWNwQ2FjaGUuc2V0KGNoYXJ0LCB0b29sKTtcbiAgICByZXR1cm4gdG9vbDtcbiAgfTtcblxuICByZXR1cm4gcnVubmFibGU7XG59XG5cbi8qKiBOb3JtYWxpemUgYSBab2Qgc2NoZW1hIG9yIHBsYWluIEpTT04gU2NoZW1hIHRvIEpTT04gU2NoZW1hIG9iamVjdC4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjaGVtYShzY2hlbWE6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKCFzY2hlbWEpIHJldHVybiBzY2hlbWE7XG4gIC8vIElmIGl0J3MgYSBab2Qgc2NoZW1hIHdpdGggLl9kZWYsIGNvbnZlcnQgdG8gSlNPTiBTY2hlbWFcbiAgaWYgKFxuICAgIHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnICYmXG4gICAgc2NoZW1hICE9PSBudWxsICYmXG4gICAgdHlwZW9mIChzY2hlbWEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9kZWYgIT09ICd1bmRlZmluZWQnXG4gICkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gem9kVG9Kc29uU2NoZW1hKHNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZiBjb252ZXJzaW9uIGZhaWxzIChlLmcuIHVuc3VwcG9ydGVkIFpvZCB0eXBlKSwgcmV0dXJuIGFzLWlzXG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hO1xufVxuIl19
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmFibGVDaGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBR0gscURBQXdEO0FBS3hELG1EQUE2RDtBQTBDN0QsbUZBQW1GO0FBQ25GLHNEQUFzRDtBQUN0RCxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUN0RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQWUsS0FBOEI7SUFDdkUsTUFBTSxRQUFRLEdBQUcsS0FBd0MsQ0FBQztJQUUxRCxRQUFRLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBMEI7UUFDdEQsT0FBTyxJQUFJLDBCQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUF1QjtRQUNqRCxPQUFPLElBQUksMEJBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLEdBQUcsR0FBRyxVQUFVLE9BQW9CO1FBQzNDLE9BQU8sSUFBSSwwQkFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsT0FBNkI7O1FBQzFELG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksTUFBTTtnQkFBRSxPQUFPLE1BQU0sQ0FBQztRQUM1QixDQUFD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cEUsTUFBTSxJQUFJLEdBQXVCLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUVwRSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFuRkQsb0NBbUZDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsZUFBZSxDQUFDLEVBQVU7SUFDakMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQ25GLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLE9BQU8sQ0FBQyxFQUFVO0lBQ3pCLE9BQU8sQ0FDTCxFQUFFO1NBQ0MsV0FBVyxFQUFFO1NBQ2IsT0FBTyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUM7U0FDM0IsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxTQUFTLENBQ3RDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSdW5uYWJsZUNoYXJ0IC0tIEFkZHMgLnJlY29yZGVyKCksIC5yZWRhY3QoKSwgLnJ1bigpLCAudG9PcGVuQVBJKCksIC50b01DUFRvb2woKVxuICogdG8gYSBGbG93Q2hhcnQgb2JqZWN0LlxuICpcbiAqIENhbGxlZCBieSBGbG93Q2hhcnRCdWlsZGVyLmJ1aWxkKCkgdG8gZW5yaWNoIHRoZSBjb21waWxlZCBjaGFydCB3aXRoXG4gKiBkMy1zdHlsZSBjaGFpbmFibGUgcnVuIG1ldGhvZHMgYW5kIHNlbGYtZGVzY3JpYmluZyBvdXRwdXRzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0IH0gZnJvbSAnLi4vYnVpbGRlci90eXBlcy5qcyc7XG5pbXBvcnQgeyBub3JtYWxpemVTY2hlbWEgfSBmcm9tICcuLi9jb250cmFjdC9zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi4vY29udHJhY3QvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuT3B0aW9ucyB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyLCBSZWRhY3Rpb25Qb2xpY3kgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIFJ1blJlc3VsdCwgUnVuQ29udGV4dCB9IGZyb20gJy4vUnVuQ29udGV4dC5qcyc7XG5cbi8qKiBPcGVuQVBJIGdlbmVyYXRpb24gb3B0aW9ucy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcnRPcGVuQVBJT3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbn1cblxuLyoqIE1DUCB0b29sIGRlc2NyaXB0aW9uIOKAlCBzaGFwZSByZXF1aXJlZCBieSB0aGUgTW9kZWwgQ29udGV4dCBQcm90b2NvbCBzcGVjLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNQ1BUb29sRGVzY3JpcHRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBKU09OIFNjaGVtYSBvYmplY3QgZGVzY3JpYmluZyB0aGUgdG9vbCdzIGlucHV0LlxuICAgKiBBbHdheXMgcHJlc2VudCDigJQgdGhlIE1DUCBzcGVjIHJlcXVpcmVzIGlucHV0U2NoZW1hIGV2ZW4gZm9yIHRvb2xzIHdpdGggbm8gcGFyYW1ldGVycy5cbiAgICogRGVmYXVsdHMgdG8gYHsgdHlwZTogJ29iamVjdCcsIHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UgfWAuXG4gICAqL1xuICBpbnB1dFNjaGVtYTogSnNvblNjaGVtYTtcbn1cblxuLyoqXG4gKiBGbG93Q2hhcnQgZW5yaWNoZWQgd2l0aCBkMy1zdHlsZSBydW4gbWV0aG9kcyBhbmQgc2VsZi1kZXNjcmliaW5nIG91dHB1dHMuXG4gKlxuICogRXh0ZW5kcyBidWlsZGVyLkZsb3dDaGFydCAod2hpY2ggYWxyZWFkeSBjYXJyaWVzIGJ1aWxkVGltZVN0cnVjdHVyZSwgZGVzY3JpcHRpb24sXG4gKiBzdGFnZURlc2NyaXB0aW9ucywgaW5wdXRTY2hlbWEsIG91dHB1dFNjaGVtYSwgb3V0cHV0TWFwcGVyKSBhbmQgYWRkcyB0aGUgcnVudGltZVxuICogbWV0aG9kcyBhdHRhY2hlZCBieSBtYWtlUnVubmFibGUoKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uYWJsZUZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IGV4dGVuZHMgRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT4ge1xuICAvKiogQXR0YWNoIGEgcmVjb3JkZXIgZm9yIHRoZSBuZXh0IHJ1bi4gUmV0dXJucyBhIGNoYWluYWJsZSBSdW5Db250ZXh0LiAqL1xuICByZWNvcmRlcihyOiBSZWNvcmRlciB8IEZsb3dSZWNvcmRlcik6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPjtcbiAgLyoqIFNldCByZWRhY3Rpb24gcG9saWN5IGZvciB0aGUgbmV4dCBydW4uIFJldHVybnMgYSBjaGFpbmFibGUgUnVuQ29udGV4dC4gKi9cbiAgcmVkYWN0KHBvbGljeTogUmVkYWN0aW9uUG9saWN5KTogUnVuQ29udGV4dDxUT3V0LCBUU2NvcGU+O1xuICAvKiogRXhlY3V0ZSB0aGUgY2hhcnQgZGlyZWN0bHkgKGJhcmUgcnVuLCBubyByZWNvcmRlcnMpLiAqL1xuICBydW4ob3B0aW9ucz86IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3VsdD47XG4gIC8qKiBHZW5lcmF0ZSBPcGVuQVBJIDMuMSBzcGVjIGZyb20gY2hhcnQgbWV0YWRhdGEgKyBjb250cmFjdC4gQ2FjaGVkIGZvciBuby1vcHRpb25zIGNhbGxzLiAqL1xuICB0b09wZW5BUEkob3B0aW9ucz86IENoYXJ0T3BlbkFQSU9wdGlvbnMpOiBvYmplY3Q7XG4gIC8qKiBHZW5lcmF0ZSBNQ1AgdG9vbCBkZXNjcmlwdGlvbiBmcm9tIGNoYXJ0IG1ldGFkYXRhLiBDYWNoZWQuICovXG4gIHRvTUNQVG9vbCgpOiBNQ1BUb29sRGVzY3JpcHRpb247XG59XG5cbi8vIENhY2hlIGZvciBuby1vcHRpb25zIHRvT3BlbkFQSSgpIGNhbGxzIG9ubHkg4oCUIHBhcmFtZXRlcml6ZWQgY2FsbHMgYXJlIG5vdCBjYWNoZWRcbi8vIGJlY2F1c2UgZGlmZmVyZW50IG9wdGlvbnMgcHJvZHVjZSBkaWZmZXJlbnQgb3V0cHV0LlxuY29uc3Qgb3BlbkFQSUNhY2hlID0gbmV3IFdlYWtNYXA8Rmxvd0NoYXJ0LCBvYmplY3Q+KCk7XG5jb25zdCBtY3BDYWNoZSA9IG5ldyBXZWFrTWFwPEZsb3dDaGFydCwgTUNQVG9vbERlc2NyaXB0aW9uPigpO1xuXG4vKipcbiAqIEVucmljaCBhIEZsb3dDaGFydCB3aXRoIHJ1biArIGRlc2NyaWJlIG1ldGhvZHMuXG4gKiBDYWxsZWQgYnkgRmxvd0NoYXJ0QnVpbGRlci5idWlsZCgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVJ1bm5hYmxlPFRPdXQsIFRTY29wZT4oY2hhcnQ6IEZsb3dDaGFydDxUT3V0LCBUU2NvcGU+KTogUnVubmFibGVGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPiB7XG4gIGNvbnN0IHJ1bm5hYmxlID0gY2hhcnQgYXMgUnVubmFibGVGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPjtcblxuICBydW5uYWJsZS5yZWNvcmRlciA9IGZ1bmN0aW9uIChyOiBSZWNvcmRlciB8IEZsb3dSZWNvcmRlcik6IFJ1bkNvbnRleHQ8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIG5ldyBSdW5Db250ZXh0KGNoYXJ0KS5yZWNvcmRlcihyKTtcbiAgfTtcblxuICBydW5uYWJsZS5yZWRhY3QgPSBmdW5jdGlvbiAocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiBSdW5Db250ZXh0PFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiBuZXcgUnVuQ29udGV4dChjaGFydCkucmVkYWN0KHBvbGljeSk7XG4gIH07XG5cbiAgcnVubmFibGUucnVuID0gZnVuY3Rpb24gKG9wdGlvbnM/OiBSdW5PcHRpb25zKTogUHJvbWlzZTxSdW5SZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFJ1bkNvbnRleHQoY2hhcnQpLnJ1bihvcHRpb25zKTtcbiAgfTtcblxuICBydW5uYWJsZS50b09wZW5BUEkgPSBmdW5jdGlvbiAob3B0aW9ucz86IENoYXJ0T3BlbkFQSU9wdGlvbnMpOiBvYmplY3Qge1xuICAgIC8vIE9ubHkgY2FjaGUgbm8tb3B0aW9ucyBjYWxscyDigJQgcGFyYW1ldGVyaXplZCBjYWxscyB2YXJ5IGJ5IG9wdGlvbnNcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNhY2hlZCA9IG9wZW5BUElDYWNoZS5nZXQoY2hhcnQpO1xuICAgICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGVyQ2hhcnQgPSBjaGFydCBhcyBhbnk7XG4gICAgY29uc3QgdGl0bGUgPSBvcHRpb25zPy50aXRsZSA/PyBidWlsZGVyQ2hhcnQuZGVzY3JpcHRpb24/LnNwbGl0KCdcXG4nKVswXSA/PyAnQVBJJztcbiAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucz8udmVyc2lvbiA/PyAnMS4wLjAnO1xuICAgIC8vIFVzZSByb290LmlkICh0aGUgZXhwbGljaXQgbWFjaGluZS1yZWFkYWJsZSBpZCkgYXMgdGhlIHBhdGggc2VnbWVudCwgc2FuaXRpemVkXG4gICAgY29uc3QgcmF3SWQgPSBidWlsZGVyQ2hhcnQucm9vdD8uaWQgPz8gJ2V4ZWN1dGUnO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zPy5wYXRoID8/IGAvJHtzbHVnaWZ5KHJhd0lkKX1gO1xuXG4gICAgY29uc3Qgc3BlYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBvcGVuYXBpOiAnMy4xLjAnLFxuICAgICAgaW5mbzogeyB0aXRsZSwgdmVyc2lvbiwgZGVzY3JpcHRpb246IG9wdGlvbnM/LmRlc2NyaXB0aW9uID8/IGJ1aWxkZXJDaGFydC5kZXNjcmlwdGlvbiB9LFxuICAgICAgcGF0aHM6IHtcbiAgICAgICAgW3BhdGhdOiB7XG4gICAgICAgICAgcG9zdDoge1xuICAgICAgICAgICAgc3VtbWFyeTogdGl0bGUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgLi4uKGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiB7IHNjaGVtYTogbm9ybWFsaXplU2NoZW1hKGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYSkgfSB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgICAgICcyMDAnOiB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAuLi4oYnVpbGRlckNoYXJ0Lm91dHB1dFNjaGVtYVxuICAgICAgICAgICAgICAgICAgPyB7IGNvbnRlbnQ6IHsgJ2FwcGxpY2F0aW9uL2pzb24nOiB7IHNjaGVtYTogbm9ybWFsaXplU2NoZW1hKGJ1aWxkZXJDaGFydC5vdXRwdXRTY2hlbWEpIH0gfSB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmICghb3B0aW9ucykgb3BlbkFQSUNhY2hlLnNldChjaGFydCwgc3BlYyk7XG4gICAgcmV0dXJuIHNwZWM7XG4gIH07XG5cbiAgcnVubmFibGUudG9NQ1BUb29sID0gZnVuY3Rpb24gKCk6IE1DUFRvb2xEZXNjcmlwdGlvbiB7XG4gICAgY29uc3QgY2FjaGVkID0gbWNwQ2FjaGUuZ2V0KGNoYXJ0KTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYnVpbGRlckNoYXJ0ID0gY2hhcnQgYXMgYW55O1xuICAgIC8vIFVzZSByb290LmlkIChleHBsaWNpdCBtYWNoaW5lLXJlYWRhYmxlIGlkKSwgc2FuaXRpemVkIHRvIE1DUCBuYW1lIGNoYXJhY3RlciBhbGxvd2xpc3RcbiAgICBjb25zdCBuYW1lID0gc2FuaXRpemVNQ1BOYW1lKGJ1aWxkZXJDaGFydC5yb290Py5pZCA/PyAnZXhlY3V0ZScpO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYnVpbGRlckNoYXJ0LmRlc2NyaXB0aW9uIHx8IGBFeGVjdXRlIHRoZSAke25hbWV9IGZsb3djaGFydGA7XG5cbiAgICAvLyBNQ1Agc3BlYyByZXF1aXJlcyBpbnB1dFNjaGVtYSB0byBhbHdheXMgYmUgcHJlc2VudC5cbiAgICAvLyBXaGVuIG5vIGNvbnRyYWN0IGlzIGRlZmluZWQsIHVzZSB0aGUgcmVjb21tZW5kZWQgbm8tcGFyYW1ldGVyIGZvcm0uXG4gICAgY29uc3QgaW5wdXRTY2hlbWE6IEpzb25TY2hlbWEgPSBidWlsZGVyQ2hhcnQuaW5wdXRTY2hlbWFcbiAgICAgID8gbm9ybWFsaXplU2NoZW1hKGJ1aWxkZXJDaGFydC5pbnB1dFNjaGVtYSlcbiAgICAgIDogeyB0eXBlOiAnb2JqZWN0JywgcHJvcGVydGllczoge30sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSB9O1xuXG4gICAgY29uc3QgdG9vbDogTUNQVG9vbERlc2NyaXB0aW9uID0geyBuYW1lLCBkZXNjcmlwdGlvbiwgaW5wdXRTY2hlbWEgfTtcblxuICAgIG1jcENhY2hlLnNldChjaGFydCwgdG9vbCk7XG4gICAgcmV0dXJuIHRvb2w7XG4gIH07XG5cbiAgcmV0dXJuIHJ1bm5hYmxlO1xufVxuXG4vKipcbiAqIFNhbml0aXplIGEgc3RyaW5nIHRvIGNvbmZvcm0gdG8gdGhlIE1DUCB0b29sIG5hbWUgY2hhcmFjdGVyIGFsbG93bGlzdDpcbiAqIFtBLVphLXowLTlfXFwtLl0g4oCUIGFueSBvdGhlciBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3JlLlxuICogVHJpbXMgbGVhZGluZy90cmFpbGluZyB1bmRlcnNjb3JlcyBpbnRyb2R1Y2VkIGJ5IHJlcGxhY2VtZW50LlxuICovXG5mdW5jdGlvbiBzYW5pdGl6ZU1DUE5hbWUoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpZC5yZXBsYWNlKC9bXkEtWmEtejAtOV9cXC0uXS9nLCAnXycpLnJlcGxhY2UoL15fK3xfKyQvZywgJycpIHx8ICdleGVjdXRlJztcbn1cblxuLyoqXG4gKiBTbHVnaWZ5IGEgc3RyaW5nIGZvciB1c2UgYXMgYW4gT3BlbkFQSSBwYXRoIHNlZ21lbnQuXG4gKiBMb3dlcmNhc2VzIGFuZCByZXBsYWNlcyBub24tYWxwaGFudW1lcmljIHJ1bnMgd2l0aCBoeXBoZW5zLlxuICovXG5mdW5jdGlvbiBzbHVnaWZ5KGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIGlkXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL14tfC0kL2csICcnKSB8fCAnZXhlY3V0ZSdcbiAgKTtcbn1cbiJdfQ==
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* d3-style chainable run methods and self-describing outputs.
|
|
7
7
|
*/
|
|
8
8
|
import type { FlowChart } from '../builder/types.js';
|
|
9
|
+
import type { JsonSchema } from '../contract/types.js';
|
|
9
10
|
import type { FlowRecorder } from '../engine/narrative/types.js';
|
|
10
11
|
import type { RunOptions } from '../engine/types.js';
|
|
11
12
|
import type { Recorder, RedactionPolicy } from '../scope/types.js';
|
|
@@ -17,11 +18,16 @@ export interface ChartOpenAPIOptions {
|
|
|
17
18
|
description?: string;
|
|
18
19
|
path?: string;
|
|
19
20
|
}
|
|
20
|
-
/** MCP tool description. */
|
|
21
|
+
/** MCP tool description — shape required by the Model Context Protocol spec. */
|
|
21
22
|
export interface MCPToolDescription {
|
|
22
23
|
name: string;
|
|
23
24
|
description: string;
|
|
24
|
-
|
|
25
|
+
/**
|
|
26
|
+
* JSON Schema object describing the tool's input.
|
|
27
|
+
* Always present — the MCP spec requires inputSchema even for tools with no parameters.
|
|
28
|
+
* Defaults to `{ type: 'object', properties: {}, additionalProperties: false }`.
|
|
29
|
+
*/
|
|
30
|
+
inputSchema: JsonSchema;
|
|
25
31
|
}
|
|
26
32
|
/**
|
|
27
33
|
* FlowChart enriched with d3-style run methods and self-describing outputs.
|
|
@@ -37,7 +43,7 @@ export interface RunnableFlowChart<TOut = any, TScope = any> extends FlowChart<T
|
|
|
37
43
|
redact(policy: RedactionPolicy): RunContext<TOut, TScope>;
|
|
38
44
|
/** Execute the chart directly (bare run, no recorders). */
|
|
39
45
|
run(options?: RunOptions): Promise<RunResult>;
|
|
40
|
-
/** Generate OpenAPI 3.1 spec from chart metadata + contract. Cached. */
|
|
46
|
+
/** Generate OpenAPI 3.1 spec from chart metadata + contract. Cached for no-options calls. */
|
|
41
47
|
toOpenAPI(options?: ChartOpenAPIOptions): object;
|
|
42
48
|
/** Generate MCP tool description from chart metadata. Cached. */
|
|
43
49
|
toMCPTool(): MCPToolDescription;
|
package/package.json
CHANGED