@aerokit/sdk 14.76.0 → 14.82.0

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.
@@ -161,7 +161,7 @@ function createHttpResponseCallback(httpClient2, successCallback, errorCallback,
161
161
  );
162
162
  }
163
163
  function createSuccessCallback(callback) {
164
- return "(function(httpResponse, isBinary, context) {\nvar response = {};\nresponse.statusCode = httpResponse.getStatusLine().getStatusCode();\nresponse.statusMessage = httpResponse.getStatusLine().getReasonPhrase();\nresponse.protocol = httpResponse.getProtocolVersion();\nresponse.binary = isBinary;\nvar headers = httpResponse.getAllHeaders();\nresponse.headers = [];\nfor (var i = 0; i < headers.length; i ++) {\n response.headers.push({\n name: headers[i].getName(),\n value: headers[i].getValue()\n });\n}\nvar entity = httpResponse.getEntity();\nif (entity) {\n var inputStream = entity.getContent();\n if (isBinary) {\n // Uses Java IOUtils to read binary data\n response.data = org.apache.commons.io.IOUtils.toByteArray(inputStream);\n } else {\n // Uses Java IOUtils to read text data\n response.text = org.apache.commons.io.IOUtils.toString(inputStream);\n }\n}\n(" + callback + ")(response, JSON.parse(context));\n})(__context.get('response'), __context.get('httpClientRequestOptions').isBinary(), __context.get('httpClientRequestOptions').getContext());\n";
164
+ return "(function(httpResponse, isBinary, context) {\nvar response = {};\nresponse.statusCode = httpResponse.getCode();\nresponse.statusMessage = httpResponse.getReasonPhrase();\nresponse.protocol = httpResponse.getVersion();\nresponse.binary = isBinary;\nvar headers = httpResponse.getHeaders();\nresponse.headers = [];\nfor (var i = 0; i < headers.length; i ++) {\n response.headers.push({\n name: headers[i].getName(),\n value: headers[i].getValue()\n });\n}\nif (isBinary) {\n response.data = httpResponse.getBodyBytes();\n} else {\n response.text = httpResponse.getBodyText();\n}\n(" + callback + ")(response, JSON.parse(context));\n})(__context.get('response'), __context.get('httpClientRequestOptions').isBinary(), __context.get('httpClientRequestOptions').getContext());\n";
165
165
  }
166
166
  function createErrorCallback(callback) {
167
167
  if (callback) {
@@ -202,4 +202,4 @@ export {
202
202
  HttpAsyncClient,
203
203
  getInstance
204
204
  };
205
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvY2xpZW50LWFzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUgaHR0cC9jbGllbnQtYXN5bmNcbiAqIEBwYWNrYWdlIEBhZXJva2l0L3Nkay9odHRwXG4gKiBAbmFtZSBIdHRwQXN5bmNDbGllbnRcbiAqIEBvdmVydmlld1xuICogXG4gKiBUaGUgSHR0cEFzeW5jQ2xpZW50IGNsYXNzIHByb3ZpZGVzIGEgSmF2YVNjcmlwdC9UeXBlU2NyaXB0IHdyYXBwZXIgKEZhY2FkZSkgZm9yIG1ha2luZyBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0cyB1c2luZyB0aGUgdW5kZXJseWluZyBKYXZhIEhUVFAgY2xpZW50LiBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBwZXJmb3JtIG5vbi1ibG9ja2luZyBIVFRQIG9wZXJhdGlvbnMgYnkgZGVmaW5pbmcgc3VjY2VzcywgZXJyb3IsIGFuZCBjYW5jZWwgY2FsbGJhY2tzIGFzIHN0cmluZ3Mgb2YgZXhlY3V0YWJsZSBKYXZhU2NyaXB0IGNvZGUuIFRoZSBjbGFzcyBzdXBwb3J0cyBhbGwgc3RhbmRhcmQgSFRUUCBtZXRob2RzIChHRVQsIFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSwgSEVBRCwgVFJBQ0UpIGFuZCBhY2NlcHRzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgcmVxdWVzdCBvcHRpb25zIHRoYXQgbWlycm9yIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEphdmEgY2xpZW50LlxuICogXG4gKiAjIyMgS2V5IEZlYXR1cmVzOlxuICogLSAqKkFzeW5jaHJvbm91cyBFeGVjdXRpb24qKjogQWxsIEhUVFAgbWV0aG9kcyByZXR1cm4gaW1tZWRpYXRlbHksIHdpdGggY2FsbGJhY2tzIGV4ZWN1dGVkIHVwb24gY29tcGxldGlvbi5cbiAqIC0gKipDb21wcmVoZW5zaXZlIFJlcXVlc3QgT3B0aW9ucyoqOiBTdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmaW5lLXR1bmluZyBIVFRQIHJlcXVlc3RzLlxuICogLSAqKkNhbGxiYWNrIEZsZXhpYmlsaXR5Kio6IENhbGxiYWNrcyBhcmUgZGVmaW5lZCBhcyBzdHJpbmdzIG9mIEphdmFTY3JpcHQgY29kZSwgYWxsb3dpbmcgZm9yIGR5bmFtaWMgZXhlY3V0aW9uIGluIHRoZSBKVk0gZW52aXJvbm1lbnQuXG4gKiBcbiAqICMjIyBVc2UgQ2FzZXM6XG4gKiAtICoqTm9uLWJsb2NraW5nIEFQSSBDYWxscyoqOiBJZGVhbCBmb3Igc2NlbmFyaW9zIHdoZXJlIHlvdSB3YW50IHRvIHBlcmZvcm0gSFRUUCByZXF1ZXN0cyB3aXRob3V0IGJsb2NraW5nIHRoZSBtYWluIGV4ZWN1dGlvbiB0aHJlYWQuXG4gKiAtICoqQ29tcGxleCBSZXF1ZXN0IENvbmZpZ3VyYXRpb25zKio6IFN1aXRhYmxlIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgdGhhdCByZXF1aXJlIGRldGFpbGVkIHJlcXVlc3QgY29uZmlndXJhdGlvbnMgYW5kIGhhbmRsaW5nLlxuICogXG4gKiAjIyMgRXhhbXBsZSBVc2FnZTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBIdHRwQXN5bmNDbGllbnQgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2h0dHBcIjtcbiAqIFxuICogY29uc3QgY2xpZW50ID0gSHR0cEFzeW5jQ2xpZW50LmdldEluc3RhbmNlKCk7XG4gKiBcbiAqIGNsaWVudC5nZXRBc3luYyhcImh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL2RhdGFcIiwge1xuICogICBzdWNjZXNzOiBcImZ1bmN0aW9uKHJlc3BvbnNlKSB7IGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlc3BvbnNlKTsgfVwiLFxuICogICBlcnJvcjogXCJmdW5jdGlvbihlcnJvcikgeyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7IH1cIlxuICogfSwge1xuICogICBoZWFkZXJzOiBbeyBuYW1lOiAnQXV0aG9yaXphdGlvbicsIHZhbHVlOiAnQmVhcmVyIHRva2VuJyB9XSxcbiAqICAgcGFyYW1zOiBbeyBuYW1lOiAncXVlcnknLCB2YWx1ZTogJ3NlYXJjaCB0ZXJtJyB9XVxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG4vLyAtLS0gU2hhcmVkIEludGVyZmFjZXMgKGZvciBkb2N1bWVudGF0aW9uIGNsYXJpdHkpIC0tLVxuXG4vKiogRGVmaW5lcyBhIHNpbmdsZSBIVFRQIGhlYWRlciwgdXNlZCBmb3IgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudEhlYWRlciB7XG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgKGUuZy4sICdDb250ZW50LVR5cGUnLCAnQXV0aG9yaXphdGlvbicpLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIERlZmluZXMgYSBxdWVyeSBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRQYXJhbSB7XG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBVUkwgcXVlcnkgcGFyYW1ldGVyIChlLmcuLCAnaWQnKS4gKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgVVJMIHF1ZXJ5IHBhcmFtZXRlci4gKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogRGVmaW5lcyBhIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gYSBtdWx0aS1wYXJ0IGZvcm0gZGF0YSByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50RmlsZSB7XG4gICAgLyoqIFRoZSBmb3JtIGZpZWxkIG5hbWUgZm9yIHRoZSBmaWxlLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIGZpbGUgcGF0aCBvciBjb250ZW50LiAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFuIEhUVFAgcmVxdWVzdCwgbWlycm9yaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgSmF2YSBjbGllbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyB7XG4gICAgZXhwZWN0Q29udGludWVFbmFibGVkPzogYm9vbGVhbjtcbiAgICBwcm94eUhvc3Q/OiBzdHJpbmc7XG4gICAgcHJveHlQb3J0PzogbnVtYmVyO1xuICAgIGNvb2tpZVNwZWM/OiBzdHJpbmc7XG4gICAgcmVkaXJlY3RzRW5hYmxlZD86IGJvb2xlYW47XG4gICAgcmVsYXRpdmVSZWRpcmVjdHNBbGxvd2VkPzogYm9vbGVhbjtcbiAgICBjaXJjdWxhclJlZGlyZWN0c0FsbG93ZWQ/OiBib29sZWFuO1xuICAgIG1heFJlZGlyZWN0cz86IG51bWJlcjtcbiAgICBhdXRoZW50aWNhdGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHRhcmdldFByZWZlcnJlZEF1dGhTY2hlbWVzPzogc3RyaW5nW107XG4gICAgcHJveHlQcmVmZXJyZWRBdXRoU2NoZW1lcz86IHN0cmluZ1tdO1xuICAgIGNvbm5lY3Rpb25SZXF1ZXN0VGltZW91dD86IG51bWJlcjtcbiAgICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgICBzb2NrZXRUaW1lb3V0PzogbnVtYmVyO1xuICAgIGNvbnRlbnRDb21wcmVzc2lvbkVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHNzbFRydXN0QWxsRW5hYmxlZD86IGJvb2xlYW47XG4gICAgZGF0YT86IGFueVtdO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZmlsZXM/OiBIdHRwQ2xpZW50RmlsZVtdO1xuICAgIGNoYXJhY3RlckVuY29kaW5nPzogc3RyaW5nO1xuICAgIGNoYXJhY3RlckVuY29kaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gICAgY29udGVudFR5cGU/OiBzdHJpbmc7XG4gICAgaGVhZGVycz86IEh0dHBDbGllbnRIZWFkZXJbXTtcbiAgICBwYXJhbXM/OiBIdHRwQ2xpZW50UGFyYW1bXTtcbiAgICBiaW5hcnk/OiBib29sZWFuO1xuICAgIGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKiogVGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVzcG9uc2UgcmV0dXJuZWQgYnkgdGhlIEh0dHBDbGllbnQgbWV0aG9kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudFJlc3BvbnNlIHtcbiAgICAvKiogVGhlIEhUVFAgc3RhdHVzIGNvZGUgKGUuZy4sIDIwMCwgNDA0LCA1MDApLiAqL1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICAvKiogVGhlIHN0YXR1cyBtZXNzYWdlIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgKGUuZy4sICdPSycsICdOb3QgRm91bmQnKS4gKi9cbiAgICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFJlc3BvbnNlIGJvZHkgY29udGVudCBhcyBhbiBhcnJheSBvZiBieXRlcyAoaWYgcmVxdWVzdGVkIGFzIGJpbmFyeSkuICovXG4gICAgZGF0YTogYW55W107XG4gICAgLyoqIFJlc3BvbnNlIGJvZHkgY29udGVudCBhcyBhIGRlY29kZWQgc3RyaW5nLiAqL1xuICAgIHRleHQ6IHN0cmluZztcbiAgICAvKiogVGhlIHByb3RvY29sIHVzZWQgKGUuZy4sICdIVFRQLzEuMScpLiAqL1xuICAgIHByb3RvY29sOiBzdHJpbmc7XG4gICAgLyoqIEluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2Ugd2FzIHByb2Nlc3NlZCBhcyBiaW5hcnkgZGF0YS4gKi9cbiAgICBiaW5hcnk6IGJvb2xlYW47XG4gICAgLyoqIEFycmF5IG9mIGFsbCBoZWFkZXJzIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZS4gKi9cbiAgICBoZWFkZXJzOiBIdHRwQ2xpZW50SGVhZGVyW11cbn1cblxuLy8gLS0tIEFzeW5jaHJvbm91cyBDbGllbnQgSW50ZXJmYWNlcyAtLS1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBjYWxsYmFjayBzdHJ1Y3R1cmUgZm9yIGFzeW5jaHJvbm91cyByZXF1ZXN0cy5cbiAqIE5vdGU6IENhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYXMgc3RyaW5ncyBjb250YWluaW5nIGV4ZWN1dGFibGUgSmF2YVNjcmlwdCBjb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRBc3luY0NvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTWFuZGF0b3J5IHN1Y2Nlc3MgY2FsbGJhY2sgYXMgYSAqKnN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUqKi5cbiAgICAgKiBJdCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggc2lnbmF0dXJlOiBgKHJlc3BvbnNlOiBIdHRwQ2xpZW50UmVzcG9uc2UsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHZvaWRgXG4gICAgICovXG4gICAgc3VjY2Vzczogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIGFzIGEgKipzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlKiouXG4gICAgICogSXQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIHNpZ25hdHVyZTogYChleGNlcHRpb246IGFueSkgPT4gdm9pZGBcbiAgICAgKi9cbiAgICBlcnJvcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBjYW5jZWwgY2FsbGJhY2sgYXMgYSAqKnN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUqKi5cbiAgICAgKiBJdCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggc2lnbmF0dXJlOiBgKCkgPT4gdm9pZGBcbiAgICAgKi9cbiAgICBjYW5jZWw/OiBzdHJpbmc7XG59XG5cblxuLy8gLS0tIEphdmEgVHlwZSBJbXBvcnRzIChDcnVjaWFsIGZvciBKVk0gaW50ZWdyYXRpb24pIC0tLVxuXG4vKiogSW1wb3J0cyB0aGUgbmF0aXZlIEphdmEgY2xhc3MgcmVzcG9uc2libGUgZm9yIGFzeW5jaHJvbm91cyBIVFRQIGV4ZWN1dGlvbi4gKi9cbmNvbnN0IEh0dHBDbGllbnRBc3luY0ZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5odHRwLkh0dHBDbGllbnRBc3luY0ZhY2FkZVwiKTtcblxuLyoqIEltcG9ydHMgdGhlIG5hdGl2ZSBKYXZhIGNsYXNzIGZvciByZXRyaWV2aW5nIFNwcmluZy1tYW5hZ2VkIGJlYW5zLiAqL1xuY29uc3QgU3ByaW5nQmVhblByb3ZpZGVyID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuc3ByaW5nLlNwcmluZ0JlYW5Qcm92aWRlclwiKTtcblxuLyoqIFJldHJpZXZlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBhc3luY2hyb25vdXMgSFRUUCBjbGllbnQgZnJvbSB0aGUgU3ByaW5nIGNvbnRleHQuICovXG5jb25zdCBodHRwQ2xpZW50ID0gU3ByaW5nQmVhblByb3ZpZGVyLmdldEJlYW4oSHR0cENsaWVudEFzeW5jRmFjYWRlLmNsYXNzKTtcblxuXG4vKipcbiAqIFRoZSBhc3luY2hyb25vdXMgSFRUUCBjbGllbnQgY2xhc3MuIEFsbCByZXF1ZXN0IG1ldGhvZHMgcmV0dXJuIGltbWVkaWF0ZWx5XG4gKiBhbmQgZXhlY3V0ZSBjYWxsYmFja3MgdXBvbiBjb21wbGV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSHR0cEFzeW5jQ2xpZW50IHtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGUuZy4sIGhlYWRlcnMsIGJvZHksIHBhcmFtcykuXG4gICAgICovXG5cdGdldEFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LmdldEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5nZXRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRwb3N0QXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQucG9zdEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5wb3N0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBQVVQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRwdXRBc3luYyh1cmw6IHN0cmluZywgY29uZmlnOiBIdHRwQ2xpZW50QXN5bmNDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdVcmwgPSBidWlsZFVybCh1cmwsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soXG5cdFx0XHRodHRwQ2xpZW50LFxuXHRcdFx0Y29uZmlnLnN1Y2Nlc3MsXG5cdFx0XHRjb25maWcuZXJyb3IsXG5cdFx0XHRjb25maWcuY2FuY2VsXG5cdFx0KTtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0aHR0cENsaWVudC5wdXRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQucHV0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBQQVRDSCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdHBhdGNoQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQucGF0Y2hBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQucGF0Y2hBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIERFTEVURSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdGRlbGV0ZUFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LmRlbGV0ZUFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5kZWxldGVBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIEhFQUQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRoZWFkQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQuaGVhZEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5oZWFkQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBUUkFDRSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdHRyYWNlQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQudHJhY2VBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQudHJhY2VBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYXRlcyB0aGUgZXhlY3V0aW9uIG9mIHF1ZXVlZCBhc3luY2hyb25vdXMgcmVxdWVzdHMgKGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBKYXZhIGNsaWVudCdzIHRocmVhZGluZyBtb2RlbCkuXG4gICAgICovXG5cdGV4ZWN1dGUoKTogdm9pZCB7XG5cdFx0aHR0cENsaWVudC5leGVjdXRlKCk7XG5cdH07XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXN5bmNocm9ub3VzIGNsaWVudC5cbiAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNlIG9mIEh0dHBBc3luY0NsaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlKCk6IEh0dHBBc3luY0NsaWVudCB7XG5cdHJldHVybiBuZXcgSHR0cEFzeW5jQ2xpZW50KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuYXRpdmUgSmF2YSBjYWxsYmFjayBvYmplY3QgdGhhdCB3cmFwcyB0aGUgSmF2YVNjcmlwdCBzdWNjZXNzLCBlcnJvciwgYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHVuZGVybHlpbmcgSmF2YSBIVFRQIGNsaWVudCBpbnN0YW5jZSB0byBnZW5lcmF0ZSB0aGUgZmluYWwgY2FsbGJhY2sgb2JqZWN0LlxuICogQHBhcmFtIGh0dHBDbGllbnQgVGhlIEphdmEgSHR0cENsaWVudEFzeW5jRmFjYWRlIGluc3RhbmNlLlxuICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBKUyBjb2RlIHN0cmluZyBmb3Igc3VjY2Vzcy5cbiAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEpTIGNvZGUgc3RyaW5nIGZvciBlcnJvci5cbiAqIEBwYXJhbSBjYW5jZWxDYWxsYmFjayBKUyBjb2RlIHN0cmluZyBmb3IgY2FuY2VsLlxuICogQHJldHVybnMgQSBKYXZhIGNhbGxiYWNrIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soaHR0cENsaWVudDogYW55LCBzdWNjZXNzQ2FsbGJhY2s6IHN0cmluZywgZXJyb3JDYWxsYmFjaz86IHN0cmluZywgY2FuY2VsQ2FsbGJhY2s/OiBzdHJpbmcpOiBhbnkge1xuXHRyZXR1cm4gaHR0cENsaWVudC5jcmVhdGVDYWxsYmFjayhcblx0XHRjcmVhdGVTdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKSxcblx0XHRjcmVhdGVFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spLFxuXHRcdGNyZWF0ZUNhbmNlbENhbGxiYWNrKGNhbmNlbENhbGxiYWNrKVxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgcmF3IEphdmFTY3JpcHQgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgSlZNIGVudmlyb25tZW50IHVwb24gc3VjY2Vzc2Z1bCByZXF1ZXN0IGNvbXBsZXRpb24uXG4gKiBUaGlzIHN0cmluZyBoYW5kbGVzIHBhcnNpbmcgdGhlIEphdmEgSFRUUCByZXNwb25zZSBvYmplY3QgYW5kIGV4ZWN1dGluZyB0aGUgdXNlcidzIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIHVzZXItcHJvdmlkZWQgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiBjb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBjb21wbGV4IEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgc3VjY2VzcyBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIE5vdGU6IFRoaXMgc3RyaW5nIHVzZXMgSmF2YSB1dGlsaXR5IGNsYXNzZXMgKG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzKSBhbmQgY29udGV4dCB2YXJpYWJsZXMgXG4gICAgLy8gKF9fY29udGV4dCkgdGhhdCBhcmUgYXZhaWxhYmxlIGluIHRoZSBzcGVjaWZpYyBKVk0gZW52aXJvbm1lbnQuXG4gICAgXG4gICAgLy8gVGhlIHN0cnVjdHVyZSBtYXBzIHRoZSBKYXZhIEhUVFAgUmVzcG9uc2Ugb2JqZWN0IGludG8gdGhlIHN0YW5kYXJkIEh0dHBDbGllbnRSZXNwb25zZSBpbnRlcmZhY2UuXG5cdHJldHVybiBcIihmdW5jdGlvbihodHRwUmVzcG9uc2UsIGlzQmluYXJ5LCBjb250ZXh0KSB7XFxuXCJcblx0XHQrIFwidmFyIHJlc3BvbnNlID0ge307XFxuXCJcblx0XHQrIFwicmVzcG9uc2Uuc3RhdHVzQ29kZSA9IGh0dHBSZXNwb25zZS5nZXRTdGF0dXNMaW5lKCkuZ2V0U3RhdHVzQ29kZSgpO1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLnN0YXR1c01lc3NhZ2UgPSBodHRwUmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFJlYXNvblBocmFzZSgpO1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLnByb3RvY29sID0gaHR0cFJlc3BvbnNlLmdldFByb3RvY29sVmVyc2lvbigpO1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLmJpbmFyeSA9IGlzQmluYXJ5O1xcblwiXG5cblx0XHQrIFwidmFyIGhlYWRlcnMgPSBodHRwUmVzcG9uc2UuZ2V0QWxsSGVhZGVycygpO1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLmhlYWRlcnMgPSBbXTtcXG5cIlxuXHRcdCsgXCJmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICsrKSB7XFxuXCJcblx0XHQrIFwiICAgIHJlc3BvbnNlLmhlYWRlcnMucHVzaCh7XFxuXCJcblx0XHQrIFwiICAgICAgICBuYW1lOiBoZWFkZXJzW2ldLmdldE5hbWUoKSxcXG5cIlxuXHRcdCsgXCIgICAgICAgIHZhbHVlOiBoZWFkZXJzW2ldLmdldFZhbHVlKClcXG5cIlxuXHRcdCsgXCIgICAgfSk7XFxuXCJcblx0XHQrIFwifVxcblwiXG5cblx0XHQrIFwidmFyIGVudGl0eSA9IGh0dHBSZXNwb25zZS5nZXRFbnRpdHkoKTtcXG5cIlxuXHRcdCsgXCJpZiAoZW50aXR5KSB7XFxuXCJcblx0XHQrIFwiICAgIHZhciBpbnB1dFN0cmVhbSA9IGVudGl0eS5nZXRDb250ZW50KCk7XFxuXCJcblx0XHQrIFwiICAgIGlmIChpc0JpbmFyeSkge1xcblwiXG5cdFx0KyBcIiAgICAgICAgLy8gVXNlcyBKYXZhIElPVXRpbHMgdG8gcmVhZCBiaW5hcnkgZGF0YVxcblwiXG5cdFx0KyBcIiAgICAgICAgcmVzcG9uc2UuZGF0YSA9IG9yZy5hcGFjaGUuY29tbW9ucy5pby5JT1V0aWxzLnRvQnl0ZUFycmF5KGlucHV0U3RyZWFtKTtcXG5cIlxuXHRcdCsgXCIgICAgfSBlbHNlIHtcXG5cIlxuXHRcdCsgXCIgICAgICAgIC8vIFVzZXMgSmF2YSBJT1V0aWxzIHRvIHJlYWQgdGV4dCBkYXRhXFxuXCJcblx0XHQrIFwiICAgICAgICByZXNwb25zZS50ZXh0ID0gb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHMudG9TdHJpbmcoaW5wdXRTdHJlYW0pO1xcblwiXG5cdFx0KyBcIiAgICB9XFxuXCJcblx0XHQrIFwifVxcblwiXG5cblx0XHQrIFwiKFwiICsgY2FsbGJhY2sgKyBcIikocmVzcG9uc2UsIEpTT04ucGFyc2UoY29udGV4dCkpO1xcblwiXG5cdFx0KyBcIn0pKF9fY29udGV4dC5nZXQoJ3Jlc3BvbnNlJyksIF9fY29udGV4dC5nZXQoJ2h0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucycpLmlzQmluYXJ5KCksIF9fY29udGV4dC5nZXQoJ2h0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucycpLmdldENvbnRleHQoKSk7XFxuXCI7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSByYXcgSmF2YVNjcmlwdCBzdHJpbmcgZm9yIHRoZSBlcnJvciBjYWxsYmFjay5cbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgdXNlci1wcm92aWRlZCBlcnJvciBjYWxsYmFjayBmdW5jdGlvbiBjb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBKYXZhU2NyaXB0IHN0cmluZyBmb3IgdGhlIGVycm9yIGhhbmRsZXIsIG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXJyb3JDYWxsYmFjayhjYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChjYWxsYmFjaykge1xuXHRcdHJldHVybiBcIihcIiArIGNhbGxiYWNrICsgXCIpKF9fY29udGV4dC5nZXQoJ2V4Y2VwdGlvbicpKVwiO1xuXHR9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHJhdyBKYXZhU2NyaXB0IHN0cmluZyBmb3IgdGhlIGNhbmNlbCBjYWxsYmFjay5cbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgdXNlci1wcm92aWRlZCBjYW5jZWwgY2FsbGJhY2sgZnVuY3Rpb24gY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgSmF2YVNjcmlwdCBzdHJpbmcgZm9yIHRoZSBjYW5jZWwgaGFuZGxlciwgb3IgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW5jZWxDYWxsYmFjayhjYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChjYWxsYmFjaykge1xuXHRcdHJldHVybiBcIihcIiArIGNhbGxiYWNrICsgXCIpKClcIjtcblx0fVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBmaW5hbCBVUkwgYnkgYXBwZW5kaW5nIGFsbCBxdWVyeSBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gb3B0aW9ucy5wYXJhbXMuXG4gKiBUaGUgcGFyYW1ldGVycyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgb3B0aW9ucyBvYmplY3QgYXMgdGhleSBhcmUgZm9yIHRoZSBzeW5jaHJvbm91cyBjbGllbnQsXG4gKiBzaW5jZSB0aGUgb3B0aW9ucyBhcmUgcGFzc2VkIGFzIEpTT04gc3RyaW5nIHRvIHRoZSBmYWNhZGUgYW55d2F5LlxuICogQHBhcmFtIHVybCBUaGUgYmFzZSBVUkwuXG4gKiBAcGFyYW0gb3B0aW9ucyBUaGUgcmVxdWVzdCBvcHRpb25zIHdoaWNoIG1heSBjb250YWluIGBwYXJhbXNgLlxuICogQHJldHVybnMgVGhlIFVSTCB3aXRoIGFwcGVuZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVXJsKHVybDogc3RyaW5nLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogc3RyaW5nIHtcblx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMucGFyYW1zID09PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5wYXJhbXMgPT09IG51bGwgfHwgb3B0aW9ucy5wYXJhbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVybDtcblx0fVxuXHRsZXQgbmV3VXJsID0gdXJsO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMucGFyYW1zLmxlbmd0aDsgaSArKykge1xuICAgICAgICBjb25zdCBwYXJhbSA9IG9wdGlvbnMucGFyYW1zW2ldO1xuXHRcdGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBVUkwgYWxyZWFkeSBjb250YWlucyAnPycgYW5kIHVzZSAnJicgaWYgc28gKGltcHJvdmVzIHJvYnVzdG5lc3MpXG4gICAgICAgICAgICBpZiAobmV3VXJsLmluY2x1ZGVzKCc/JykpIHtcbiAgICAgICAgICAgICAgICBuZXdVcmwgKz0gJyYnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdVcmwgKz0gJz8nO1xuICAgICAgICAgICAgfVxuXHRcdFx0bmV3VXJsICs9IHBhcmFtLm5hbWUgKyAnPScgKyBwYXJhbS52YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bmV3VXJsICs9ICcmJyArIHBhcmFtLm5hbWUgKyAnPScgKyBwYXJhbS52YWx1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG5ld1VybDtcbn1cblxuLy8gQHRzLWlnbm9yZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0bW9kdWxlLmV4cG9ydHMgPSB7IEh0dHBBc3luY0NsaWVudCwgZ2V0SW5zdGFuY2UgfTtcbn0iXSwKICAibWFwcGluZ3MiOiAiQUF1SUEsTUFBTSx3QkFBd0IsS0FBSyxLQUFLLGlFQUFpRTtBQUd6RyxNQUFNLHFCQUFxQixLQUFLLEtBQUssNERBQTREO0FBR2pHLE1BQU0sYUFBYSxtQkFBbUIsUUFBUSxzQkFBc0IsS0FBSztBQU9sRSxNQUFNLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUTVCLFNBQVMsS0FBYSxRQUErQixTQUEwQztBQUM5RixVQUFNLFNBQVMsU0FBUyxLQUFLLE9BQU87QUFDcEMsVUFBTSxXQUFXO0FBQUEsTUFDaEI7QUFBQSxNQUNBLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxNQUNQLE9BQU87QUFBQSxJQUNSO0FBQ0EsUUFBSSxTQUFTO0FBQ1osaUJBQVcsU0FBUyxRQUFRLEtBQUssVUFBVSxPQUFPLEdBQUcsUUFBUTtBQUFBLElBQzlELE9BQU87QUFDTixpQkFBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLENBQUMsQ0FBQyxHQUFHLFFBQVE7QUFBQSxJQUN6RDtBQUFBLEVBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLFVBQVUsS0FBYSxRQUErQixTQUEwQztBQUMvRixVQUFNLFNBQVMsU0FBUyxLQUFLLE9BQU87QUFDcEMsVUFBTSxXQUFXO0FBQUEsTUFDaEI7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
205
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0dHAvY2xpZW50LWFzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUgaHR0cC9jbGllbnQtYXN5bmNcbiAqIEBwYWNrYWdlIEBhZXJva2l0L3Nkay9odHRwXG4gKiBAbmFtZSBIdHRwQXN5bmNDbGllbnRcbiAqIEBvdmVydmlld1xuICogXG4gKiBUaGUgSHR0cEFzeW5jQ2xpZW50IGNsYXNzIHByb3ZpZGVzIGEgSmF2YVNjcmlwdC9UeXBlU2NyaXB0IHdyYXBwZXIgKEZhY2FkZSkgZm9yIG1ha2luZyBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0cyB1c2luZyB0aGUgdW5kZXJseWluZyBKYXZhIEhUVFAgY2xpZW50LiBJdCBhbGxvd3MgZGV2ZWxvcGVycyB0byBwZXJmb3JtIG5vbi1ibG9ja2luZyBIVFRQIG9wZXJhdGlvbnMgYnkgZGVmaW5pbmcgc3VjY2VzcywgZXJyb3IsIGFuZCBjYW5jZWwgY2FsbGJhY2tzIGFzIHN0cmluZ3Mgb2YgZXhlY3V0YWJsZSBKYXZhU2NyaXB0IGNvZGUuIFRoZSBjbGFzcyBzdXBwb3J0cyBhbGwgc3RhbmRhcmQgSFRUUCBtZXRob2RzIChHRVQsIFBPU1QsIFBVVCwgUEFUQ0gsIERFTEVURSwgSEVBRCwgVFJBQ0UpIGFuZCBhY2NlcHRzIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgcmVxdWVzdCBvcHRpb25zIHRoYXQgbWlycm9yIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIEphdmEgY2xpZW50LlxuICogXG4gKiAjIyMgS2V5IEZlYXR1cmVzOlxuICogLSAqKkFzeW5jaHJvbm91cyBFeGVjdXRpb24qKjogQWxsIEhUVFAgbWV0aG9kcyByZXR1cm4gaW1tZWRpYXRlbHksIHdpdGggY2FsbGJhY2tzIGV4ZWN1dGVkIHVwb24gY29tcGxldGlvbi5cbiAqIC0gKipDb21wcmVoZW5zaXZlIFJlcXVlc3QgT3B0aW9ucyoqOiBTdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBmaW5lLXR1bmluZyBIVFRQIHJlcXVlc3RzLlxuICogLSAqKkNhbGxiYWNrIEZsZXhpYmlsaXR5Kio6IENhbGxiYWNrcyBhcmUgZGVmaW5lZCBhcyBzdHJpbmdzIG9mIEphdmFTY3JpcHQgY29kZSwgYWxsb3dpbmcgZm9yIGR5bmFtaWMgZXhlY3V0aW9uIGluIHRoZSBKVk0gZW52aXJvbm1lbnQuXG4gKiBcbiAqICMjIyBVc2UgQ2FzZXM6XG4gKiAtICoqTm9uLWJsb2NraW5nIEFQSSBDYWxscyoqOiBJZGVhbCBmb3Igc2NlbmFyaW9zIHdoZXJlIHlvdSB3YW50IHRvIHBlcmZvcm0gSFRUUCByZXF1ZXN0cyB3aXRob3V0IGJsb2NraW5nIHRoZSBtYWluIGV4ZWN1dGlvbiB0aHJlYWQuXG4gKiAtICoqQ29tcGxleCBSZXF1ZXN0IENvbmZpZ3VyYXRpb25zKio6IFN1aXRhYmxlIGZvciBhZHZhbmNlZCB1c2UgY2FzZXMgdGhhdCByZXF1aXJlIGRldGFpbGVkIHJlcXVlc3QgY29uZmlndXJhdGlvbnMgYW5kIGhhbmRsaW5nLlxuICogXG4gKiAjIyMgRXhhbXBsZSBVc2FnZTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBIdHRwQXN5bmNDbGllbnQgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2h0dHBcIjtcbiAqIFxuICogY29uc3QgY2xpZW50ID0gSHR0cEFzeW5jQ2xpZW50LmdldEluc3RhbmNlKCk7XG4gKiBcbiAqIGNsaWVudC5nZXRBc3luYyhcImh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL2RhdGFcIiwge1xuICogICBzdWNjZXNzOiBcImZ1bmN0aW9uKHJlc3BvbnNlKSB7IGNvbnNvbGUubG9nKCdTdWNjZXNzOicsIHJlc3BvbnNlKTsgfVwiLFxuICogICBlcnJvcjogXCJmdW5jdGlvbihlcnJvcikgeyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7IH1cIlxuICogfSwge1xuICogICBoZWFkZXJzOiBbeyBuYW1lOiAnQXV0aG9yaXphdGlvbicsIHZhbHVlOiAnQmVhcmVyIHRva2VuJyB9XSxcbiAqICAgcGFyYW1zOiBbeyBuYW1lOiAncXVlcnknLCB2YWx1ZTogJ3NlYXJjaCB0ZXJtJyB9XVxuICogfSk7XG4gKiBgYGBcbiAqL1xuXG4vLyAtLS0gU2hhcmVkIEludGVyZmFjZXMgKGZvciBkb2N1bWVudGF0aW9uIGNsYXJpdHkpIC0tLVxuXG4vKiogRGVmaW5lcyBhIHNpbmdsZSBIVFRQIGhlYWRlciwgdXNlZCBmb3IgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudEhlYWRlciB7XG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIgKGUuZy4sICdDb250ZW50LVR5cGUnLCAnQXV0aG9yaXphdGlvbicpLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqIERlZmluZXMgYSBxdWVyeSBwYXJhbWV0ZXIgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBVUkwuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRQYXJhbSB7XG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBVUkwgcXVlcnkgcGFyYW1ldGVyIChlLmcuLCAnaWQnKS4gKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB2YWx1ZSBvZiB0aGUgVVJMIHF1ZXJ5IHBhcmFtZXRlci4gKi9cbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKiogRGVmaW5lcyBhIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4gYSBtdWx0aS1wYXJ0IGZvcm0gZGF0YSByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwQ2xpZW50RmlsZSB7XG4gICAgLyoqIFRoZSBmb3JtIGZpZWxkIG5hbWUgZm9yIHRoZSBmaWxlLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIGZpbGUgcGF0aCBvciBjb250ZW50LiAqL1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGFuIEhUVFAgcmVxdWVzdCwgbWlycm9yaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIHVuZGVybHlpbmcgSmF2YSBjbGllbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyB7XG4gICAgZXhwZWN0Q29udGludWVFbmFibGVkPzogYm9vbGVhbjtcbiAgICBwcm94eUhvc3Q/OiBzdHJpbmc7XG4gICAgcHJveHlQb3J0PzogbnVtYmVyO1xuICAgIGNvb2tpZVNwZWM/OiBzdHJpbmc7XG4gICAgcmVkaXJlY3RzRW5hYmxlZD86IGJvb2xlYW47XG4gICAgcmVsYXRpdmVSZWRpcmVjdHNBbGxvd2VkPzogYm9vbGVhbjtcbiAgICBjaXJjdWxhclJlZGlyZWN0c0FsbG93ZWQ/OiBib29sZWFuO1xuICAgIG1heFJlZGlyZWN0cz86IG51bWJlcjtcbiAgICBhdXRoZW50aWNhdGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHRhcmdldFByZWZlcnJlZEF1dGhTY2hlbWVzPzogc3RyaW5nW107XG4gICAgcHJveHlQcmVmZXJyZWRBdXRoU2NoZW1lcz86IHN0cmluZ1tdO1xuICAgIGNvbm5lY3Rpb25SZXF1ZXN0VGltZW91dD86IG51bWJlcjtcbiAgICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgICBzb2NrZXRUaW1lb3V0PzogbnVtYmVyO1xuICAgIGNvbnRlbnRDb21wcmVzc2lvbkVuYWJsZWQ/OiBib29sZWFuO1xuICAgIHNzbFRydXN0QWxsRW5hYmxlZD86IGJvb2xlYW47XG4gICAgZGF0YT86IGFueVtdO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgZmlsZXM/OiBIdHRwQ2xpZW50RmlsZVtdO1xuICAgIGNoYXJhY3RlckVuY29kaW5nPzogc3RyaW5nO1xuICAgIGNoYXJhY3RlckVuY29kaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gICAgY29udGVudFR5cGU/OiBzdHJpbmc7XG4gICAgaGVhZGVycz86IEh0dHBDbGllbnRIZWFkZXJbXTtcbiAgICBwYXJhbXM/OiBIdHRwQ2xpZW50UGFyYW1bXTtcbiAgICBiaW5hcnk/OiBib29sZWFuO1xuICAgIGNvbnRleHQ/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKiogVGhlIHN0cnVjdHVyZSBvZiB0aGUgcmVzcG9uc2UgcmV0dXJuZWQgYnkgdGhlIEh0dHBDbGllbnQgbWV0aG9kcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENsaWVudFJlc3BvbnNlIHtcbiAgICAvKiogVGhlIEhUVFAgc3RhdHVzIGNvZGUgKGUuZy4sIDIwMCwgNDA0LCA1MDApLiAqL1xuICAgIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgICAvKiogVGhlIHN0YXR1cyBtZXNzYWdlIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgKGUuZy4sICdPSycsICdOb3QgRm91bmQnKS4gKi9cbiAgICBzdGF0dXNNZXNzYWdlOiBzdHJpbmc7XG4gICAgLyoqIFJlc3BvbnNlIGJvZHkgY29udGVudCBhcyBhbiBhcnJheSBvZiBieXRlcyAoaWYgcmVxdWVzdGVkIGFzIGJpbmFyeSkuICovXG4gICAgZGF0YTogYW55W107XG4gICAgLyoqIFJlc3BvbnNlIGJvZHkgY29udGVudCBhcyBhIGRlY29kZWQgc3RyaW5nLiAqL1xuICAgIHRleHQ6IHN0cmluZztcbiAgICAvKiogVGhlIHByb3RvY29sIHVzZWQgKGUuZy4sICdIVFRQLzEuMScpLiAqL1xuICAgIHByb3RvY29sOiBzdHJpbmc7XG4gICAgLyoqIEluZGljYXRlcyBpZiB0aGUgcmVzcG9uc2Ugd2FzIHByb2Nlc3NlZCBhcyBiaW5hcnkgZGF0YS4gKi9cbiAgICBiaW5hcnk6IGJvb2xlYW47XG4gICAgLyoqIEFycmF5IG9mIGFsbCBoZWFkZXJzIHJlY2VpdmVkIGluIHRoZSByZXNwb25zZS4gKi9cbiAgICBoZWFkZXJzOiBIdHRwQ2xpZW50SGVhZGVyW11cbn1cblxuLy8gLS0tIEFzeW5jaHJvbm91cyBDbGllbnQgSW50ZXJmYWNlcyAtLS1cblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBjYWxsYmFjayBzdHJ1Y3R1cmUgZm9yIGFzeW5jaHJvbm91cyByZXF1ZXN0cy5cbiAqIE5vdGU6IENhbGxiYWNrcyBhcmUgcHJvdmlkZWQgYXMgc3RyaW5ncyBjb250YWluaW5nIGV4ZWN1dGFibGUgSmF2YVNjcmlwdCBjb2RlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBDbGllbnRBc3luY0NvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTWFuZGF0b3J5IHN1Y2Nlc3MgY2FsbGJhY2sgYXMgYSAqKnN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUqKi5cbiAgICAgKiBJdCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggc2lnbmF0dXJlOiBgKHJlc3BvbnNlOiBIdHRwQ2xpZW50UmVzcG9uc2UsIGNvbnRleHQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IHZvaWRgXG4gICAgICovXG4gICAgc3VjY2Vzczogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIE9wdGlvbmFsIGVycm9yIGNhbGxiYWNrIGFzIGEgKipzdHJpbmcgb2YgSmF2YVNjcmlwdCBjb2RlKiouXG4gICAgICogSXQgd2lsbCBiZSBleGVjdXRlZCB3aXRoIHNpZ25hdHVyZTogYChleGNlcHRpb246IGFueSkgPT4gdm9pZGBcbiAgICAgKi9cbiAgICBlcnJvcj86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBjYW5jZWwgY2FsbGJhY2sgYXMgYSAqKnN0cmluZyBvZiBKYXZhU2NyaXB0IGNvZGUqKi5cbiAgICAgKiBJdCB3aWxsIGJlIGV4ZWN1dGVkIHdpdGggc2lnbmF0dXJlOiBgKCkgPT4gdm9pZGBcbiAgICAgKi9cbiAgICBjYW5jZWw/OiBzdHJpbmc7XG59XG5cblxuLy8gLS0tIEphdmEgVHlwZSBJbXBvcnRzIChDcnVjaWFsIGZvciBKVk0gaW50ZWdyYXRpb24pIC0tLVxuXG4vKiogSW1wb3J0cyB0aGUgbmF0aXZlIEphdmEgY2xhc3MgcmVzcG9uc2libGUgZm9yIGFzeW5jaHJvbm91cyBIVFRQIGV4ZWN1dGlvbi4gKi9cbmNvbnN0IEh0dHBDbGllbnRBc3luY0ZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5odHRwLkh0dHBDbGllbnRBc3luY0ZhY2FkZVwiKTtcblxuLyoqIEltcG9ydHMgdGhlIG5hdGl2ZSBKYXZhIGNsYXNzIGZvciByZXRyaWV2aW5nIFNwcmluZy1tYW5hZ2VkIGJlYW5zLiAqL1xuY29uc3QgU3ByaW5nQmVhblByb3ZpZGVyID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuc3ByaW5nLlNwcmluZ0JlYW5Qcm92aWRlclwiKTtcblxuLyoqIFJldHJpZXZlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBhc3luY2hyb25vdXMgSFRUUCBjbGllbnQgZnJvbSB0aGUgU3ByaW5nIGNvbnRleHQuICovXG5jb25zdCBodHRwQ2xpZW50ID0gU3ByaW5nQmVhblByb3ZpZGVyLmdldEJlYW4oSHR0cENsaWVudEFzeW5jRmFjYWRlLmNsYXNzKTtcblxuXG4vKipcbiAqIFRoZSBhc3luY2hyb25vdXMgSFRUUCBjbGllbnQgY2xhc3MuIEFsbCByZXF1ZXN0IG1ldGhvZHMgcmV0dXJuIGltbWVkaWF0ZWx5XG4gKiBhbmQgZXhlY3V0ZSBjYWxsYmFja3MgdXBvbiBjb21wbGV0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSHR0cEFzeW5jQ2xpZW50IHtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIEdFVCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGUuZy4sIGhlYWRlcnMsIGJvZHksIHBhcmFtcykuXG4gICAgICovXG5cdGdldEFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LmdldEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5nZXRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIFBPU1QgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRwb3N0QXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQucG9zdEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5wb3N0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBQVVQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRwdXRBc3luYyh1cmw6IHN0cmluZywgY29uZmlnOiBIdHRwQ2xpZW50QXN5bmNDb25maWcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdVcmwgPSBidWlsZFVybCh1cmwsIG9wdGlvbnMpO1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soXG5cdFx0XHRodHRwQ2xpZW50LFxuXHRcdFx0Y29uZmlnLnN1Y2Nlc3MsXG5cdFx0XHRjb25maWcuZXJyb3IsXG5cdFx0XHRjb25maWcuY2FuY2VsXG5cdFx0KTtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0aHR0cENsaWVudC5wdXRBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQucHV0QXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBQQVRDSCByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdHBhdGNoQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQucGF0Y2hBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQucGF0Y2hBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIERFTEVURSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdGRlbGV0ZUFzeW5jKHVybDogc3RyaW5nLCBjb25maWc6IEh0dHBDbGllbnRBc3luY0NvbmZpZywgb3B0aW9ucz86IEh0dHBDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld1VybCA9IGJ1aWxkVXJsKHVybCwgb3B0aW9ucyk7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBjcmVhdGVIdHRwUmVzcG9uc2VDYWxsYmFjayhcblx0XHRcdGh0dHBDbGllbnQsXG5cdFx0XHRjb25maWcuc3VjY2Vzcyxcblx0XHRcdGNvbmZpZy5lcnJvcixcblx0XHRcdGNvbmZpZy5jYW5jZWxcblx0XHQpO1xuXHRcdGlmIChvcHRpb25zKSB7XG5cdFx0XHRodHRwQ2xpZW50LmRlbGV0ZUFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5kZWxldGVBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGFuIGFzeW5jaHJvbm91cyBIVFRQIEhFQUQgcmVxdWVzdC5cbiAgICAgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgVVJMLlxuICAgICAqIEBwYXJhbSBjb25maWcgVGhlIGNhbGxiYWNrIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFJlcXVlc3QgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICAgICAqL1xuXHRoZWFkQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQuaGVhZEFzeW5jKG5ld1VybCwgSlNPTi5zdHJpbmdpZnkob3B0aW9ucyksIGNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aHR0cENsaWVudC5oZWFkQXN5bmMobmV3VXJsLCBKU09OLnN0cmluZ2lmeSh7fSksIGNhbGxiYWNrKTtcblx0XHR9XG5cdH07XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyBhbiBhc3luY2hyb25vdXMgSFRUUCBUUkFDRSByZXF1ZXN0LlxuICAgICAqIEBwYXJhbSB1cmwgVGhlIHRhcmdldCBVUkwuXG4gICAgICogQHBhcmFtIGNvbmZpZyBUaGUgY2FsbGJhY2sgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUmVxdWVzdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAgICovXG5cdHRyYWNlQXN5bmModXJsOiBzdHJpbmcsIGNvbmZpZzogSHR0cENsaWVudEFzeW5jQ29uZmlnLCBvcHRpb25zPzogSHR0cENsaWVudFJlcXVlc3RPcHRpb25zKTogdm9pZCB7XG5cdFx0Y29uc3QgbmV3VXJsID0gYnVpbGRVcmwodXJsLCBvcHRpb25zKTtcblx0XHRjb25zdCBjYWxsYmFjayA9IGNyZWF0ZUh0dHBSZXNwb25zZUNhbGxiYWNrKFxuXHRcdFx0aHR0cENsaWVudCxcblx0XHRcdGNvbmZpZy5zdWNjZXNzLFxuXHRcdFx0Y29uZmlnLmVycm9yLFxuXHRcdFx0Y29uZmlnLmNhbmNlbFxuXHRcdCk7XG5cdFx0aWYgKG9wdGlvbnMpIHtcblx0XHRcdGh0dHBDbGllbnQudHJhY2VBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpLCBjYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGh0dHBDbGllbnQudHJhY2VBc3luYyhuZXdVcmwsIEpTT04uc3RyaW5naWZ5KHt9KSwgY2FsbGJhY2spO1xuXHRcdH1cblx0fTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYXRlcyB0aGUgZXhlY3V0aW9uIG9mIHF1ZXVlZCBhc3luY2hyb25vdXMgcmVxdWVzdHMgKGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBKYXZhIGNsaWVudCdzIHRocmVhZGluZyBtb2RlbCkuXG4gICAgICovXG5cdGV4ZWN1dGUoKTogdm9pZCB7XG5cdFx0aHR0cENsaWVudC5leGVjdXRlKCk7XG5cdH07XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgYXN5bmNocm9ub3VzIGNsaWVudC5cbiAqIEByZXR1cm5zIEEgbmV3IGluc3RhbmNlIG9mIEh0dHBBc3luY0NsaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc3RhbmNlKCk6IEh0dHBBc3luY0NsaWVudCB7XG5cdHJldHVybiBuZXcgSHR0cEFzeW5jQ2xpZW50KCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuYXRpdmUgSmF2YSBjYWxsYmFjayBvYmplY3QgdGhhdCB3cmFwcyB0aGUgSmF2YVNjcmlwdCBzdWNjZXNzLCBlcnJvciwgYW5kIGNhbmNlbCBjYWxsYmFja3MuXG4gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHVuZGVybHlpbmcgSmF2YSBIVFRQIGNsaWVudCBpbnN0YW5jZSB0byBnZW5lcmF0ZSB0aGUgZmluYWwgY2FsbGJhY2sgb2JqZWN0LlxuICogQHBhcmFtIGh0dHBDbGllbnQgVGhlIEphdmEgSHR0cENsaWVudEFzeW5jRmFjYWRlIGluc3RhbmNlLlxuICogQHBhcmFtIHN1Y2Nlc3NDYWxsYmFjayBKUyBjb2RlIHN0cmluZyBmb3Igc3VjY2Vzcy5cbiAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEpTIGNvZGUgc3RyaW5nIGZvciBlcnJvci5cbiAqIEBwYXJhbSBjYW5jZWxDYWxsYmFjayBKUyBjb2RlIHN0cmluZyBmb3IgY2FuY2VsLlxuICogQHJldHVybnMgQSBKYXZhIGNhbGxiYWNrIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSHR0cFJlc3BvbnNlQ2FsbGJhY2soaHR0cENsaWVudDogYW55LCBzdWNjZXNzQ2FsbGJhY2s6IHN0cmluZywgZXJyb3JDYWxsYmFjaz86IHN0cmluZywgY2FuY2VsQ2FsbGJhY2s/OiBzdHJpbmcpOiBhbnkge1xuXHRyZXR1cm4gaHR0cENsaWVudC5jcmVhdGVDYWxsYmFjayhcblx0XHRjcmVhdGVTdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKSxcblx0XHRjcmVhdGVFcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spLFxuXHRcdGNyZWF0ZUNhbmNlbENhbGxiYWNrKGNhbmNlbENhbGxiYWNrKVxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgcmF3IEphdmFTY3JpcHQgc3RyaW5nIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgSlZNIGVudmlyb25tZW50IHVwb24gc3VjY2Vzc2Z1bCByZXF1ZXN0IGNvbXBsZXRpb24uXG4gKiBUaGlzIHN0cmluZyBoYW5kbGVzIHBhcnNpbmcgdGhlIEphdmEgSFRUUCByZXNwb25zZSBvYmplY3QgYW5kIGV4ZWN1dGluZyB0aGUgdXNlcidzIGRlZmluZWQgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIHVzZXItcHJvdmlkZWQgc3VjY2VzcyBjYWxsYmFjayBmdW5jdGlvbiBjb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBjb21wbGV4IEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgc3VjY2VzcyBoYW5kbGVyLlxuICovXG5mdW5jdGlvbiBjcmVhdGVTdWNjZXNzQ2FsbGJhY2soY2FsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8vIE5vdGU6IFRoaXMgc3RyaW5nIHJlYWRzIHRoZSBKYXZhIHJlc3BvbnNlIG9iamVjdCBhbmQgdGhlIGNvbnRleHQgdmFyaWFibGVzIChfX2NvbnRleHQpIGF2YWlsYWJsZVxuICAgIC8vIGluIHRoZSBzcGVjaWZpYyBKVk0gZW52aXJvbm1lbnQuIFNpbmNlIHRoZSBIdHRwQ2xpZW50IDUgcG9ydCAoZGlyaWdpYmxlICM3NzkyKSB0aGF0IG9iamVjdCBpcyBhXG4gICAgLy8gU2ltcGxlSHR0cFJlc3BvbnNlOiB0aGUgc3RhdHVzIGlzIGdldENvZGUoKS9nZXRSZWFzb25QaHJhc2UoKSByYXRoZXIgdGhhbiBnZXRTdGF0dXNMaW5lKCksIHRoZVxuICAgIC8vIGhlYWRlcnMgYXJlIGdldEhlYWRlcnMoKSwgYW5kIHRoZSBib2R5IGlzIGFscmVhZHkgaW4gbWVtb3J5IC0gZ2V0Qm9keUJ5dGVzKCkvZ2V0Qm9keVRleHQoKSAtXG4gICAgLy8gc28gdGhlcmUgaXMgbm8gZW50aXR5IHN0cmVhbSB0byByZWFkIHRocm91Z2ggSU9VdGlscyBhbnkgbW9yZS5cbiAgICBcbiAgICAvLyBUaGUgc3RydWN0dXJlIG1hcHMgdGhlIEphdmEgSFRUUCBSZXNwb25zZSBvYmplY3QgaW50byB0aGUgc3RhbmRhcmQgSHR0cENsaWVudFJlc3BvbnNlIGludGVyZmFjZS5cblx0cmV0dXJuIFwiKGZ1bmN0aW9uKGh0dHBSZXNwb25zZSwgaXNCaW5hcnksIGNvbnRleHQpIHtcXG5cIlxuXHRcdCsgXCJ2YXIgcmVzcG9uc2UgPSB7fTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5zdGF0dXNDb2RlID0gaHR0cFJlc3BvbnNlLmdldENvZGUoKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5zdGF0dXNNZXNzYWdlID0gaHR0cFJlc3BvbnNlLmdldFJlYXNvblBocmFzZSgpO1xcblwiXG5cdFx0KyBcInJlc3BvbnNlLnByb3RvY29sID0gaHR0cFJlc3BvbnNlLmdldFZlcnNpb24oKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5iaW5hcnkgPSBpc0JpbmFyeTtcXG5cIlxuXG5cdFx0KyBcInZhciBoZWFkZXJzID0gaHR0cFJlc3BvbnNlLmdldEhlYWRlcnMoKTtcXG5cIlxuXHRcdCsgXCJyZXNwb25zZS5oZWFkZXJzID0gW107XFxuXCJcblx0XHQrIFwiZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArKykge1xcblwiXG5cdFx0KyBcIiAgICByZXNwb25zZS5oZWFkZXJzLnB1c2goe1xcblwiXG5cdFx0KyBcIiAgICAgICAgbmFtZTogaGVhZGVyc1tpXS5nZXROYW1lKCksXFxuXCJcblx0XHQrIFwiICAgICAgICB2YWx1ZTogaGVhZGVyc1tpXS5nZXRWYWx1ZSgpXFxuXCJcblx0XHQrIFwiICAgIH0pO1xcblwiXG5cdFx0KyBcIn1cXG5cIlxuXG5cdFx0KyBcImlmIChpc0JpbmFyeSkge1xcblwiXG5cdFx0KyBcIiAgICByZXNwb25zZS5kYXRhID0gaHR0cFJlc3BvbnNlLmdldEJvZHlCeXRlcygpO1xcblwiXG5cdFx0KyBcIn0gZWxzZSB7XFxuXCJcblx0XHQrIFwiICAgIHJlc3BvbnNlLnRleHQgPSBodHRwUmVzcG9uc2UuZ2V0Qm9keVRleHQoKTtcXG5cIlxuXHRcdCsgXCJ9XFxuXCJcblxuXHRcdCsgXCIoXCIgKyBjYWxsYmFjayArIFwiKShyZXNwb25zZSwgSlNPTi5wYXJzZShjb250ZXh0KSk7XFxuXCJcblx0XHQrIFwifSkoX19jb250ZXh0LmdldCgncmVzcG9uc2UnKSwgX19jb250ZXh0LmdldCgnaHR0cENsaWVudFJlcXVlc3RPcHRpb25zJykuaXNCaW5hcnkoKSwgX19jb250ZXh0LmdldCgnaHR0cENsaWVudFJlcXVlc3RPcHRpb25zJykuZ2V0Q29udGV4dCgpKTtcXG5cIjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHJhdyBKYXZhU2NyaXB0IHN0cmluZyBmb3IgdGhlIGVycm9yIGNhbGxiYWNrLlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSB1c2VyLXByb3ZpZGVkIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9uIGNvZGUgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgZXJyb3IgaGFuZGxlciwgb3IgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFcnJvckNhbGxiYWNrKGNhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIFwiKFwiICsgY2FsbGJhY2sgKyBcIikoX19jb250ZXh0LmdldCgnZXhjZXB0aW9uJykpXCI7XG5cdH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgcmF3IEphdmFTY3JpcHQgc3RyaW5nIGZvciB0aGUgY2FuY2VsIGNhbGxiYWNrLlxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSB1c2VyLXByb3ZpZGVkIGNhbmNlbCBjYWxsYmFjayBmdW5jdGlvbiBjb2RlIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBKYXZhU2NyaXB0IHN0cmluZyBmb3IgdGhlIGNhbmNlbCBoYW5kbGVyLCBvciB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbmNlbENhbGxiYWNrKGNhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0cmV0dXJuIFwiKFwiICsgY2FsbGJhY2sgKyBcIikoKVwiO1xuXHR9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGZpbmFsIFVSTCBieSBhcHBlbmRpbmcgYWxsIHF1ZXJ5IHBhcmFtZXRlcnMgZGVmaW5lZCBpbiBvcHRpb25zLnBhcmFtcy5cbiAqIFRoZSBwYXJhbWV0ZXJzIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSBvcHRpb25zIG9iamVjdCBhcyB0aGV5IGFyZSBmb3IgdGhlIHN5bmNocm9ub3VzIGNsaWVudCxcbiAqIHNpbmNlIHRoZSBvcHRpb25zIGFyZSBwYXNzZWQgYXMgSlNPTiBzdHJpbmcgdG8gdGhlIGZhY2FkZSBhbnl3YXkuXG4gKiBAcGFyYW0gdXJsIFRoZSBiYXNlIFVSTC5cbiAqIEBwYXJhbSBvcHRpb25zIFRoZSByZXF1ZXN0IG9wdGlvbnMgd2hpY2ggbWF5IGNvbnRhaW4gYHBhcmFtc2AuXG4gKiBAcmV0dXJucyBUaGUgVVJMIHdpdGggYXBwZW5kZWQgcXVlcnkgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRVcmwodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwQ2xpZW50UmVxdWVzdE9wdGlvbnMpOiBzdHJpbmcge1xuXHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucy5wYXJhbXMgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnBhcmFtcyA9PT0gbnVsbCB8fCBvcHRpb25zLnBhcmFtcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdXJsO1xuXHR9XG5cdGxldCBuZXdVcmwgPSB1cmw7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5wYXJhbXMubGVuZ3RoOyBpICsrKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtID0gb3B0aW9ucy5wYXJhbXNbaV07XG5cdFx0aWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIFVSTCBhbHJlYWR5IGNvbnRhaW5zICc/JyBhbmQgdXNlICcmJyBpZiBzbyAoaW1wcm92ZXMgcm9idXN0bmVzcylcbiAgICAgICAgICAgIGlmIChuZXdVcmwuaW5jbHVkZXMoJz8nKSkge1xuICAgICAgICAgICAgICAgIG5ld1VybCArPSAnJic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1VybCArPSAnPyc7XG4gICAgICAgICAgICB9XG5cdFx0XHRuZXdVcmwgKz0gcGFyYW0ubmFtZSArICc9JyArIHBhcmFtLnZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRuZXdVcmwgKz0gJyYnICsgcGFyYW0ubmFtZSArICc9JyArIHBhcmFtLnZhbHVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbmV3VXJsO1xufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRtb2R1bGUuZXhwb3J0cyA9IHsgSHR0cEFzeW5jQ2xpZW50LCBnZXRJbnN0YW5jZSB9O1xufSJdLAogICJtYXBwaW5ncyI6ICJBQXVJQSxNQUFNLHdCQUF3QixLQUFLLEtBQUssaUVBQWlFO0FBR3pHLE1BQU0scUJBQXFCLEtBQUssS0FBSyw0REFBNEQ7QUFHakcsTUFBTSxhQUFhLG1CQUFtQixRQUFRLHNCQUFzQixLQUFLO0FBT2xFLE1BQU0sZ0JBQWdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRNUIsU0FBUyxLQUFhLFFBQStCLFNBQTBDO0FBQzlGLFVBQU0sU0FBUyxTQUFTLEtBQUssT0FBTztBQUNwQyxVQUFNLFdBQVc7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLElBQ1I7QUFDQSxRQUFJLFNBQVM7QUFDWixpQkFBVyxTQUFTLFFBQVEsS0FBSyxVQUFVLE9BQU8sR0FBRyxRQUFRO0FBQUEsSUFDOUQsT0FBTztBQUNOLGlCQUFXLFNBQVMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLEdBQUcsUUFBUTtBQUFBLElBQ3pEO0FBQUEsRUFDRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsVUFBVSxLQUFhLFFBQStCLFNBQTBDO0FBQy9GLFVBQU0sU0FBUyxTQUFTLEtBQUssT0FBTztBQUNwQyxVQUFNLFdBQVc7QUFBQSxNQUNoQjtBQUFBLE1BQ0EsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLE1BQ1AsT0FBTztBQUFBLElBQ1I7QUFDQSxRQUFJLFNBQVM7QUFDWixpQkFBVyxVQUFVLFFBQVEsS0FB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
@@ -2,4 +2,4 @@ const QLDBRepository = Java.type("org.eclipse.dirigible.components.api.qldb.QLDB
2
2
  export {
3
3
  QLDBRepository
4
4
  };
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3FsZGIvcWxkYi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbW9kdWxlIHFsZGIvcWxkYlxuICogQHBhY2thZ2UgQGFlcm9raXQvc2RrL3FsZGJcbiAqIEBuYW1lIFFMREJSZXBvc2l0b3J5XG4gKiBAb3ZlcnZpZXdcbiAqXG4gKiBFbnRyeSBwb2ludCBmb3IgQW1hem9uIFFMREIgcmVwb3NpdG9yeSBpbnRlZ3JhdGlvbiBpbiBBZXJva2l0IFNESy5cbiAqXG4gKiBFeHBvc2VzIHRoZSBgUUxEQlJlcG9zaXRvcnlgIGNsYXNzIGFsaWFzIHRvIHRoZSB1bmRlcmx5aW5nIEphdmEgaW1wbGVtZW50YXRpb246XG4gKiBgb3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLnFsZGIuUUxEQlJlcG9zaXRvcnlgLlxuICpcbiAqIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgUUxEQiBsZWRnZXIgc2Vzc2lvbnMsIGV4ZWN1dGUgc3RhdGVtZW50cyxcbiAqIGFuZCBoYW5kbGUgdHJhbnNhY3Rpb24gbGlmZWN5Y2xlcyBmcm9tIEphdmFTY3JpcHQgY29kZS5cbiAqL1xuXG5leHBvcnQgY29uc3QgUUxEQlJlcG9zaXRvcnkgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkucWxkYi5RTERCUmVwb3NpdG9yeVwiKTsiXSwKICAibWFwcGluZ3MiOiAiQUFlTyxNQUFNLGlCQUFpQixLQUFLLEtBQUssMERBQTBEOyIsCiAgIm5hbWVzIjogW10KfQo=
5
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3FsZGIvcWxkYi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAbW9kdWxlIHFsZGIvcWxkYlxuICogQHBhY2thZ2UgQGFlcm9raXQvc2RrL3FsZGJcbiAqIEBuYW1lIFFMREJSZXBvc2l0b3J5XG4gKiBAb3ZlcnZpZXdcbiAqXG4gKiBFbnRyeSBwb2ludCBmb3IgQW1hem9uIFFMREIgcmVwb3NpdG9yeSBpbnRlZ3JhdGlvbiBpbiBBZXJva2l0IFNESy5cbiAqXG4gKiBFeHBvc2VzIHRoZSBgUUxEQlJlcG9zaXRvcnlgIGNsYXNzIGFsaWFzIHRvIHRoZSB1bmRlcmx5aW5nIEphdmEgaW1wbGVtZW50YXRpb246XG4gKiBgb3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLnFsZGIuUUxEQlJlcG9zaXRvcnlgLlxuICpcbiAqIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgUUxEQiBsZWRnZXIgc2Vzc2lvbnMsIGV4ZWN1dGUgc3RhdGVtZW50cyxcbiAqIGFuZCBoYW5kbGUgdHJhbnNhY3Rpb24gbGlmZWN5Y2xlcyBmcm9tIEphdmFTY3JpcHQgY29kZS5cbiAqXG4gKiBUaGUgUUxEQiBkcml2ZXIgaXMgYW4gYWRkLW9uIHRoYXQgdGhlIGRlZmF1bHQgYnVuZGxlIGRvZXMgbm90IHNoaXA6IHRoZSBhcHBsaWNhdGlvbiBhZGRzXG4gKiBgb3JnLmVjbGlwc2UuZGlyaWdpYmxlOmRpcmlnaWJsZS1jb21wb25lbnRzLWFwaS1xbGRiLWRyaXZlcmAgKGA8dHlwZT5wb208L3R5cGU+YCkuIFdpdGhvdXQgaXQsXG4gKiBgbmV3IFFMREJSZXBvc2l0b3J5KC4uLilgIHRocm93cyBgUWxkYk5vdEF2YWlsYWJsZUV4Y2VwdGlvbmAgbmFtaW5nIHRoYXQgYXJ0aWZhY3QuXG4gKi9cblxuZXhwb3J0IGNvbnN0IFFMREJSZXBvc2l0b3J5ID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLnFsZGIuUUxEQlJlcG9zaXRvcnlcIik7Il0sCiAgIm1hcHBpbmdzIjogIkFBbUJPLE1BQU0saUJBQWlCLEtBQUssS0FBSywwREFBMEQ7IiwKICAibmFtZXMiOiBbXQp9Cg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aerokit/sdk",
3
- "version": "14.76.0",
3
+ "version": "14.82.0",
4
4
  "description": "Unified TypeScript SDK for modern cloud platforms.",
5
5
  "scripts": {
6
6
  "clean": "rm -rf dist",
@@ -40,10 +40,43 @@ export function listFlow(manifest, entity) {
40
40
  const emptyState = page.getByText('Get started by creating the first record').filter({ visible: true }).first();
41
41
  await expect(firstHeader.or(emptyState).first()).toBeVisible();
42
42
  if (entity.expectSeedData || (await firstHeader.isVisible())) {
43
- for (const field of (entity.fields ?? []).filter((f) => f.major !== false && !f.primaryKey)) {
44
- await expect(page.getByRole('columnheader').filter({ hasText: labelOf(field) }).first()).toBeVisible();
43
+ for (const label of declaredColumns(entity)) {
44
+ await expect(page.getByRole('columnheader').filter({ hasText: label }).first()).toBeVisible();
45
+ }
46
+ for (const label of hiddenColumns(entity)) {
47
+ await expect(page.getByRole('columnheader').filter({ hasText: label })).toHaveCount(0);
45
48
  }
46
49
  await expect(page.locator('tbody tr:visible').first()).toBeVisible();
47
50
  }
48
51
  });
49
52
  }
53
+
54
+ // The headers the list is expected to render, in order (dirigible #7664). `list:` curates the list
55
+ // INDEPENDENTLY of each field's own `major`, so an entity that declares it renders exactly those
56
+ // columns and the `major` rule says nothing about it - which is why asserting the rule against a
57
+ // curated entity failed on the first instance that held a row, and passed on every empty one,
58
+ // where the assertion never runs at all.
59
+ function declaredColumns(entity) {
60
+ if (entity.list?.length) return entity.list.map((name) => columnLabel(entity, name));
61
+ return (entity.fields ?? []).filter((f) => f.major !== false && !f.primaryKey).map(labelOf);
62
+ }
63
+
64
+ // ...and the ones it must NOT render. A curated list is the whole statement, so a field left off it
65
+ // is absent from the table however its own `major` reads - the half that catches a `list:` the page
66
+ // ignored.
67
+ function hiddenColumns(entity) {
68
+ if (!entity.list?.length) return [];
69
+ const listed = new Set(entity.list);
70
+ return (entity.fields ?? [])
71
+ .filter((f) => !f.primaryKey && !listed.has(f.name))
72
+ .map(labelOf);
73
+ }
74
+
75
+ // A `list:` entry names a property - a field, or a to-one relation - and the header carries that
76
+ // property's own label, which is what the manifest's `label` on the field already is.
77
+ function columnLabel(entity, name) {
78
+ const field = (entity.fields ?? []).find((f) => f.name === name);
79
+ if (field) return labelOf(field);
80
+ const relation = (entity.relations ?? []).find((r) => r.name === name);
81
+ return relation?.label ?? name;
82
+ }
package/test/form.js CHANGED
@@ -86,9 +86,20 @@ export async function resolveRelationSamples(request, manifest, entity) {
86
86
  if (relation.entityStatus) continue;
87
87
  // a filtered picker needs a matching candidate, so fetch a page and filter client-side; a
88
88
  // constrained relation needs alternatives to choose from
89
- const wide = relation.where || relation.leafOnly || constrained.has(relation.name);
89
+ const wide =
90
+ relation.where || relation.leafOnly || relation.pickable || relation.forbiddenTarget || constrained.has(relation.name);
90
91
  const { rows: fetched, labelFrom } = await fetchRows(relation, wide ? 200 : 1);
91
92
  let rows = relation.where ? fetched?.filter((r) => String(r[relation.where.by]) === String(relation.where.value)) : fetched;
93
+ // A picker rule narrows what the chooser OFFERS (dirigible #7663) and the child's own
94
+ // forbidWhen decides which parent it accepts at all (#7667). Both refuse a row the manifest
95
+ // otherwise describes as a candidate, so the sample has to respect them or the record is built
96
+ // from a row the UI never offers and the REST create is answered 400.
97
+ if (rows?.length && relation.pickable?.when?.length) {
98
+ rows = rows.filter((row) => relation.pickable.when.every((term) => termHolds(row, term)));
99
+ }
100
+ if (rows?.length && relation.forbiddenTarget?.length) {
101
+ rows = rows.filter((row) => !relation.forbiddenTarget.some((term) => termHolds(row, term)));
102
+ }
92
103
  if (relation.leafOnly && rows?.length) {
93
104
  // the generated validation rejects a non-leaf target - pick a row no other row parents
94
105
  const prop = relation.leafOnly.hierarchyProperty;
@@ -97,7 +108,7 @@ export async function resolveRelationSamples(request, manifest, entity) {
97
108
  }
98
109
  if (!rows?.length) {
99
110
  // a required FK cannot be satisfied - fail loudly; an optional one is simply left unset
100
- if (relation.required) throw new Error(`Relation ${entity.name}.${relation.name}: no ${relation.to} rows to pick from`);
111
+ if (relation.required) throw new Error(`Relation ${entity.name}.${relation.name}: ${noCandidateReason(relation)}`);
101
112
  continue;
102
113
  }
103
114
  const label = rows[0][labelFrom];
@@ -178,3 +189,26 @@ export async function fillForm(page, manifest, entity, record, relationSamples,
178
189
  const dependents = pickable.filter((s) => s.relation.dependsOn);
179
190
  for (const sample of [...triggers, ...dependents]) await pickDropdown(page, sample.relation, sample.label);
180
191
  }
192
+
193
+ // One term of a picker rule or of a forbidWhen reaching through a relation, as the manifest writes
194
+ // it: `{ by, op, value }` with `op` one of eq / ne / present / absent, a presence test carrying no
195
+ // value. Compared as strings, because an id arrives as a number from REST and as text from a
196
+ // rendered option.
197
+ function termHolds(row, term) {
198
+ const value = row?.[term.by];
199
+ const empty = value == null || String(value).trim() === '';
200
+ if (term.op === 'present') return !empty;
201
+ if (term.op === 'absent') return empty;
202
+ if (term.op === 'ne') return String(value) !== String(term.value);
203
+ return String(value) === String(term.value);
204
+ }
205
+
206
+ // Why a required relation had nothing to pick: the rule that excluded every row, in the words the
207
+ // model authored it in, so the failure names the business rule rather than "no rows".
208
+ function noCandidateReason(relation) {
209
+ const refusal = (relation.forbiddenTarget ?? []).find((term) => term.message)?.message;
210
+ if (refusal) return `every ${relation.to} is refused - ${refusal}`;
211
+ if (relation.forbiddenTarget?.length) return `every ${relation.to} is in a state this record refuses`;
212
+ if (relation.pickable?.when?.length) return `no ${relation.to} row satisfies the picker rule`;
213
+ return `no ${relation.to} rows to pick from`;
214
+ }
@@ -1,71 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var consumer_exports = {};
19
- __export(consumer_exports, {
20
- Consumer: () => Consumer
21
- });
22
- module.exports = __toCommonJS(consumer_exports);
23
- const KafkaFacade = Java.type("org.eclipse.dirigible.components.api.kafka.KafkaFacade");
24
- class Consumer {
25
- /**
26
- * Creates a new topic configuration wrapper that can be used to start or
27
- * stop listening for messages on a Kafka topic.
28
- *
29
- * @param destination The name of the Kafka topic to consume messages from.
30
- * @param configuration Optional key-value object containing Kafka consumer properties
31
- * (e.g., 'group.id', 'auto.offset.reset').
32
- * @returns A {@link Topic} instance configured for the specified destination and properties.
33
- */
34
- static topic(destination, configuration = {}) {
35
- return new Topic(destination, configuration);
36
- }
37
- }
38
- class Topic {
39
- destination;
40
- configuration = {};
41
- /**
42
- * @param destination The name of the Kafka topic.
43
- * @param configuration Optional key-value object for consumer properties.
44
- */
45
- constructor(destination, configuration = {}) {
46
- this.destination = destination;
47
- this.configuration = configuration;
48
- }
49
- /**
50
- * Starts listening to the configured topic in a background process.
51
- *
52
- * @param handler The path to the script or function name that will handle the incoming Kafka messages.
53
- * This function should accept two arguments: `message` (string) and `headers` (object).
54
- * @param timeout The maximum amount of time (in milliseconds) the consumer should wait for messages.
55
- */
56
- startListening(handler, timeout) {
57
- KafkaFacade.startListening(this.destination, handler, timeout, JSON.stringify(this.configuration));
58
- }
59
- /**
60
- * Stops the background process that is listening to the configured topic.
61
- * Note: Stopping is based on matching the topic and configuration, so the same
62
- * configuration object used in `startListening` should be used here.
63
- */
64
- stopListening() {
65
- KafkaFacade.stopListening(this.destination, JSON.stringify(this.configuration));
66
- }
67
- }
68
- if (typeof module !== "undefined") {
69
- module.exports = Consumer;
70
- }
71
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2thZmthL2NvbnN1bWVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUga2Fma2EvY29uc3VtZXJcbiAqIEBwYWNrYWdlIEBhZXJva2l0L3Nkay9rYWZrYVxuICogQG5hbWUgQ29uc3VtZXJcbiAqIEBvdmVydmlld1xuICogXG4gKiBUaGUgQ29uc3VtZXIgbW9kdWxlIHByb3ZpZGVzIGFuIEFQSSBmb3IgY29uZmlndXJpbmcgYW5kIG1hbmFnaW5nIEthZmthIGNvbnN1bWVycywgYWxsb3dpbmcgc2NyaXB0cyB0byBzdGFydCBhbmQgc3RvcCBsaXN0ZW5pbmcgdG8gc3BlY2lmaWMgdG9waWNzLiBJdCBhYnN0cmFjdHMgdGhlIGNvbXBsZXhpdGllcyBvZiBLYWZrYSBjb25zdW1lciBjb25maWd1cmF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgZW5hYmxpbmcgZGV2ZWxvcGVycyB0byBlYXNpbHkgaW50ZWdyYXRlIEthZmthIG1lc3NhZ2UgY29uc3VtcHRpb24gaW50byB0aGVpciBhcHBsaWNhdGlvbnMuXG4gKiBcbiAqICMjIyBLZXkgRmVhdHVyZXM6XG4gKiAtICoqVG9waWMgQ29uZmlndXJhdGlvbioqOiBUaGUgYENvbnN1bWVyLnRvcGljYCBtZXRob2QgYWxsb3dzIGRldmVsb3BlcnMgdG8gY3JlYXRlIGEgdG9waWMgY29uZmlndXJhdGlvbiB3cmFwcGVyIHdpdGggc3BlY2lmaWVkIGRlc3RpbmF0aW9uIGFuZCBwcm9wZXJ0aWVzLlxuICogLSAqKkJhY2tncm91bmQgTGlzdGVuaW5nKio6IFRoZSBgc3RhcnRMaXN0ZW5pbmdgIG1ldGhvZCBzdGFydHMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdGhhdCBsaXN0ZW5zIGZvciBtZXNzYWdlcyBvbiB0aGUgY29uZmlndXJlZCB0b3BpYywgaW52b2tpbmcgYSBzcGVjaWZpZWQgaGFuZGxlciBmdW5jdGlvbiBmb3IgaW5jb21pbmcgbWVzc2FnZXMuXG4gKiAtICoqR3JhY2VmdWwgU2h1dGRvd24qKjogVGhlIGBzdG9wTGlzdGVuaW5nYCBtZXRob2QgYWxsb3dzIGRldmVsb3BlcnMgdG8gc3RvcCB0aGUgYmFja2dyb3VuZCBsaXN0ZW5pbmcgcHJvY2VzcyBiYXNlZCBvbiB0aGUgdG9waWMgYW5kIGNvbmZpZ3VyYXRpb24uXG4gKiBcbiAqICMjIyBVc2UgQ2FzZXM6XG4gKiAtICoqUmVhbC10aW1lIERhdGEgUHJvY2Vzc2luZyoqOiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyBtb2R1bGUgdG8gY29uc3VtZSBtZXNzYWdlcyBmcm9tIEthZmthIHRvcGljcyBpbiByZWFsLXRpbWUsIGVuYWJsaW5nIHVzZSBjYXNlcyBzdWNoIGFzIHN0cmVhbSBwcm9jZXNzaW5nLCBldmVudC1kcml2ZW4gYXJjaGl0ZWN0dXJlcywgYW5kIG1pY3Jvc2VydmljZXMgY29tbXVuaWNhdGlvbi5cbiAqIC0gKipJbnRlZ3JhdGlvbiB3aXRoIE90aGVyIFN5c3RlbXMqKjogQnkgY29uc3VtaW5nIEthZmthIG1lc3NhZ2VzLCBhcHBsaWNhdGlvbnMgY2FuIGludGVncmF0ZSB3aXRoIG90aGVyIHN5c3RlbXMgdGhhdCBwcm9kdWNlIG1lc3NhZ2VzIHRvIEthZmthLCBmYWNpbGl0YXRpbmcgZGF0YSBmbG93IGFjcm9zcyBkaWZmZXJlbnQgY29tcG9uZW50cyBvZiBhbiBlY29zeXN0ZW0uXG4gKiBcbiAqICMjIyBFeGFtcGxlIFVzYWdlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IENvbnN1bWVyIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9rYWZrYVwiO1xuICogXG4gKiAvLyBDcmVhdGUgYSBjb25zdW1lciBmb3IgdGhlIFwib3JkZXJzXCIgdG9waWMgd2l0aCBzcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gKiBjb25zdCBvcmRlcnNDb25zdW1lciA9IENvbnN1bWVyLnRvcGljKFwib3JkZXJzXCIsIHsgXCJncm91cC5pZFwiOiBcIm9yZGVyLXByb2Nlc3NvcnNcIiB9KTtcbiAqIFxuICogLy8gU3RhcnQgbGlzdGVuaW5nIHRvIHRoZSBcIm9yZGVyc1wiIHRvcGljIHdpdGggYSBtZXNzYWdlIGhhbmRsZXIgYW5kIHRpbWVvdXRcbiAqIG9yZGVyc0NvbnN1bWVyLnN0YXJ0TGlzdGVuaW5nKFwiaGFuZGxlT3JkZXJNZXNzYWdlXCIsIDMwMDAwKTtcbiAqIFxuICogLy8gTGF0ZXIsIHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBcIm9yZGVyc1wiIHRvcGljXG4gKiBvcmRlcnNDb25zdW1lci5zdG9wTGlzdGVuaW5nKCk7XG4gKiBgYGBcbiAqL1xuXG5jb25zdCBLYWZrYUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5rYWZrYS5LYWZrYUZhY2FkZVwiKTtcblxuLyoqXG4gKiBUaGUgQ29uc3VtZXIgY2xhc3MgYWN0cyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nXG4gKiBLYWZrYSB0b3BpYyBjb25zdW1lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdW1lciB7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRvcGljIGNvbmZpZ3VyYXRpb24gd3JhcHBlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0YXJ0IG9yXG4gICAgICogc3RvcCBsaXN0ZW5pbmcgZm9yIG1lc3NhZ2VzIG9uIGEgS2Fma2EgdG9waWMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIG5hbWUgb2YgdGhlIEthZmthIHRvcGljIHRvIGNvbnN1bWUgbWVzc2FnZXMgZnJvbS5cbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBPcHRpb25hbCBrZXktdmFsdWUgb2JqZWN0IGNvbnRhaW5pbmcgS2Fma2EgY29uc3VtZXIgcHJvcGVydGllc1xuICAgICAqIChlLmcuLCAnZ3JvdXAuaWQnLCAnYXV0by5vZmZzZXQucmVzZXQnKS5cbiAgICAgKiBAcmV0dXJucyBBIHtAbGluayBUb3BpY30gaW5zdGFuY2UgY29uZmlndXJlZCBmb3IgdGhlIHNwZWNpZmllZCBkZXN0aW5hdGlvbiBhbmQgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHRvcGljKGRlc3RpbmF0aW9uOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IFRvcGljIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUb3BpYyhkZXN0aW5hdGlvbiwgY29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIEthZmthIHRvcGljIGNvbnN1bWVyIGNhcGFibGUgb2Ygc3RhcnRpbmcgYW5kIHN0b3BwaW5nXG4gKiBiYWNrZ3JvdW5kIG1lc3NhZ2UgbGlzdGVuaW5nLlxuICovXG5jbGFzcyBUb3BpYyB7XG4gICAgcHJpdmF0ZSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBuYW1lIG9mIHRoZSBLYWZrYSB0b3BpYy5cbiAgICAgKiBAcGFyYW0gY29uZmlndXJhdGlvbiBPcHRpb25hbCBrZXktdmFsdWUgb2JqZWN0IGZvciBjb25zdW1lciBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGRlc3RpbmF0aW9uOiBzdHJpbmcsIGNvbmZpZ3VyYXRpb246IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RhcnRzIGxpc3RlbmluZyB0byB0aGUgY29uZmlndXJlZCB0b3BpYyBpbiBhIGJhY2tncm91bmQgcHJvY2Vzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBoYW5kbGVyIFRoZSBwYXRoIHRvIHRoZSBzY3JpcHQgb3IgZnVuY3Rpb24gbmFtZSB0aGF0IHdpbGwgaGFuZGxlIHRoZSBpbmNvbWluZyBLYWZrYSBtZXNzYWdlcy5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgdHdvIGFyZ3VtZW50czogYG1lc3NhZ2VgIChzdHJpbmcpIGFuZCBgaGVhZGVyc2AgKG9iamVjdCkuXG4gICAgICogQHBhcmFtIHRpbWVvdXQgVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlIGNvbnN1bWVyIHNob3VsZCB3YWl0IGZvciBtZXNzYWdlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhcnRMaXN0ZW5pbmcoaGFuZGxlcjogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgS2Fma2FGYWNhZGUuc3RhcnRMaXN0ZW5pbmcodGhpcy5kZXN0aW5hdGlvbiwgaGFuZGxlciwgdGltZW91dCwgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmF0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RvcHMgdGhlIGJhY2tncm91bmQgcHJvY2VzcyB0aGF0IGlzIGxpc3RlbmluZyB0byB0aGUgY29uZmlndXJlZCB0b3BpYy5cbiAgICAgKiBOb3RlOiBTdG9wcGluZyBpcyBiYXNlZCBvbiBtYXRjaGluZyB0aGUgdG9waWMgYW5kIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBzYW1lXG4gICAgICogY29uZmlndXJhdGlvbiBvYmplY3QgdXNlZCBpbiBgc3RhcnRMaXN0ZW5pbmdgIHNob3VsZCBiZSB1c2VkIGhlcmUuXG4gICAgICovXG4gICAgcHVibGljIHN0b3BMaXN0ZW5pbmcoKTogdm9pZCB7XG4gICAgICAgIEthZmthRmFjYWRlLnN0b3BMaXN0ZW5pbmcodGhpcy5kZXN0aW5hdGlvbiwgSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWd1cmF0aW9uKSk7XG4gICAgfVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBDb25zdW1lcjtcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0EsTUFBTSxjQUFjLEtBQUssS0FBSyx3REFBd0Q7QUFNL0UsTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXbEIsT0FBYyxNQUFNLGFBQXFCLGdCQUEyQyxDQUFDLEdBQVU7QUFDM0YsV0FBTyxJQUFJLE1BQU0sYUFBYSxhQUFhO0FBQUEsRUFDL0M7QUFDSjtBQU1BLE1BQU0sTUFBTTtBQUFBLEVBQ0E7QUFBQSxFQUNBLGdCQUEyQyxDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1wRCxZQUFZLGFBQXFCLGdCQUEyQyxDQUFDLEdBQUc7QUFDNUUsU0FBSyxjQUFjO0FBQ25CLFNBQUssZ0JBQWdCO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU08sZUFBZSxTQUFpQixTQUF1QjtBQUMxRCxnQkFBWSxlQUFlLEtBQUssYUFBYSxTQUFTLFNBQVMsS0FBSyxVQUFVLEtBQUssYUFBYSxDQUFDO0FBQUEsRUFDckc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxnQkFBc0I7QUFDekIsZ0JBQVksY0FBYyxLQUFLLGFBQWEsS0FBSyxVQUFVLEtBQUssYUFBYSxDQUFDO0FBQUEsRUFDbEY7QUFDSjtBQUdBLElBQUksT0FBTyxXQUFXLGFBQWE7QUFFL0IsU0FBTyxVQUFVO0FBQ3JCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,29 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var kafka_exports = {};
20
- __export(kafka_exports, {
21
- consumer: () => import_consumer.Consumer,
22
- producer: () => import_producer.Producer
23
- });
24
- module.exports = __toCommonJS(kafka_exports);
25
- var import_consumer = require("./consumer");
26
- __reExport(kafka_exports, require("./consumer"), module.exports);
27
- var import_producer = require("./producer");
28
- __reExport(kafka_exports, require("./producer"), module.exports);
29
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2thZmthL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUga2Fma2EvaW5kZXhcbiAqIEBwYWNrYWdlIEBhZXJva2l0L3Nkay9rYWZrYVxuICogQG92ZXJ2aWV3XG4gKiBcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdGllcyBmb3IgS2Fma2EgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBBZXJva2l0IFNESy4gSXQgaW5jbHVkZXMgY2xhc3NlcyBhbmQgbWV0aG9kcyBmb3IgcHJvZHVjaW5nIGFuZCBjb25zdW1pbmcgbWVzc2FnZXMgZnJvbSBLYWZrYSB0b3BpY3MsIGFzIHdlbGwgYXMgbWFuYWdpbmcgS2Fma2EgY29uZmlndXJhdGlvbnMgYW5kIGNvbm5lY3Rpb25zLlxuICogXG4gKiBUaGUgbWFpbiBjb21wb25lbnRzIG9mIHRoaXMgbW9kdWxlIGFyZTpcbiAqIC0gQ29uc3VtZXI6IFJlcHJlc2VudHMgYSBLYWZrYSBjb25zdW1lciB0aGF0IGNhbiBzdWJzY3JpYmUgdG8gdG9waWNzIGFuZCBjb25zdW1lIG1lc3NhZ2VzLlxuICogLSBQcm9kdWNlcjogUmVwcmVzZW50cyBhIEthZmthIHByb2R1Y2VyIHRoYXQgY2FuIHNlbmQgbWVzc2FnZXMgdG8gdG9waWNzLlxuICovXG5cbmV4cG9ydCB7IENvbnN1bWVyIGFzIGNvbnN1bWVyIH0gZnJvbSBcIi4vY29uc3VtZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN1bWVyXCI7XG5leHBvcnQgeyBQcm9kdWNlciBhcyBwcm9kdWNlciB9IGZyb20gXCIuL3Byb2R1Y2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm9kdWNlclwiOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVlBLHNCQUFxQztBQUNyQywwQkFBYyx1QkFiZDtBQWNBLHNCQUFxQztBQUNyQywwQkFBYyx1QkFmZDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,72 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var producer_exports = {};
19
- __export(producer_exports, {
20
- Producer: () => Producer
21
- });
22
- module.exports = __toCommonJS(producer_exports);
23
- const KafkaFacade = Java.type("org.eclipse.dirigible.components.api.kafka.KafkaFacade");
24
- class Producer {
25
- /**
26
- * Creates a new topic configuration wrapper that can be used to send messages
27
- * to a specific Kafka topic.
28
- *
29
- * @param destination The name of the Kafka topic to send messages to.
30
- * @param configuration Optional key-value object containing Kafka producer properties
31
- * (e.g., 'bootstrap.servers', 'acks').
32
- * @returns A {@link Topic} instance configured for the specified destination and properties.
33
- */
34
- static topic(destination, configuration = {}) {
35
- return new Topic(destination, configuration);
36
- }
37
- /**
38
- * Closes the Kafka producer connection pool, releasing associated resources.
39
- * This should be called when message sending is complete to ensure proper cleanup.
40
- *
41
- * @param configuration Optional key-value object containing the configuration
42
- * used to initialize the producer to be closed.
43
- */
44
- static close(configuration = {}) {
45
- KafkaFacade.closeProducer(configuration);
46
- }
47
- }
48
- class Topic {
49
- destination;
50
- configuration;
51
- /**
52
- * @param destination The name of the Kafka topic.
53
- * @param configuration Key-value object for producer properties.
54
- */
55
- constructor(destination, configuration) {
56
- this.destination = destination;
57
- this.configuration = configuration;
58
- }
59
- /**
60
- * Sends a message with an optional key to the configured Kafka topic.
61
- *
62
- * @param key The key of the message. Messages with the same key go to the same partition.
63
- * @param value The content of the message to be sent.
64
- */
65
- send(key, value) {
66
- KafkaFacade.send(this.destination, key, value, JSON.stringify(this.configuration));
67
- }
68
- }
69
- if (typeof module !== "undefined") {
70
- module.exports = Producer;
71
- }
72
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2thZmthL3Byb2R1Y2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUga2Fma2EvcHJvZHVjZXJcbiAqIEBwYWNrYWdlIEBhZXJva2l0L3Nkay9rYWZrYVxuICogQG5hbWUgUHJvZHVjZXJcbiAqIEBvdmVydmlld1xuICogXG4gKiBUaGUgUHJvZHVjZXIgbW9kdWxlIHByb3ZpZGVzIGFuIEFQSSBmb3IgY29uZmlndXJpbmcgYW5kIG1hbmFnaW5nIEthZmthIHByb2R1Y2VycywgYWxsb3dpbmcgc2NyaXB0cyB0byBjcmVhdGUgdG9waWNzLCBzZW5kIG1lc3NhZ2VzLCBhbmQgY2xvc2UgdGhlIHByb2R1Y2VyIGNvbm5lY3Rpb24uIEl0IGFic3RyYWN0cyB0aGUgY29tcGxleGl0aWVzIG9mIEthZmthIHByb2R1Y2VyIGNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2Ugc2VuZGluZywgZW5hYmxpbmcgZGV2ZWxvcGVycyB0byBlYXNpbHkgaW50ZWdyYXRlIEthZmthIG1lc3NhZ2UgcHJvZHVjdGlvbiBpbnRvIHRoZWlyIGFwcGxpY2F0aW9ucy5cbiAqIFxuICogIyMjIEtleSBGZWF0dXJlczpcbiAqIC0gKipUb3BpYyBDb25maWd1cmF0aW9uKio6IFRoZSBgUHJvZHVjZXIudG9waWNgIG1ldGhvZCBhbGxvd3MgZGV2ZWxvcGVycyB0byBjcmVhdGUgYSB0b3BpYyBjb25maWd1cmF0aW9uIHdyYXBwZXIgd2l0aCBzcGVjaWZpZWQgZGVzdGluYXRpb24gYW5kIHByb3BlcnRpZXMuXG4gKiAtICoqTWVzc2FnZSBTZW5kaW5nKio6IFRoZSBgc2VuZGAgbWV0aG9kIG9uIHRoZSBUb3BpYyBjbGFzcyBlbmFibGVzIHNlbmRpbmcgbWVzc2FnZXMgd2l0aCBvcHRpb25hbCBrZXlzIHRvIHRoZSBjb25maWd1cmVkIEthZmthIHRvcGljLlxuICogLSAqKkNvbm5lY3Rpb24gTWFuYWdlbWVudCoqOiBUaGUgYGNsb3NlYCBtZXRob2QgYWxsb3dzIGRldmVsb3BlcnMgdG8gY2xvc2UgdGhlIEthZmthIHByb2R1Y2VyIGNvbm5lY3Rpb24gcG9vbCwgZW5zdXJpbmcgcHJvcGVyIHJlc291cmNlIGNsZWFudXAuXG4gKiBcbiAqICMjIyBVc2UgQ2FzZXM6XG4gKiAtICoqRXZlbnQgUHJvZHVjdGlvbioqOiBEZXZlbG9wZXJzIGNhbiB1c2UgdGhpcyBtb2R1bGUgdG8gcHJvZHVjZSBtZXNzYWdlcyB0byBLYWZrYSB0b3BpY3MgaW4gcmVhbC10aW1lLCBlbmFibGluZyB1c2UgY2FzZXMgc3VjaCBhcyBldmVudC1kcml2ZW4gYXJjaGl0ZWN0dXJlcyBhbmQgbWljcm9zZXJ2aWNlcyBjb21tdW5pY2F0aW9uLlxuICogLSAqKkludGVncmF0aW9uIHdpdGggT3RoZXIgU3lzdGVtcyoqOiBCeSBzZW5kaW5nIEthZmthIG1lc3NhZ2VzLCBhcHBsaWNhdGlvbnMgY2FuIGludGVncmF0ZSB3aXRoIG90aGVyIHN5c3RlbXMgdGhhdCBjb25zdW1lIG1lc3NhZ2VzIGZyb20gS2Fma2EsIGZhY2lsaXRhdGluZyBkYXRhIGZsb3cgYWNyb3NzIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIGFuIGVjb3N5c3RlbS5cbiAqIFxuICogIyMjIEV4YW1wbGUgVXNhZ2U6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgUHJvZHVjZXIgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2thZmthXCI7XG4gKiBcbiAqIC8vIENyZWF0ZSBhIHByb2R1Y2VyIGZvciB0aGUgXCJvcmRlcnNcIiB0b3BpYyB3aXRoIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25cbiAqIGNvbnN0IG9yZGVyc1Byb2R1Y2VyID0gUHJvZHVjZXIudG9waWMoXCJvcmRlcnNcIiwgeyBcImJvb3RzdHJhcC5zZXJ2ZXJzXCI6IFwibG9jYWxob3N0OjkwOTJcIiB9KTtcbiAqIFxuICogLy8gU2VuZCBhIG1lc3NhZ2Ugd2l0aCBhIGtleSB0byB0aGUgXCJvcmRlcnNcIiB0b3BpY1xuICogb3JkZXJzUHJvZHVjZXIuc2VuZChcIm9yZGVyMTIzXCIsIFwiTmV3IG9yZGVyIHBsYWNlZFwiKTtcbiAqIFxuICogLy8gTGF0ZXIsIGNsb3NlIHRoZSBwcm9kdWNlciBjb25uZWN0aW9uXG4gKiBQcm9kdWNlci5jbG9zZSh7IFwiYm9vdHN0cmFwLnNlcnZlcnNcIjogXCJsb2NhbGhvc3Q6OTA5MlwiIH0pO1xuICogYGBgXG4gKi9cblxuY29uc3QgS2Fma2FGYWNhZGUgPSBKYXZhLnR5cGUoXCJvcmcuZWNsaXBzZS5kaXJpZ2libGUuY29tcG9uZW50cy5hcGkua2Fma2EuS2Fma2FGYWNhZGVcIik7XG5cbi8qKlxuICogVGhlIFByb2R1Y2VyIGNsYXNzIHNlcnZlcyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgY3JlYXRpbmcgYW5kIGNvbmZpZ3VyaW5nXG4gKiBLYWZrYSB0b3BpYyBwcm9kdWNlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9kdWNlciB7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHRvcGljIGNvbmZpZ3VyYXRpb24gd3JhcHBlciB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbmQgbWVzc2FnZXNcbiAgICAgKiB0byBhIHNwZWNpZmljIEthZmthIHRvcGljLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBuYW1lIG9mIHRoZSBLYWZrYSB0b3BpYyB0byBzZW5kIG1lc3NhZ2VzIHRvLlxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIE9wdGlvbmFsIGtleS12YWx1ZSBvYmplY3QgY29udGFpbmluZyBLYWZrYSBwcm9kdWNlciBwcm9wZXJ0aWVzXG4gICAgICogKGUuZy4sICdib290c3RyYXAuc2VydmVycycsICdhY2tzJykuXG4gICAgICogQHJldHVybnMgQSB7QGxpbmsgVG9waWN9IGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb24gYW5kIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyB0b3BpYyhkZXN0aW5hdGlvbjogc3RyaW5nLCBjb25maWd1cmF0aW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBUb3BpYyB7XG4gICAgICAgIHJldHVybiBuZXcgVG9waWMoZGVzdGluYXRpb24sIGNvbmZpZ3VyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgS2Fma2EgcHJvZHVjZXIgY29ubmVjdGlvbiBwb29sLCByZWxlYXNpbmcgYXNzb2NpYXRlZCByZXNvdXJjZXMuXG4gICAgICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gbWVzc2FnZSBzZW5kaW5nIGlzIGNvbXBsZXRlIHRvIGVuc3VyZSBwcm9wZXIgY2xlYW51cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIE9wdGlvbmFsIGtleS12YWx1ZSBvYmplY3QgY29udGFpbmluZyB0aGUgY29uZmlndXJhdGlvblxuICAgICAqIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcHJvZHVjZXIgdG8gYmUgY2xvc2VkLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgY2xvc2UoY29uZmlndXJhdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogdm9pZCB7XG4gICAgICAgIEthZmthRmFjYWRlLmNsb3NlUHJvZHVjZXIoY29uZmlndXJhdGlvbik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb25maWd1cmVkIEthZmthIHRvcGljIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VuZCBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgVG9waWMge1xuXG4gICAgcHJpdmF0ZSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgY29uZmlndXJhdGlvbjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgbmFtZSBvZiB0aGUgS2Fma2EgdG9waWMuXG4gICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gS2V5LXZhbHVlIG9iamVjdCBmb3IgcHJvZHVjZXIgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihkZXN0aW5hdGlvbjogc3RyaW5nLCBjb25maWd1cmF0aW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIG1lc3NhZ2Ugd2l0aCBhbiBvcHRpb25hbCBrZXkgdG8gdGhlIGNvbmZpZ3VyZWQgS2Fma2EgdG9waWMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgb2YgdGhlIG1lc3NhZ2UuIE1lc3NhZ2VzIHdpdGggdGhlIHNhbWUga2V5IGdvIHRvIHRoZSBzYW1lIHBhcnRpdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VuZChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBLYWZrYUZhY2FkZS5zZW5kKHRoaXMuZGVzdGluYXRpb24sIGtleSwgdmFsdWUsIEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlndXJhdGlvbikpO1xuICAgIH1cbn1cblxuLy8gQHRzLWlnbm9yZVxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdC8vIEB0cy1pZ25vcmVcblx0bW9kdWxlLmV4cG9ydHMgPSBQcm9kdWNlcjtcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFnQ0EsTUFBTSxjQUFjLEtBQUssS0FBSyx3REFBd0Q7QUFNL0UsTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFXbEIsT0FBYyxNQUFNLGFBQXFCLGdCQUEyQyxDQUFDLEdBQVU7QUFDM0YsV0FBTyxJQUFJLE1BQU0sYUFBYSxhQUFhO0FBQUEsRUFDL0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBU0EsT0FBYyxNQUFNLGdCQUEyQyxDQUFDLEdBQVM7QUFDckUsZ0JBQVksY0FBYyxhQUFhO0FBQUEsRUFDM0M7QUFDSjtBQUtBLE1BQU0sTUFBTTtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1SLFlBQVksYUFBcUIsZUFBMEM7QUFDdkUsU0FBSyxjQUFjO0FBQ25CLFNBQUssZ0JBQWdCO0FBQUEsRUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLEtBQUssS0FBYSxPQUFxQjtBQUMxQyxnQkFBWSxLQUFLLEtBQUssYUFBYSxLQUFLLE9BQU8sS0FBSyxVQUFVLEtBQUssYUFBYSxDQUFDO0FBQUEsRUFDckY7QUFDSjtBQUdBLElBQUksT0FBTyxXQUFXLGFBQWE7QUFFbEMsU0FBTyxVQUFVO0FBQ2xCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,79 +0,0 @@
1
- /**
2
- * @module kafka/consumer
3
- * @package @aerokit/sdk/kafka
4
- * @name Consumer
5
- * @overview
6
- *
7
- * The Consumer module provides an API for configuring and managing Kafka consumers, allowing scripts to start and stop listening to specific topics. It abstracts the complexities of Kafka consumer configuration and lifecycle management, enabling developers to easily integrate Kafka message consumption into their applications.
8
- *
9
- * ### Key Features:
10
- * - **Topic Configuration**: The `Consumer.topic` method allows developers to create a topic configuration wrapper with specified destination and properties.
11
- * - **Background Listening**: The `startListening` method starts a background process that listens for messages on the configured topic, invoking a specified handler function for incoming messages.
12
- * - **Graceful Shutdown**: The `stopListening` method allows developers to stop the background listening process based on the topic and configuration.
13
- *
14
- * ### Use Cases:
15
- * - **Real-time Data Processing**: Developers can use this module to consume messages from Kafka topics in real-time, enabling use cases such as stream processing, event-driven architectures, and microservices communication.
16
- * - **Integration with Other Systems**: By consuming Kafka messages, applications can integrate with other systems that produce messages to Kafka, facilitating data flow across different components of an ecosystem.
17
- *
18
- * ### Example Usage:
19
- * ```ts
20
- * import { Consumer } from "@aerokit/sdk/kafka";
21
- *
22
- * // Create a consumer for the "orders" topic with specific configuration
23
- * const ordersConsumer = Consumer.topic("orders", { "group.id": "order-processors" });
24
- *
25
- * // Start listening to the "orders" topic with a message handler and timeout
26
- * ordersConsumer.startListening("handleOrderMessage", 30000);
27
- *
28
- * // Later, stop listening to the "orders" topic
29
- * ordersConsumer.stopListening();
30
- * ```
31
- */
32
- /**
33
- * The Consumer class acts as the main entry point for creating and configuring
34
- * Kafka topic consumers.
35
- */
36
- export declare class Consumer {
37
- /**
38
- * Creates a new topic configuration wrapper that can be used to start or
39
- * stop listening for messages on a Kafka topic.
40
- *
41
- * @param destination The name of the Kafka topic to consume messages from.
42
- * @param configuration Optional key-value object containing Kafka consumer properties
43
- * (e.g., 'group.id', 'auto.offset.reset').
44
- * @returns A {@link Topic} instance configured for the specified destination and properties.
45
- */
46
- static topic(destination: string, configuration?: {
47
- [key: string]: string;
48
- }): Topic;
49
- }
50
- /**
51
- * Represents a configured Kafka topic consumer capable of starting and stopping
52
- * background message listening.
53
- */
54
- declare class Topic {
55
- private destination;
56
- private configuration;
57
- /**
58
- * @param destination The name of the Kafka topic.
59
- * @param configuration Optional key-value object for consumer properties.
60
- */
61
- constructor(destination: string, configuration?: {
62
- [key: string]: string;
63
- });
64
- /**
65
- * Starts listening to the configured topic in a background process.
66
- *
67
- * @param handler The path to the script or function name that will handle the incoming Kafka messages.
68
- * This function should accept two arguments: `message` (string) and `headers` (object).
69
- * @param timeout The maximum amount of time (in milliseconds) the consumer should wait for messages.
70
- */
71
- startListening(handler: string, timeout: number): void;
72
- /**
73
- * Stops the background process that is listening to the configured topic.
74
- * Note: Stopping is based on matching the topic and configuration, so the same
75
- * configuration object used in `startListening` should be used here.
76
- */
77
- stopListening(): void;
78
- }
79
- export {};
@@ -1,15 +0,0 @@
1
- /**
2
- * @module kafka/index
3
- * @package @aerokit/sdk/kafka
4
- * @overview
5
- *
6
- * This module provides functionalities for Kafka integration within the Aerokit SDK. It includes classes and methods for producing and consuming messages from Kafka topics, as well as managing Kafka configurations and connections.
7
- *
8
- * The main components of this module are:
9
- * - Consumer: Represents a Kafka consumer that can subscribe to topics and consume messages.
10
- * - Producer: Represents a Kafka producer that can send messages to topics.
11
- */
12
- export { Consumer as consumer } from "./consumer";
13
- export * from "./consumer";
14
- export { Producer as producer } from "./producer";
15
- export * from "./producer";