@copilotkitnext/angular 0.0.4 → 0.0.6
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/dist/components/chat/copilot-chat-assistant-message.component.d.ts +1 -0
- package/dist/core/copilotkit.providers.d.ts +1 -1
- package/dist/core/copilotkit.service.d.ts +5 -5
- package/dist/core/copilotkit.types.d.ts +8 -10
- package/dist/directives/copilotkit-frontend-tool.directive.d.ts +1 -1
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.component.mjs +11 -5
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +2 -2
- package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +2 -2
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +14 -8
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +10 -3
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +7 -10
- package/dist/esm2022/core/copilotkit.providers.mjs +1 -1
- package/dist/esm2022/core/copilotkit.service.mjs +6 -22
- package/dist/esm2022/core/copilotkit.types.mjs +2 -1
- package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +1 -3
- package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +1 -2
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +15 -5
- package/dist/esm2022/lib/slots/slot.utils.mjs +14 -5
- package/dist/esm2022/utils/frontend-tool.utils.mjs +1 -5
- package/dist/esm2022/utils/human-in-the-loop.utils.mjs +4 -7
- package/dist/fesm2022/copilotkitnext-angular.mjs +76 -65
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/utils/frontend-tool.utils.d.ts +1 -1
- package/package.json +3 -3
|
@@ -54,10 +54,9 @@ export function registerHumanInTheLoop(tool) {
|
|
|
54
54
|
service.copilotkit.addTool(frontendTool);
|
|
55
55
|
const toolId = frontendTool.name;
|
|
56
56
|
// Register tool render if provided
|
|
57
|
-
if (frontendTool.render
|
|
57
|
+
if (frontendTool.render) {
|
|
58
58
|
service.registerToolRender(frontendTool.name, {
|
|
59
59
|
name: frontendTool.name,
|
|
60
|
-
args: tool.parameters,
|
|
61
60
|
render: frontendTool.render
|
|
62
61
|
});
|
|
63
62
|
}
|
|
@@ -131,10 +130,9 @@ export function addHumanInTheLoop(service, tool) {
|
|
|
131
130
|
service.copilotkit.addTool(frontendTool);
|
|
132
131
|
const toolId = frontendTool.name;
|
|
133
132
|
// Register tool render if provided
|
|
134
|
-
if (frontendTool.render
|
|
133
|
+
if (frontendTool.render) {
|
|
135
134
|
service.registerToolRender(frontendTool.name, {
|
|
136
135
|
name: frontendTool.name,
|
|
137
|
-
args: tool.parameters,
|
|
138
136
|
render: frontendTool.render
|
|
139
137
|
});
|
|
140
138
|
}
|
|
@@ -208,10 +206,9 @@ export function createHumanInTheLoop(service, tool) {
|
|
|
208
206
|
service.copilotkit.addTool(frontendTool);
|
|
209
207
|
toolId = frontendTool.name;
|
|
210
208
|
// Register tool render if provided
|
|
211
|
-
if (frontendTool.render
|
|
209
|
+
if (frontendTool.render) {
|
|
212
210
|
service.registerToolRender(frontendTool.name, {
|
|
213
211
|
name: frontendTool.name,
|
|
214
|
-
args: currentTool.parameters,
|
|
215
212
|
render: frontendTool.render
|
|
216
213
|
});
|
|
217
214
|
}
|
|
@@ -293,4 +290,4 @@ export function enhancePropsForHumanInTheLoop(props, status, respond) {
|
|
|
293
290
|
respond: undefined
|
|
294
291
|
};
|
|
295
292
|
}
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4taW4tdGhlLWxvb3AudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaHVtYW4taW4tdGhlLWxvb3AudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxjQUFjLEVBSWYsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsSUFBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLDBCQUEwQjtJQUMxQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQWlCLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxJQUFJLGNBQWMsR0FBdUMsSUFBSSxDQUFDO0lBRTlELDBCQUEwQjtJQUMxQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBZSxFQUFpQixFQUFFO1FBQ3ZELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBUSxFQUFvQixFQUFFO1FBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsR0FB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QzNDLEtBQTZCLEVBQzdCLE1BQXNCLEVBQ3RCLE9BQTRDO0lBRTVDLElBQUksTUFBTSxLQUFLLGNBQWMsQ0FBQyxTQUFTLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkQsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE1BQU0sRUFBRSxjQUFjLENBQUMsU0FBUztZQUNoQyxPQUFPO1NBQ2tCLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksTUFBTSxLQUFLLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxPQUFPO1lBQ0wsR0FBRyxLQUFLO1lBQ1IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQy9CLE1BQU0sRUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVELE9BQU8sRUFBRSxTQUFTO1NBQ08sQ0FBQztJQUM5QixDQUFDO0lBRUQsYUFBYTtJQUNiLE9BQU87UUFDTCxHQUFHLEtBQUs7UUFDUixNQUFNLEVBQUUsY0FBYyxDQUFDLFVBQVU7UUFDakMsTUFBTSxFQUFFLFNBQVM7UUFDakIsT0FBTyxFQUFFLFNBQVM7S0FDTyxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBcbiAgRGVzdHJveVJlZiwgXG4gIGluamVjdCwgXG4gIHNpZ25hbCwgXG4gIFNpZ25hbCxcbiAgVHlwZSxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb3BpbG90S2l0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlJztcbmltcG9ydCB7IFxuICBBbmd1bGFySHVtYW5JblRoZUxvb3AsIFxuICBUb29sQ2FsbFN0YXR1cyxcbiAgSHVtYW5JblRoZUxvb3BTdGF0ZSxcbiAgSHVtYW5JblRoZUxvb3BQcm9wcyxcbiAgQW5ndWxhckZyb250ZW5kVG9vbFxufSBmcm9tICcuLi9jb3JlL2NvcGlsb3RraXQudHlwZXMnO1xuXG4vKipcbiAqIFJlZ2lzdGVycyBhIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uLlxuICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxuICogQXV0b21hdGljYWxseSBjbGVhbnMgdXAgd2hlbiB0aGUgY29tcG9uZW50L3NlcnZpY2UgaXMgZGVzdHJveWVkLlxuICogXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFRoZSB0b29sIElEXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgQXBwcm92YWxDb21wb25lbnQge1xuICogICB0b29sSWQgPSByZWdpc3Rlckh1bWFuSW5UaGVMb29wKHtcbiAqICAgICBuYW1lOiAncmVxdWlyZUFwcHJvdmFsJyxcbiAqICAgICBkZXNjcmlwdGlvbjogJ1JlcXVpcmVzIHVzZXIgYXBwcm92YWwnLFxuICogICAgIGFyZ3M6IHoub2JqZWN0KHsgYWN0aW9uOiB6LnN0cmluZygpIH0pLFxuICogICAgIHJlbmRlcjogQXBwcm92YWxEaWFsb2dDb21wb25lbnRcbiAqICAgfSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVySHVtYW5JblRoZUxvb3A8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgdG9vbDogQW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+XG4pOiBzdHJpbmcge1xuICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0KENvcGlsb3RLaXRTZXJ2aWNlKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgXG4gIC8vIENyZWF0ZSBzdGF0ZSBtYW5hZ2VtZW50XG4gIGNvbnN0IHN0YXR1c1NpZ25hbCA9IHNpZ25hbDxUb29sQ2FsbFN0YXR1cz4oVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcyk7XG4gIGxldCByZXNvbHZlUHJvbWlzZTogKChyZXN1bHQ6IHVua25vd24pID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvLyBDcmVhdGUgcmVzcG9uZCBmdW5jdGlvblxuICBjb25zdCByZXNwb25kID0gYXN5bmMgKHJlc3VsdDogdW5rbm93bik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChyZXNvbHZlUHJvbWlzZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UocmVzdWx0KTtcbiAgICAgIHN0YXR1c1NpZ25hbC5zZXQoVG9vbENhbGxTdGF0dXMuQ29tcGxldGUpO1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSBudWxsO1xuICAgIH1cbiAgfTtcbiAgXG4gIC8vIENyZWF0ZSBoYW5kbGVyIHRoYXQgcmV0dXJucyBhIFByb21pc2VcbiAgY29uc3QgaGFuZGxlciA9IGFzeW5jIChfYXJnczogVCk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgc3RhdHVzU2lnbmFsLnNldChUb29sQ2FsbFN0YXR1cy5FeGVjdXRpbmcpO1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuICB9O1xuICBcbiAgLy8gQ3JlYXRlIGVuaGFuY2VkIHJlbmRlciBmdW5jdGlvblxuICBjb25zdCBlbmhhbmNlZFJlbmRlciA9IGNyZWF0ZUVuaGFuY2VkUmVuZGVyKHRvb2wucmVuZGVyLCBzdGF0dXNTaWduYWwsIHJlc3BvbmQpO1xuICBcbiAgLy8gQ3JlYXRlIHRoZSBmcm9udGVuZCB0b29sXG4gIGNvbnN0IGZyb250ZW5kVG9vbDogQW5ndWxhckZyb250ZW5kVG9vbDxUPiA9IHtcbiAgICAuLi50b29sLFxuICAgIGhhbmRsZXIsXG4gICAgcmVuZGVyOiBlbmhhbmNlZFJlbmRlclxuICB9O1xuICBcbiAgLy8gQWRkIHRoZSB0b29sIChyZXR1cm5zIHZvaWQsIHNvIHdlIHVzZSB0aGUgdG9vbCBuYW1lIGFzIElEKVxuICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbChmcm9udGVuZFRvb2wpO1xuICBjb25zdCB0b29sSWQgPSBmcm9udGVuZFRvb2wubmFtZTtcbiAgXG4gIC8vIFJlZ2lzdGVyIHRvb2wgcmVuZGVyIGlmIHByb3ZpZGVkXG4gIGlmIChmcm9udGVuZFRvb2wucmVuZGVyICYmIHRvb2wucGFyYW1ldGVycykge1xuICAgIHNlcnZpY2UucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lLCB7XG4gICAgICBuYW1lOiBmcm9udGVuZFRvb2wubmFtZSxcbiAgICAgIGFyZ3M6IHRvb2wucGFyYW1ldGVycyxcbiAgICAgIHJlbmRlcjogZnJvbnRlbmRUb29sLnJlbmRlclxuICAgIH0pO1xuICB9XG4gIFxuICAvLyBDbGVhbnVwIG9uIGRlc3Ryb3lcbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIHNlcnZpY2UuY29waWxvdGtpdC5yZW1vdmVUb29sKHRvb2xJZCk7XG4gICAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICAgIHNlcnZpY2UudW5yZWdpc3RlclRvb2xSZW5kZXIoZnJvbnRlbmRUb29sLm5hbWUpO1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gdG9vbElkO1xufVxuXG4vKipcbiAqIEFkZHMgYSBodW1hbi1pbi10aGUtbG9vcCB0b29sIHdpdGggZXhwbGljaXQgc2VydmljZSBwYXJhbWV0ZXIuXG4gKiBSZXR1cm5zIGEgY2xlYW51cCBmdW5jdGlvbi5cbiAqIFxuICogQHBhcmFtIHNlcnZpY2UgLSBUaGUgQ29waWxvdEtpdFNlcnZpY2UgaW5zdGFuY2VcbiAqIEBwYXJhbSB0b29sIC0gVGhlIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgQ2xlYW51cCBmdW5jdGlvbiB0byByZW1vdmUgdGhlIHRvb2xcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAqICAgcHJpdmF0ZSBjbGVhbnVwPzogKCkgPT4gdm9pZDtcbiAqICAgXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29waWxvdGtpdDogQ29waWxvdEtpdFNlcnZpY2UpIHt9XG4gKiAgIFxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLmNsZWFudXAgPSBhZGRIdW1hbkluVGhlTG9vcCh0aGlzLmNvcGlsb3RraXQsIHtcbiAqICAgICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgICAgZGVzY3JpcHRpb246ICdSZXF1aXJlcyB1c2VyIGFwcHJvdmFsJyxcbiAqICAgICAgIGFyZ3M6IHoub2JqZWN0KHsgYWN0aW9uOiB6LnN0cmluZygpIH0pLFxuICogICAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICAgIH0pO1xuICogICB9XG4gKiAgIFxuICogICBuZ09uRGVzdHJveSgpIHtcbiAqICAgICB0aGlzLmNsZWFudXA/LigpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEh1bWFuSW5UaGVMb29wPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6ICgpID0+IHZvaWQge1xuICAvLyBDcmVhdGUgc3RhdGUgbWFuYWdlbWVudFxuICBjb25zdCBzdGF0dXNTaWduYWwgPSBzaWduYWw8VG9vbENhbGxTdGF0dXM+KFRvb2xDYWxsU3RhdHVzLkluUHJvZ3Jlc3MpO1xuICBsZXQgcmVzb2x2ZVByb21pc2U6ICgocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8gQ3JlYXRlIHJlc3BvbmQgZnVuY3Rpb25cbiAgY29uc3QgcmVzcG9uZCA9IGFzeW5jIChyZXN1bHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAocmVzb2x2ZVByb21pc2UpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHJlc3VsdCk7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgaGFuZGxlciB0aGF0IHJldHVybnMgYSBQcm9taXNlXG4gIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoX2FyZ3M6IFQpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHN0YXR1c1NpZ25hbC5zZXQoVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfTtcbiAgXG4gIC8vIENyZWF0ZSBlbmhhbmNlZCByZW5kZXIgZnVuY3Rpb25cbiAgY29uc3QgZW5oYW5jZWRSZW5kZXIgPSBjcmVhdGVFbmhhbmNlZFJlbmRlcih0b29sLnJlbmRlciwgc3RhdHVzU2lnbmFsLCByZXNwb25kKTtcbiAgXG4gIC8vIENyZWF0ZSB0aGUgZnJvbnRlbmQgdG9vbFxuICBjb25zdCBmcm9udGVuZFRvb2w6IEFuZ3VsYXJGcm9udGVuZFRvb2w8VD4gPSB7XG4gICAgLi4udG9vbCxcbiAgICBoYW5kbGVyLFxuICAgIHJlbmRlcjogZW5oYW5jZWRSZW5kZXJcbiAgfTtcbiAgXG4gIC8vIEFkZCB0aGUgdG9vbCAocmV0dXJucyB2b2lkLCBzbyB3ZSB1c2UgdGhlIHRvb2wgbmFtZSBhcyBJRClcbiAgc2VydmljZS5jb3BpbG90a2l0LmFkZFRvb2woZnJvbnRlbmRUb29sKTtcbiAgY29uc3QgdG9vbElkID0gZnJvbnRlbmRUb29sLm5hbWU7XG4gIFxuICAvLyBSZWdpc3RlciB0b29sIHJlbmRlciBpZiBwcm92aWRlZFxuICBpZiAoZnJvbnRlbmRUb29sLnJlbmRlciAmJiB0b29sLnBhcmFtZXRlcnMpIHtcbiAgICBzZXJ2aWNlLnJlZ2lzdGVyVG9vbFJlbmRlcihmcm9udGVuZFRvb2wubmFtZSwge1xuICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICBhcmdzOiB0b29sLnBhcmFtZXRlcnMsXG4gICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgIGlmIChmcm9udGVuZFRvb2wucmVuZGVyKSB7XG4gICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgd2l0aCBkeW5hbWljIHVwZGF0ZSBjYXBhYmlsaXRpZXMuXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN0YXR1cyBzaWduYWwsIHVwZGF0ZSBhbmQgZGVzdHJveSBtZXRob2RzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBodW1hbkluVGhlTG9vcCA9IGNyZWF0ZUh1bWFuSW5UaGVMb29wKHRoaXMuY29waWxvdGtpdCwge1xuICogICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgYXJnczogei5vYmplY3QoeyBhY3Rpb246IHouc3RyaW5nKCkgfSksXG4gKiAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICB9KTtcbiAqICAgXG4gKiAgIHVwZGF0ZURlc2NyaXB0aW9uKG5ld0Rlc2M6IHN0cmluZykge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AudXBkYXRlKHsgZGVzY3JpcHRpb246IG5ld0Rlc2MgfSk7XG4gKiAgIH1cbiAqICAgXG4gKiAgIG5nT25EZXN0cm95KCkge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AuZGVzdHJveSgpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh1bWFuSW5UaGVMb29wPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6IEh1bWFuSW5UaGVMb29wU3RhdGUgJiB7IHVwZGF0ZTogKHVwZGF0ZXM6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PikgPT4gdm9pZCB9IHtcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IGN1cnJlbnRUb29sID0geyAuLi50b29sIH07XG4gIGxldCB0b29sSWQ6IHN0cmluZyA9ICcnO1xuICBsZXQgcmVzb2x2ZVByb21pc2U6ICgocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8gQ3JlYXRlIHJlc3BvbmQgZnVuY3Rpb25cbiAgY29uc3QgcmVzcG9uZCA9IGFzeW5jIChyZXN1bHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAocmVzb2x2ZVByb21pc2UpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHJlc3VsdCk7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgaGFuZGxlciB0aGF0IHJldHVybnMgYSBQcm9taXNlXG4gIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoX2FyZ3M6IFQpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHN0YXR1c1NpZ25hbC5zZXQoVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfTtcbiAgXG4gIC8vIEZ1bmN0aW9uIHRvIGFkZCB0aGUgdG9vbFxuICBjb25zdCBhZGRUb29sID0gKCkgPT4ge1xuICAgIC8vIENyZWF0ZSBlbmhhbmNlZCByZW5kZXIgZnVuY3Rpb25cbiAgICBjb25zdCBlbmhhbmNlZFJlbmRlciA9IGNyZWF0ZUVuaGFuY2VkUmVuZGVyKGN1cnJlbnRUb29sLnJlbmRlciwgc3RhdHVzU2lnbmFsLCByZXNwb25kKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgICBjb25zdCBmcm9udGVuZFRvb2w6IEFuZ3VsYXJGcm9udGVuZFRvb2w8VD4gPSB7XG4gICAgICAuLi5jdXJyZW50VG9vbCxcbiAgICAgIGhhbmRsZXIsXG4gICAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdG9vbCAocmV0dXJucyB2b2lkLCBzbyB3ZSB1c2UgdGhlIHRvb2wgbmFtZSBhcyBJRClcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbChmcm9udGVuZFRvb2wpO1xuICAgIHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHRvb2wgcmVuZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIgJiYgY3VycmVudFRvb2wucGFyYW1ldGVycykge1xuICAgICAgc2VydmljZS5yZWdpc3RlclRvb2xSZW5kZXIoZnJvbnRlbmRUb29sLm5hbWUsIHtcbiAgICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICAgIGFyZ3M6IGN1cnJlbnRUb29sLnBhcmFtZXRlcnMsXG4gICAgICAgIHJlbmRlcjogZnJvbnRlbmRUb29sLnJlbmRlclxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgdG9vbFxuICBhZGRUb29sKCk7XG4gIFxuICByZXR1cm4ge1xuICAgIHN0YXR1czogc3RhdHVzU2lnbmFsLmFzUmVhZG9ubHkoKSxcbiAgICB0b29sSWQsXG4gICAgdXBkYXRlOiAodXBkYXRlczogUGFydGlhbDxBbmd1bGFySHVtYW5JblRoZUxvb3A8VD4+KSA9PiB7XG4gICAgICAvLyBSZW1vdmUgb2xkIHRvb2xcbiAgICAgIHNlcnZpY2UuY29waWxvdGtpdC5yZW1vdmVUb29sKHRvb2xJZCk7XG4gICAgICBpZiAoY3VycmVudFRvb2wucmVuZGVyKSB7XG4gICAgICAgIHNlcnZpY2UudW5yZWdpc3RlclRvb2xSZW5kZXIoY3VycmVudFRvb2wubmFtZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSB0b29sIGNvbmZpZ3VyYXRpb25cbiAgICAgIGN1cnJlbnRUb29sID0geyAuLi5jdXJyZW50VG9vbCwgLi4udXBkYXRlcyB9O1xuICAgICAgXG4gICAgICAvLyBSZS1hZGQgd2l0aCBuZXcgY29uZmlndXJhdGlvblxuICAgICAgYWRkVG9vbCgpO1xuICAgIH0sXG4gICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgc2VydmljZS5jb3BpbG90a2l0LnJlbW92ZVRvb2wodG9vbElkKTtcbiAgICAgIGlmIChjdXJyZW50VG9vbC5yZW5kZXIpIHtcbiAgICAgICAgc2VydmljZS51bnJlZ2lzdGVyVG9vbFJlbmRlcihjdXJyZW50VG9vbC5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBlbmhhbmNlZCByZW5kZXIgZnVuY3Rpb24gdGhhdCBpbmplY3RzIHRoZSByZXNwb25kIGZ1bmN0aW9uXG4gKiB3aGVuIHRoZSBzdGF0dXMgaXMgJ2V4ZWN1dGluZycuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVuaGFuY2VkUmVuZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihcbiAgb3JpZ2luYWxSZW5kZXI6IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPEh1bWFuSW5UaGVMb29wUHJvcHM8VD4+LFxuICBfc3RhdHVzU2lnbmFsOiBTaWduYWw8VG9vbENhbGxTdGF0dXM+LFxuICBfcmVzcG9uZDogKHJlc3VsdDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPlxuKTogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gIC8vIEZvciBjb21wb25lbnQgY2xhc3Nlcywgd2UgbmVlZCB0byBjcmVhdGUgYSB3cmFwcGVyXG4gIGlmIChpc0NvbXBvbmVudENsYXNzKG9yaWdpbmFsUmVuZGVyKSkge1xuICAgIC8vIFJldHVybiBhIHdyYXBwZXIgY29tcG9uZW50IGZhY3RvcnlcbiAgICAvLyBUaGlzIGlzIGNvbXBsZXggaW4gQW5ndWxhciBhbmQgd291bGQgcmVxdWlyZSBkeW5hbWljIGNvbXBvbmVudCBjcmVhdGlvblxuICAgIC8vIEZvciBub3csIHdlJ2xsIHJldHVybiB0aGUgb3JpZ2luYWwgYW5kIHJlbHkgb24gcHJvcCBpbmplY3Rpb25cbiAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXI7XG4gIH1cbiAgXG4gIC8vIEZvciB0ZW1wbGF0ZXMsIHdlIGNhbid0IGVhc2lseSB3cmFwIHRoZW1cbiAgLy8gVGhlIHRlbXBsYXRlIGNvbnRleHQgd2lsbCBiZSBlbmhhbmNlZCBpbiB0aGUgcmVuZGVyIGNvbXBvbmVudFxuICByZXR1cm4gb3JpZ2luYWxSZW5kZXI7XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSBjb21wb25lbnQgY2xhc3NcbiAqL1xuZnVuY3Rpb24gaXNDb21wb25lbnRDbGFzcyh2YWx1ZTogYW55KTogdmFsdWUgaXMgVHlwZTxhbnk+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRW5oYW5jZWQgY29tcG9uZW50IHdyYXBwZXIgZm9yIGh1bWFuLWluLXRoZS1sb29wLlxuICogVGhpcyB3b3VsZCBiZSB1c2VkIGludGVybmFsbHkgYnkgdGhlIHRvb2wgcmVuZGVyIGNvbXBvbmVudCB0byBpbmplY3RcbiAqIHRoZSByZXNwb25kIGZ1bmN0aW9uIGJhc2VkIG9uIHN0YXR1cy5cbiAqIFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmhhbmNlUHJvcHNGb3JIdW1hbkluVGhlTG9vcDxUPihcbiAgcHJvcHM6IEh1bWFuSW5UaGVMb29wUHJvcHM8VD4sXG4gIHN0YXR1czogVG9vbENhbGxTdGF0dXMsXG4gIHJlc3BvbmQ/OiAocmVzdWx0OiB1bmtub3duKSA9PiBQcm9taXNlPHZvaWQ+XG4pOiBIdW1hbkluVGhlTG9vcFByb3BzPFQ+IHtcbiAgaWYgKHN0YXR1cyA9PT0gVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nICYmIHJlc3BvbmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyxcbiAgICAgIHJlc3BvbmRcbiAgICB9IGFzIEh1bWFuSW5UaGVMb29wUHJvcHM8VD47XG4gIH1cbiAgXG4gIGlmIChzdGF0dXMgPT09IFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc3RhdHVzOiBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSxcbiAgICAgIHJlc3VsdDogdHlwZW9mIHByb3BzLnJlc3VsdCA9PT0gJ3N0cmluZycgPyBwcm9wcy5yZXN1bHQgOiAnJyxcbiAgICAgIHJlc3BvbmQ6IHVuZGVmaW5lZFxuICAgIH0gYXMgSHVtYW5JblRoZUxvb3BQcm9wczxUPjtcbiAgfVxuICBcbiAgLy8gSW5Qcm9ncmVzc1xuICByZXR1cm4ge1xuICAgIC4uLnByb3BzLFxuICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuSW5Qcm9ncmVzcyxcbiAgICByZXN1bHQ6IHVuZGVmaW5lZCxcbiAgICByZXNwb25kOiB1bmRlZmluZWRcbiAgfSBhcyBIdW1hbkluVGhlTG9vcFByb3BzPFQ+O1xufSJdfQ==
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4taW4tdGhlLWxvb3AudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaHVtYW4taW4tdGhlLWxvb3AudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUlQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFFTCxjQUFjLEVBSWYsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsSUFBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLDBCQUEwQjtJQUMxQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQWlCLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxJQUFJLGNBQWMsR0FBdUMsSUFBSSxDQUFDO0lBRTlELDBCQUEwQjtJQUMxQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBZSxFQUFpQixFQUFFO1FBQ3ZELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVGLHdDQUF3QztJQUN4QyxNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsS0FBUSxFQUFvQixFQUFFO1FBQ25ELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixZQUFZLENBQUMsR0FB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QU87U0FDa0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixNQUFNLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDL0IsTUFBTSxFQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUQsT0FBTyxFQUFFLFNBQVM7U0FDTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxhQUFhO0lBQ2IsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLE1BQU0sRUFBRSxjQUFjLENBQUMsVUFBVTtRQUNqQyxNQUFNLEVBQUUsU0FBUztRQUNqQixPQUFPLEVBQUUsU0FBUztLQUNPLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFxuICBEZXN0cm95UmVmLCBcbiAgaW5qZWN0LCBcbiAgc2lnbmFsLCBcbiAgU2lnbmFsLFxuICBUeXBlLFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9jb3BpbG90a2l0LnNlcnZpY2UnO1xuaW1wb3J0IHsgXG4gIEFuZ3VsYXJIdW1hbkluVGhlTG9vcCwgXG4gIFRvb2xDYWxsU3RhdHVzLFxuICBIdW1hbkluVGhlTG9vcFN0YXRlLFxuICBIdW1hbkluVGhlTG9vcFByb3BzLFxuICBBbmd1bGFyRnJvbnRlbmRUb29sXG59IGZyb20gJy4uL2NvcmUvY29waWxvdGtpdC50eXBlcyc7XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgaHVtYW4taW4tdGhlLWxvb3AgdG9vbCB0aGF0IHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24uXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKiBBdXRvbWF0aWNhbGx5IGNsZWFucyB1cCB3aGVuIHRoZSBjb21wb25lbnQvc2VydmljZSBpcyBkZXN0cm95ZWQuXG4gKiBcbiAqIEBwYXJhbSB0b29sIC0gVGhlIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgVGhlIHRvb2wgSURcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBBcHByb3ZhbENvbXBvbmVudCB7XG4gKiAgIHRvb2xJZCA9IHJlZ2lzdGVySHVtYW5JblRoZUxvb3Aoe1xuICogICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgYXJnczogei5vYmplY3QoeyBhY3Rpb246IHouc3RyaW5nKCkgfSksXG4gKiAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICB9KTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJIdW1hbkluVGhlTG9vcDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6IHN0cmluZyB7XG4gIGNvbnN0IHNlcnZpY2UgPSBpbmplY3QoQ29waWxvdEtpdFNlcnZpY2UpO1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IHJlc29sdmVQcm9taXNlOiAoKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENyZWF0ZSByZXNwb25kIGZ1bmN0aW9uXG4gIGNvbnN0IHJlc3BvbmQgPSBhc3luYyAocmVzdWx0OiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZShyZXN1bHQpO1xuICAgICAgc3RhdHVzU2lnbmFsLnNldChUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gQ3JlYXRlIGhhbmRsZXIgdGhhdCByZXR1cm5zIGEgUHJvbWlzZVxuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKF9hcmdzOiBUKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uXG4gIGNvbnN0IGVuaGFuY2VkUmVuZGVyID0gY3JlYXRlRW5oYW5jZWRSZW5kZXIodG9vbC5yZW5kZXIsIHN0YXR1c1NpZ25hbCwgcmVzcG9uZCk7XG4gIFxuICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgY29uc3QgZnJvbnRlbmRUb29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+ID0ge1xuICAgIC4uLnRvb2wsXG4gICAgaGFuZGxlcixcbiAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gIH07XG4gIFxuICAvLyBBZGQgdGhlIHRvb2wgKHJldHVybnMgdm9pZCwgc28gd2UgdXNlIHRoZSB0b29sIG5hbWUgYXMgSUQpXG4gIHNlcnZpY2UuY29waWxvdGtpdC5hZGRUb29sKGZyb250ZW5kVG9vbCk7XG4gIGNvbnN0IHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICBcbiAgLy8gUmVnaXN0ZXIgdG9vbCByZW5kZXIgaWYgcHJvdmlkZWRcbiAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICBzZXJ2aWNlLnJlZ2lzdGVyVG9vbFJlbmRlcihmcm9udGVuZFRvb2wubmFtZSwge1xuICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8gQ2xlYW51cCBvbiBkZXN0cm95XG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgIGlmIChmcm9udGVuZFRvb2wucmVuZGVyKSB7XG4gICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIHRvb2xJZDtcbn1cblxuLyoqXG4gKiBBZGRzIGEgaHVtYW4taW4tdGhlLWxvb3AgdG9vbCB3aXRoIGV4cGxpY2l0IHNlcnZpY2UgcGFyYW1ldGVyLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24uXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIENsZWFudXAgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoZSB0b29sXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gKiAgIHByaXZhdGUgY2xlYW51cD86ICgpID0+IHZvaWQ7XG4gKiAgIFxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvcGlsb3RraXQ6IENvcGlsb3RLaXRTZXJ2aWNlKSB7fVxuICogICBcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgdGhpcy5jbGVhbnVwID0gYWRkSHVtYW5JblRoZUxvb3AodGhpcy5jb3BpbG90a2l0LCB7XG4gKiAgICAgICBuYW1lOiAncmVxdWlyZUFwcHJvdmFsJyxcbiAqICAgICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgICBhcmdzOiB6Lm9iamVjdCh7IGFjdGlvbjogei5zdHJpbmcoKSB9KSxcbiAqICAgICAgIHJlbmRlcjogQXBwcm92YWxEaWFsb2dDb21wb25lbnRcbiAqICAgICB9KTtcbiAqICAgfVxuICogICBcbiAqICAgbmdPbkRlc3Ryb3koKSB7XG4gKiAgICAgdGhpcy5jbGVhbnVwPy4oKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRIdW1hbkluVGhlTG9vcDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBzZXJ2aWNlOiBDb3BpbG90S2l0U2VydmljZSxcbiAgdG9vbDogQW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+XG4pOiAoKSA9PiB2b2lkIHtcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IHJlc29sdmVQcm9taXNlOiAoKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8vIENyZWF0ZSByZXNwb25kIGZ1bmN0aW9uXG4gIGNvbnN0IHJlc3BvbmQgPSBhc3luYyAocmVzdWx0OiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHJlc29sdmVQcm9taXNlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZShyZXN1bHQpO1xuICAgICAgc3RhdHVzU2lnbmFsLnNldChUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IG51bGw7XG4gICAgfVxuICB9O1xuICBcbiAgLy8gQ3JlYXRlIGhhbmRsZXIgdGhhdCByZXR1cm5zIGEgUHJvbWlzZVxuICBjb25zdCBoYW5kbGVyID0gYXN5bmMgKF9hcmdzOiBUKTogUHJvbWlzZTx1bmtub3duPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyk7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uXG4gIGNvbnN0IGVuaGFuY2VkUmVuZGVyID0gY3JlYXRlRW5oYW5jZWRSZW5kZXIodG9vbC5yZW5kZXIsIHN0YXR1c1NpZ25hbCwgcmVzcG9uZCk7XG4gIFxuICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgY29uc3QgZnJvbnRlbmRUb29sOiBBbmd1bGFyRnJvbnRlbmRUb29sPFQ+ID0ge1xuICAgIC4uLnRvb2wsXG4gICAgaGFuZGxlcixcbiAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gIH07XG4gIFxuICAvLyBBZGQgdGhlIHRvb2wgKHJldHVybnMgdm9pZCwgc28gd2UgdXNlIHRoZSB0b29sIG5hbWUgYXMgSUQpXG4gIHNlcnZpY2UuY29waWxvdGtpdC5hZGRUb29sKGZyb250ZW5kVG9vbCk7XG4gIGNvbnN0IHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICBcbiAgLy8gUmVnaXN0ZXIgdG9vbCByZW5kZXIgaWYgcHJvdmlkZWRcbiAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICBzZXJ2aWNlLnJlZ2lzdGVyVG9vbFJlbmRlcihmcm9udGVuZFRvb2wubmFtZSwge1xuICAgICAgbmFtZTogZnJvbnRlbmRUb29sLm5hbWUsXG4gICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICB9KTtcbiAgfVxuICBcbiAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgcmV0dXJuICgpID0+IHtcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgIGlmIChmcm9udGVuZFRvb2wucmVuZGVyKSB7XG4gICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGh1bWFuLWluLXRoZS1sb29wIHRvb2wgd2l0aCBkeW5hbWljIHVwZGF0ZSBjYXBhYmlsaXRpZXMuXG4gKiBcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIENvcGlsb3RLaXRTZXJ2aWNlIGluc3RhbmNlXG4gKiBAcGFyYW0gdG9vbCAtIFRoZSBodW1hbi1pbi10aGUtbG9vcCB0b29sIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHN0YXR1cyBzaWduYWwsIHVwZGF0ZSBhbmQgZGVzdHJveSBtZXRob2RzXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleHBvcnQgY2xhc3MgTXlDb21wb25lbnQge1xuICogICBodW1hbkluVGhlTG9vcCA9IGNyZWF0ZUh1bWFuSW5UaGVMb29wKHRoaXMuY29waWxvdGtpdCwge1xuICogICAgIG5hbWU6ICdyZXF1aXJlQXBwcm92YWwnLFxuICogICAgIGRlc2NyaXB0aW9uOiAnUmVxdWlyZXMgdXNlciBhcHByb3ZhbCcsXG4gKiAgICAgYXJnczogei5vYmplY3QoeyBhY3Rpb246IHouc3RyaW5nKCkgfSksXG4gKiAgICAgcmVuZGVyOiBBcHByb3ZhbERpYWxvZ0NvbXBvbmVudFxuICogICB9KTtcbiAqICAgXG4gKiAgIHVwZGF0ZURlc2NyaXB0aW9uKG5ld0Rlc2M6IHN0cmluZykge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AudXBkYXRlKHsgZGVzY3JpcHRpb246IG5ld0Rlc2MgfSk7XG4gKiAgIH1cbiAqICAgXG4gKiAgIG5nT25EZXN0cm95KCkge1xuICogICAgIHRoaXMuaHVtYW5JblRoZUxvb3AuZGVzdHJveSgpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUh1bWFuSW5UaGVMb29wPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIHNlcnZpY2U6IENvcGlsb3RLaXRTZXJ2aWNlLFxuICB0b29sOiBBbmd1bGFySHVtYW5JblRoZUxvb3A8VD5cbik6IEh1bWFuSW5UaGVMb29wU3RhdGUgJiB7IHVwZGF0ZTogKHVwZGF0ZXM6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PikgPT4gdm9pZCB9IHtcbiAgLy8gQ3JlYXRlIHN0YXRlIG1hbmFnZW1lbnRcbiAgY29uc3Qgc3RhdHVzU2lnbmFsID0gc2lnbmFsPFRvb2xDYWxsU3RhdHVzPihUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzKTtcbiAgbGV0IGN1cnJlbnRUb29sID0geyAuLi50b29sIH07XG4gIGxldCB0b29sSWQ6IHN0cmluZyA9ICcnO1xuICBsZXQgcmVzb2x2ZVByb21pc2U6ICgocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBcbiAgLy8gQ3JlYXRlIHJlc3BvbmQgZnVuY3Rpb25cbiAgY29uc3QgcmVzcG9uZCA9IGFzeW5jIChyZXN1bHQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAocmVzb2x2ZVByb21pc2UpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlKHJlc3VsdCk7XG4gICAgICBzdGF0dXNTaWduYWwuc2V0KFRvb2xDYWxsU3RhdHVzLkNvbXBsZXRlKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIFxuICAvLyBDcmVhdGUgaGFuZGxlciB0aGF0IHJldHVybnMgYSBQcm9taXNlXG4gIGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoX2FyZ3M6IFQpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHN0YXR1c1NpZ25hbC5zZXQoVG9vbENhbGxTdGF0dXMuRXhlY3V0aW5nKTtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfTtcbiAgXG4gIC8vIEZ1bmN0aW9uIHRvIGFkZCB0aGUgdG9vbFxuICBjb25zdCBhZGRUb29sID0gKCkgPT4ge1xuICAgIC8vIENyZWF0ZSBlbmhhbmNlZCByZW5kZXIgZnVuY3Rpb25cbiAgICBjb25zdCBlbmhhbmNlZFJlbmRlciA9IGNyZWF0ZUVuaGFuY2VkUmVuZGVyKGN1cnJlbnRUb29sLnJlbmRlciwgc3RhdHVzU2lnbmFsLCByZXNwb25kKTtcbiAgICBcbiAgICAvLyBDcmVhdGUgdGhlIGZyb250ZW5kIHRvb2xcbiAgICBjb25zdCBmcm9udGVuZFRvb2w6IEFuZ3VsYXJGcm9udGVuZFRvb2w8VD4gPSB7XG4gICAgICAuLi5jdXJyZW50VG9vbCxcbiAgICAgIGhhbmRsZXIsXG4gICAgICByZW5kZXI6IGVuaGFuY2VkUmVuZGVyXG4gICAgfTtcbiAgICBcbiAgICAvLyBBZGQgdG9vbCAocmV0dXJucyB2b2lkLCBzbyB3ZSB1c2UgdGhlIHRvb2wgbmFtZSBhcyBJRClcbiAgICBzZXJ2aWNlLmNvcGlsb3RraXQuYWRkVG9vbChmcm9udGVuZFRvb2wpO1xuICAgIHRvb2xJZCA9IGZyb250ZW5kVG9vbC5uYW1lO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHRvb2wgcmVuZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKGZyb250ZW5kVG9vbC5yZW5kZXIpIHtcbiAgICAgIHNlcnZpY2UucmVnaXN0ZXJUb29sUmVuZGVyKGZyb250ZW5kVG9vbC5uYW1lLCB7XG4gICAgICAgIG5hbWU6IGZyb250ZW5kVG9vbC5uYW1lLFxuICAgICAgICByZW5kZXI6IGZyb250ZW5kVG9vbC5yZW5kZXJcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgXG4gIC8vIEluaXRpYWxpemUgdGhlIHRvb2xcbiAgYWRkVG9vbCgpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IHN0YXR1c1NpZ25hbC5hc1JlYWRvbmx5KCksXG4gICAgdG9vbElkLFxuICAgIHVwZGF0ZTogKHVwZGF0ZXM6IFBhcnRpYWw8QW5ndWxhckh1bWFuSW5UaGVMb29wPFQ+PikgPT4ge1xuICAgICAgLy8gUmVtb3ZlIG9sZCB0b29sXG4gICAgICBzZXJ2aWNlLmNvcGlsb3RraXQucmVtb3ZlVG9vbCh0b29sSWQpO1xuICAgICAgaWYgKGN1cnJlbnRUb29sLnJlbmRlcikge1xuICAgICAgICBzZXJ2aWNlLnVucmVnaXN0ZXJUb29sUmVuZGVyKGN1cnJlbnRUb29sLm5hbWUpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgdG9vbCBjb25maWd1cmF0aW9uXG4gICAgICBjdXJyZW50VG9vbCA9IHsgLi4uY3VycmVudFRvb2wsIC4uLnVwZGF0ZXMgfTtcbiAgICAgIFxuICAgICAgLy8gUmUtYWRkIHdpdGggbmV3IGNvbmZpZ3VyYXRpb25cbiAgICAgIGFkZFRvb2woKTtcbiAgICB9LFxuICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgIHNlcnZpY2UuY29waWxvdGtpdC5yZW1vdmVUb29sKHRvb2xJZCk7XG4gICAgICBpZiAoY3VycmVudFRvb2wucmVuZGVyKSB7XG4gICAgICAgIHNlcnZpY2UudW5yZWdpc3RlclRvb2xSZW5kZXIoY3VycmVudFRvb2wubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZW5oYW5jZWQgcmVuZGVyIGZ1bmN0aW9uIHRoYXQgaW5qZWN0cyB0aGUgcmVzcG9uZCBmdW5jdGlvblxuICogd2hlbiB0aGUgc3RhdHVzIGlzICdleGVjdXRpbmcnLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbmhhbmNlZFJlbmRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gIG9yaWdpbmFsUmVuZGVyOiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxIdW1hbkluVGhlTG9vcFByb3BzPFQ+PixcbiAgX3N0YXR1c1NpZ25hbDogU2lnbmFsPFRvb2xDYWxsU3RhdHVzPixcbiAgX3Jlc3BvbmQ6IChyZXN1bHQ6IHVua25vd24pID0+IFByb21pc2U8dm9pZD5cbik6IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAvLyBGb3IgY29tcG9uZW50IGNsYXNzZXMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlclxuICBpZiAoaXNDb21wb25lbnRDbGFzcyhvcmlnaW5hbFJlbmRlcikpIHtcbiAgICAvLyBSZXR1cm4gYSB3cmFwcGVyIGNvbXBvbmVudCBmYWN0b3J5XG4gICAgLy8gVGhpcyBpcyBjb21wbGV4IGluIEFuZ3VsYXIgYW5kIHdvdWxkIHJlcXVpcmUgZHluYW1pYyBjb21wb25lbnQgY3JlYXRpb25cbiAgICAvLyBGb3Igbm93LCB3ZSdsbCByZXR1cm4gdGhlIG9yaWdpbmFsIGFuZCByZWx5IG9uIHByb3AgaW5qZWN0aW9uXG4gICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyO1xuICB9XG4gIFxuICAvLyBGb3IgdGVtcGxhdGVzLCB3ZSBjYW4ndCBlYXNpbHkgd3JhcCB0aGVtXG4gIC8vIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IHdpbGwgYmUgZW5oYW5jZWQgaW4gdGhlIHJlbmRlciBjb21wb25lbnRcbiAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGEgY29tcG9uZW50IGNsYXNzXG4gKi9cbmZ1bmN0aW9uIGlzQ29tcG9uZW50Q2xhc3ModmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIEVuaGFuY2VkIGNvbXBvbmVudCB3cmFwcGVyIGZvciBodW1hbi1pbi10aGUtbG9vcC5cbiAqIFRoaXMgd291bGQgYmUgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSB0b29sIHJlbmRlciBjb21wb25lbnQgdG8gaW5qZWN0XG4gKiB0aGUgcmVzcG9uZCBmdW5jdGlvbiBiYXNlZCBvbiBzdGF0dXMuXG4gKiBcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5oYW5jZVByb3BzRm9ySHVtYW5JblRoZUxvb3A8VD4oXG4gIHByb3BzOiBIdW1hbkluVGhlTG9vcFByb3BzPFQ+LFxuICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLFxuICByZXNwb25kPzogKHJlc3VsdDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPlxuKTogSHVtYW5JblRoZUxvb3BQcm9wczxUPiB7XG4gIGlmIChzdGF0dXMgPT09IFRvb2xDYWxsU3RhdHVzLkV4ZWN1dGluZyAmJiByZXNwb25kKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgc3RhdHVzOiBUb29sQ2FsbFN0YXR1cy5FeGVjdXRpbmcsXG4gICAgICByZXNwb25kXG4gICAgfSBhcyBIdW1hbkluVGhlTG9vcFByb3BzPFQ+O1xuICB9XG4gIFxuICBpZiAoc3RhdHVzID09PSBUb29sQ2FsbFN0YXR1cy5Db21wbGV0ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIHN0YXR1czogVG9vbENhbGxTdGF0dXMuQ29tcGxldGUsXG4gICAgICByZXN1bHQ6IHR5cGVvZiBwcm9wcy5yZXN1bHQgPT09ICdzdHJpbmcnID8gcHJvcHMucmVzdWx0IDogJycsXG4gICAgICByZXNwb25kOiB1bmRlZmluZWRcbiAgICB9IGFzIEh1bWFuSW5UaGVMb29wUHJvcHM8VD47XG4gIH1cbiAgXG4gIC8vIEluUHJvZ3Jlc3NcbiAgcmV0dXJuIHtcbiAgICAuLi5wcm9wcyxcbiAgICBzdGF0dXM6IFRvb2xDYWxsU3RhdHVzLkluUHJvZ3Jlc3MsXG4gICAgcmVzdWx0OiB1bmRlZmluZWQsXG4gICAgcmVzcG9uZDogdW5kZWZpbmVkXG4gIH0gYXMgSHVtYW5JblRoZUxvb3BQcm9wczxUPjtcbn0iXX0=
|
|
@@ -3,7 +3,6 @@ import { InjectionToken, signal, computed, effect, untracked, Inject, Injectable
|
|
|
3
3
|
import { toObservable } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { CopilotKitCore, ToolCallStatus, completePartialMarkdown } from '@copilotkitnext/core';
|
|
5
5
|
export { ToolCallStatus } from '@copilotkitnext/core';
|
|
6
|
-
import { z } from 'zod';
|
|
7
6
|
import { DEFAULT_AGENT_ID, partialJSONParse, randomUUID } from '@copilotkitnext/shared';
|
|
8
7
|
import { Overlay, OverlayPositionBuilder, OverlayModule } from '@angular/cdk/overlay';
|
|
9
8
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
@@ -23,6 +22,7 @@ import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
|
23
22
|
import { Subject, BehaviorSubject, merge, fromEvent, animationFrameScheduler } from 'rxjs';
|
|
24
23
|
import { startWith, throttleTime, map, distinctUntilChanged, takeUntil, debounceTime, filter } from 'rxjs/operators';
|
|
25
24
|
|
|
25
|
+
1;
|
|
26
26
|
// Injection tokens for dependency injection
|
|
27
27
|
const COPILOTKIT_RUNTIME_URL = new InjectionToken("COPILOTKIT_RUNTIME_URL");
|
|
28
28
|
const COPILOTKIT_HEADERS = new InjectionToken("COPILOTKIT_HEADERS", { factory: () => ({}) });
|
|
@@ -133,10 +133,9 @@ class CopilotKitService {
|
|
|
133
133
|
const combined = [...this._renderToolCalls()];
|
|
134
134
|
// Add render components from frontend tools
|
|
135
135
|
this._frontendTools().forEach((tool) => {
|
|
136
|
-
if (tool.render
|
|
136
|
+
if (tool.render) {
|
|
137
137
|
combined.push({
|
|
138
138
|
name: tool.name,
|
|
139
|
-
args: tool.parameters,
|
|
140
139
|
render: tool.render,
|
|
141
140
|
...(tool.agentId && { agentId: tool.agentId }),
|
|
142
141
|
});
|
|
@@ -144,10 +143,9 @@ class CopilotKitService {
|
|
|
144
143
|
});
|
|
145
144
|
// Add render components from human-in-the-loop tools
|
|
146
145
|
this._humanInTheLoop().forEach((tool) => {
|
|
147
|
-
if (tool.render
|
|
146
|
+
if (tool.render) {
|
|
148
147
|
combined.push({
|
|
149
148
|
name: tool.name,
|
|
150
|
-
args: tool.parameters,
|
|
151
149
|
render: tool.render,
|
|
152
150
|
...(tool.agentId && { agentId: tool.agentId }),
|
|
153
151
|
});
|
|
@@ -202,10 +200,9 @@ class CopilotKitService {
|
|
|
202
200
|
frontendTools.forEach((tool) => {
|
|
203
201
|
allTools[tool.name] = tool;
|
|
204
202
|
// Add render component if provided
|
|
205
|
-
if (tool.render
|
|
203
|
+
if (tool.render) {
|
|
206
204
|
allRenderToolCalls.push({
|
|
207
205
|
name: tool.name,
|
|
208
|
-
args: tool.parameters,
|
|
209
206
|
render: tool.render,
|
|
210
207
|
...(tool.agentId && { agentId: tool.agentId }),
|
|
211
208
|
});
|
|
@@ -228,10 +225,9 @@ class CopilotKitService {
|
|
|
228
225
|
};
|
|
229
226
|
allTools[tool.name] = frontendTool;
|
|
230
227
|
// Add the render component
|
|
231
|
-
if (tool.render
|
|
228
|
+
if (tool.render) {
|
|
232
229
|
allRenderToolCalls.push({
|
|
233
230
|
name: tool.name,
|
|
234
|
-
args: tool.parameters,
|
|
235
231
|
render: tool.render,
|
|
236
232
|
...(tool.agentId && { agentId: tool.agentId }),
|
|
237
233
|
});
|
|
@@ -263,16 +259,7 @@ class CopilotKitService {
|
|
|
263
259
|
});
|
|
264
260
|
}
|
|
265
261
|
});
|
|
266
|
-
//
|
|
267
|
-
effect(() => {
|
|
268
|
-
const current = this._renderToolCalls();
|
|
269
|
-
if (current !== this.initialRenderToolCalls &&
|
|
270
|
-
this.initialRenderToolCalls.length > 0) {
|
|
271
|
-
untracked(() => {
|
|
272
|
-
console.error("renderToolCalls must be a stable object. To add/remove tools dynamically, use dynamic tool registration.");
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
});
|
|
262
|
+
// Previously warned if renderToolCalls reference changed; removed per UX feedback
|
|
276
263
|
}
|
|
277
264
|
/**
|
|
278
265
|
* Setup effects to sync runtime configuration with CopilotKitCore
|
|
@@ -370,9 +357,6 @@ class CopilotKitService {
|
|
|
370
357
|
* Update render tool calls (warns if object reference changes)
|
|
371
358
|
*/
|
|
372
359
|
setRenderToolCalls(renderToolCalls) {
|
|
373
|
-
if (renderToolCalls !== this.initialRenderToolCalls) {
|
|
374
|
-
console.error("renderToolCalls must be a stable object. To add/remove tools dynamically, use dynamic tool registration.");
|
|
375
|
-
}
|
|
376
360
|
this._renderToolCalls.set(renderToolCalls);
|
|
377
361
|
}
|
|
378
362
|
/**
|
|
@@ -899,7 +883,6 @@ function addFrontendTool(service, tool) {
|
|
|
899
883
|
else {
|
|
900
884
|
const renderEntry = {
|
|
901
885
|
name: tool.name,
|
|
902
|
-
args: tool.parameters || z.object({}),
|
|
903
886
|
render: tool.render
|
|
904
887
|
};
|
|
905
888
|
service.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
|
|
@@ -952,7 +935,6 @@ function registerFrontendTool(tool) {
|
|
|
952
935
|
else {
|
|
953
936
|
const renderEntry = {
|
|
954
937
|
name: tool.name,
|
|
955
|
-
args: tool.parameters || z.object({}),
|
|
956
938
|
render: tool.render
|
|
957
939
|
};
|
|
958
940
|
service.setCurrentRenderToolCalls([...currentRenders, renderEntry]);
|
|
@@ -1047,7 +1029,6 @@ function createDynamicFrontendTool(name, description, parameters, handler, rende
|
|
|
1047
1029
|
const currentRenders = service.currentRenderToolCalls();
|
|
1048
1030
|
const renderEntry = {
|
|
1049
1031
|
name: name,
|
|
1050
|
-
args: parameters,
|
|
1051
1032
|
render: currentRender
|
|
1052
1033
|
};
|
|
1053
1034
|
const existingIndex = currentRenders.findIndex((r) => r.name === name);
|
|
@@ -1328,10 +1309,9 @@ function registerHumanInTheLoop(tool) {
|
|
|
1328
1309
|
service.copilotkit.addTool(frontendTool);
|
|
1329
1310
|
const toolId = frontendTool.name;
|
|
1330
1311
|
// Register tool render if provided
|
|
1331
|
-
if (frontendTool.render
|
|
1312
|
+
if (frontendTool.render) {
|
|
1332
1313
|
service.registerToolRender(frontendTool.name, {
|
|
1333
1314
|
name: frontendTool.name,
|
|
1334
|
-
args: tool.parameters,
|
|
1335
1315
|
render: frontendTool.render
|
|
1336
1316
|
});
|
|
1337
1317
|
}
|
|
@@ -1405,10 +1385,9 @@ function addHumanInTheLoop(service, tool) {
|
|
|
1405
1385
|
service.copilotkit.addTool(frontendTool);
|
|
1406
1386
|
const toolId = frontendTool.name;
|
|
1407
1387
|
// Register tool render if provided
|
|
1408
|
-
if (frontendTool.render
|
|
1388
|
+
if (frontendTool.render) {
|
|
1409
1389
|
service.registerToolRender(frontendTool.name, {
|
|
1410
1390
|
name: frontendTool.name,
|
|
1411
|
-
args: tool.parameters,
|
|
1412
1391
|
render: frontendTool.render
|
|
1413
1392
|
});
|
|
1414
1393
|
}
|
|
@@ -1482,10 +1461,9 @@ function createHumanInTheLoop(service, tool) {
|
|
|
1482
1461
|
service.copilotkit.addTool(frontendTool);
|
|
1483
1462
|
toolId = frontendTool.name;
|
|
1484
1463
|
// Register tool render if provided
|
|
1485
|
-
if (frontendTool.render
|
|
1464
|
+
if (frontendTool.render) {
|
|
1486
1465
|
service.registerToolRender(frontendTool.name, {
|
|
1487
1466
|
name: frontendTool.name,
|
|
1488
|
-
args: currentTool.parameters,
|
|
1489
1467
|
render: frontendTool.render
|
|
1490
1468
|
});
|
|
1491
1469
|
}
|
|
@@ -2218,7 +2196,6 @@ class CopilotKitFrontendToolDirective {
|
|
|
2218
2196
|
const currentRenders = this.copilotkit.currentRenderToolCalls();
|
|
2219
2197
|
const renderEntry = {
|
|
2220
2198
|
name: tool.name,
|
|
2221
|
-
args: tool.parameters || z.object({}),
|
|
2222
2199
|
render: tool.render,
|
|
2223
2200
|
};
|
|
2224
2201
|
// Check for duplicate
|
|
@@ -2674,7 +2651,6 @@ class CopilotKitHumanInTheLoopDirective {
|
|
|
2674
2651
|
// Register the render with respond capability
|
|
2675
2652
|
this.copilotkit.registerToolRender(this.name, {
|
|
2676
2653
|
name: this.name,
|
|
2677
|
-
args: this.parameters,
|
|
2678
2654
|
render: this.createEnhancedRender(),
|
|
2679
2655
|
});
|
|
2680
2656
|
}
|
|
@@ -3051,20 +3027,17 @@ class CopilotKitToolRenderComponent {
|
|
|
3051
3027
|
this.container.clear();
|
|
3052
3028
|
// Create the component
|
|
3053
3029
|
this.componentRef = this.container.createComponent(componentClass);
|
|
3054
|
-
//
|
|
3055
|
-
|
|
3056
|
-
|
|
3030
|
+
// Determine declared inputs to avoid NG0303 logs
|
|
3031
|
+
const cmpDef = componentClass.ɵcmp;
|
|
3032
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
3033
|
+
if (declaredInputs.has('props')) {
|
|
3057
3034
|
this.componentRef.setInput('props', props);
|
|
3058
3035
|
}
|
|
3059
|
-
|
|
3060
|
-
// If props input doesn't exist, try setting individual inputs
|
|
3036
|
+
else {
|
|
3061
3037
|
for (const [key, value] of Object.entries(props)) {
|
|
3062
|
-
|
|
3038
|
+
if (declaredInputs.has(key)) {
|
|
3063
3039
|
this.componentRef.setInput(key, value);
|
|
3064
3040
|
}
|
|
3065
|
-
catch (inputError) {
|
|
3066
|
-
// Input might not exist on the component, skip it
|
|
3067
|
-
}
|
|
3068
3041
|
}
|
|
3069
3042
|
}
|
|
3070
3043
|
// Trigger change detection
|
|
@@ -3204,10 +3177,19 @@ function createComponent(viewContainer, component, props, injector, outputs) {
|
|
|
3204
3177
|
injector
|
|
3205
3178
|
});
|
|
3206
3179
|
if (props) {
|
|
3207
|
-
// Apply props using setInput
|
|
3208
|
-
|
|
3209
|
-
|
|
3210
|
-
|
|
3180
|
+
// Apply props using setInput, but only for declared inputs
|
|
3181
|
+
const cmpDef = component.ɵcmp;
|
|
3182
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
3183
|
+
if (declaredInputs.has('props')) {
|
|
3184
|
+
componentRef.setInput('props', props);
|
|
3185
|
+
}
|
|
3186
|
+
else {
|
|
3187
|
+
for (const key in props) {
|
|
3188
|
+
if (declaredInputs.has(key)) {
|
|
3189
|
+
const value = props[key];
|
|
3190
|
+
componentRef.setInput(key, value);
|
|
3191
|
+
}
|
|
3192
|
+
}
|
|
3211
3193
|
}
|
|
3212
3194
|
}
|
|
3213
3195
|
if (outputs) {
|
|
@@ -3442,11 +3424,21 @@ class CopilotSlotComponent {
|
|
|
3442
3424
|
return;
|
|
3443
3425
|
}
|
|
3444
3426
|
const props = this.context;
|
|
3445
|
-
// Update props using setInput
|
|
3427
|
+
// Update props using setInput, only for declared inputs
|
|
3446
3428
|
if (props) {
|
|
3447
|
-
|
|
3448
|
-
|
|
3449
|
-
|
|
3429
|
+
const ctor = this.componentRef.instance.constructor;
|
|
3430
|
+
const cmpDef = ctor?.ɵcmp;
|
|
3431
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
3432
|
+
if (declaredInputs.has('props')) {
|
|
3433
|
+
this.componentRef.setInput('props', props);
|
|
3434
|
+
}
|
|
3435
|
+
else {
|
|
3436
|
+
for (const key in props) {
|
|
3437
|
+
if (declaredInputs.has(key)) {
|
|
3438
|
+
const value = props[key];
|
|
3439
|
+
this.componentRef.setInput(key, value);
|
|
3440
|
+
}
|
|
3441
|
+
}
|
|
3450
3442
|
}
|
|
3451
3443
|
}
|
|
3452
3444
|
// Trigger change detection
|
|
@@ -3571,7 +3563,7 @@ class CopilotChatTextareaComponent {
|
|
|
3571
3563
|
if (configValue !== undefined && !this.customPlaceholder()) {
|
|
3572
3564
|
this.value.set(configValue);
|
|
3573
3565
|
}
|
|
3574
|
-
});
|
|
3566
|
+
}, { allowSignalWrites: true });
|
|
3575
3567
|
}
|
|
3576
3568
|
ngAfterViewInit() {
|
|
3577
3569
|
this.calculateMaxHeight();
|
|
@@ -4574,7 +4566,7 @@ class CopilotChatInputComponent {
|
|
|
4574
4566
|
if (configValue !== undefined && !this.valueSignal()) {
|
|
4575
4567
|
this.valueSignal.set(configValue);
|
|
4576
4568
|
}
|
|
4577
|
-
});
|
|
4569
|
+
}, { allowSignalWrites: true });
|
|
4578
4570
|
}
|
|
4579
4571
|
// Output maps for slots
|
|
4580
4572
|
addFileButtonOutputs = { clicked: () => this.handleAddFile() };
|
|
@@ -5952,13 +5944,19 @@ class CopilotChatToolCallsViewComponent {
|
|
|
5952
5944
|
// Create the component
|
|
5953
5945
|
const componentRef = this.container.createComponent(componentClass);
|
|
5954
5946
|
this.componentRefs.set(toolCallId, componentRef);
|
|
5955
|
-
//
|
|
5956
|
-
|
|
5957
|
-
|
|
5958
|
-
|
|
5959
|
-
|
|
5960
|
-
|
|
5961
|
-
|
|
5947
|
+
// Determine declared inputs to avoid Angular NG0303 console errors
|
|
5948
|
+
const cmpDef = componentClass.ɵcmp;
|
|
5949
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
5950
|
+
// Prefer a single 'props' input if declared
|
|
5951
|
+
if (declaredInputs.has('props')) {
|
|
5952
|
+
componentRef.setInput('props', props);
|
|
5953
|
+
}
|
|
5954
|
+
else {
|
|
5955
|
+
// Otherwise, set only inputs that the component actually declares
|
|
5956
|
+
for (const [key, value] of Object.entries(props)) {
|
|
5957
|
+
if (declaredInputs.has(key)) {
|
|
5958
|
+
componentRef.setInput(key, value);
|
|
5959
|
+
}
|
|
5962
5960
|
}
|
|
5963
5961
|
}
|
|
5964
5962
|
// Trigger change detection
|
|
@@ -6802,6 +6800,12 @@ class CopilotChatAssistantMessageComponent {
|
|
|
6802
6800
|
toolbarContext = computed(() => ({
|
|
6803
6801
|
children: null // Will be populated by the toolbar content
|
|
6804
6802
|
}));
|
|
6803
|
+
// Return true if assistant message has non-empty text content
|
|
6804
|
+
hasMessageContent() {
|
|
6805
|
+
const raw = (this.message?.content ?? '');
|
|
6806
|
+
const content = typeof raw === 'string' ? raw : String(raw ?? '');
|
|
6807
|
+
return content.trim().length > 0;
|
|
6808
|
+
}
|
|
6805
6809
|
toolCallsViewContext = computed(() => ({
|
|
6806
6810
|
message: this.message,
|
|
6807
6811
|
messages: this.messages,
|
|
@@ -6859,8 +6863,8 @@ class CopilotChatAssistantMessageComponent {
|
|
|
6859
6863
|
</copilot-chat-tool-calls-view>
|
|
6860
6864
|
}
|
|
6861
6865
|
|
|
6862
|
-
<!-- Toolbar -->
|
|
6863
|
-
<ng-container *ngIf="toolbarVisible">
|
|
6866
|
+
<!-- Toolbar: show only when there is assistant text content -->
|
|
6867
|
+
<ng-container *ngIf="toolbarVisible && hasMessageContent()">
|
|
6864
6868
|
@if (toolbarTemplate || toolbarComponent) {
|
|
6865
6869
|
<copilot-slot
|
|
6866
6870
|
[slot]="toolbarTemplate || toolbarComponent"
|
|
@@ -6987,8 +6991,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
6987
6991
|
</copilot-chat-tool-calls-view>
|
|
6988
6992
|
}
|
|
6989
6993
|
|
|
6990
|
-
<!-- Toolbar -->
|
|
6991
|
-
<ng-container *ngIf="toolbarVisible">
|
|
6994
|
+
<!-- Toolbar: show only when there is assistant text content -->
|
|
6995
|
+
<ng-container *ngIf="toolbarVisible && hasMessageContent()">
|
|
6992
6996
|
@if (toolbarTemplate || toolbarComponent) {
|
|
6993
6997
|
<copilot-slot
|
|
6994
6998
|
[slot]="toolbarTemplate || toolbarComponent"
|
|
@@ -9128,9 +9132,16 @@ class CopilotChatComponent {
|
|
|
9128
9132
|
a.threadId = this.threadId || this.generatedThreadId;
|
|
9129
9133
|
if (!this.hasConnectedOnce) {
|
|
9130
9134
|
this.hasConnectedOnce = true;
|
|
9131
|
-
|
|
9135
|
+
if ('isCopilotKitAgent' in a) {
|
|
9136
|
+
this.connectToAgent(a);
|
|
9137
|
+
}
|
|
9138
|
+
else {
|
|
9139
|
+
// Not a CopilotKit agent: ensure UI not showing loading cursor
|
|
9140
|
+
this.showCursor.set(false);
|
|
9141
|
+
this.cdr.markForCheck();
|
|
9142
|
+
}
|
|
9132
9143
|
}
|
|
9133
|
-
});
|
|
9144
|
+
}, { allowSignalWrites: true });
|
|
9134
9145
|
}
|
|
9135
9146
|
// Signals from watchAgent - using direct references instead of assignment
|
|
9136
9147
|
agent = signal(undefined).asReadonly();
|