@ultipa-graph/ultipa-driver 6.2.1 → 6.2.3
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/client.d.ts +54 -5
- package/dist/client.js +143 -8
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/proto/gqldb.proto +83 -32
- package/dist/response.d.ts +31 -7
- package/dist/response.js +22 -2
- package/dist/services/converters.js +4 -2
- package/dist/services/data-service.d.ts +1 -9
- package/dist/services/data-service.js +6 -37
- package/dist/services/query-service.js +15 -4
- package/dist/types/typed_value.js +7 -7
- package/package.json +1 -1
|
@@ -116,42 +116,11 @@ class DataService {
|
|
|
116
116
|
skippedCount: parseInt(response.skipped_count || '0', 10),
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
graph_name: graphName,
|
|
125
|
-
node_ids: nodeIds || [],
|
|
126
|
-
labels: labels || [],
|
|
127
|
-
where: where || '',
|
|
128
|
-
};
|
|
129
|
-
const metadata = this.ctx.getSessionMetadata();
|
|
130
|
-
const response = await (0, services_1.promisifyCall)(this.ctx.clients.dataService, 'DeleteNodes', request, metadata);
|
|
131
|
-
return {
|
|
132
|
-
success: response.success || false,
|
|
133
|
-
deletedCount: parseInt(response.deleted_count || '0', 10),
|
|
134
|
-
message: response.message || '',
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Delete edges from a graph.
|
|
139
|
-
*/
|
|
140
|
-
async deleteEdges(graphName, edgeIds, label, where) {
|
|
141
|
-
const request = {
|
|
142
|
-
graph_name: graphName,
|
|
143
|
-
edge_ids: edgeIds || [],
|
|
144
|
-
label: label || '',
|
|
145
|
-
where: where || '',
|
|
146
|
-
};
|
|
147
|
-
const metadata = this.ctx.getSessionMetadata();
|
|
148
|
-
const response = await (0, services_1.promisifyCall)(this.ctx.clients.dataService, 'DeleteEdges', request, metadata);
|
|
149
|
-
return {
|
|
150
|
-
success: response.success || false,
|
|
151
|
-
deletedCount: parseInt(response.deleted_count || '0', 10),
|
|
152
|
-
message: response.message || '',
|
|
153
|
-
};
|
|
154
|
-
}
|
|
119
|
+
// deleteNodes / deleteEdges no longer go through the gRPC DataService
|
|
120
|
+
// DeleteNodes / DeleteEdges RPCs (those proto methods are being removed
|
|
121
|
+
// server-side). The public delete API lives on GqldbClient as
|
|
122
|
+
// deleteNodesByIds / deleteNodesByCondition / deleteEdgesByIds /
|
|
123
|
+
// deleteEdgesByCondition, which emit GQL and return a full Response.
|
|
155
124
|
/**
|
|
156
125
|
* Export graph data in JSON Lines format (streaming).
|
|
157
126
|
*/
|
|
@@ -258,4 +227,4 @@ class DataService {
|
|
|
258
227
|
}
|
|
259
228
|
}
|
|
260
229
|
exports.DataService = DataService;
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2RhdGEtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQWdDSCxvQ0FLQztBQXhCRCxvQ0FBMEQ7QUFDMUQsMENBQTRDO0FBQzVDLDZDQUF3RjtBQUV4RixzQ0FBdUM7QUFFdkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBNkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWpFOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxDQUE0QjtJQUN2RCxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFnQyxFQUFFLFFBQWtDO0lBQ3RGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxD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QUs7cUJBQ3BDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWpURCxrQ0FpVEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGEgc2VydmljZSBoYW5kbGVzIG5vZGUgYW5kIGVkZ2UgaW5zZXJ0L2RlbGV0ZS9leHBvcnQgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7XG4gIEluc2VydE5vZGVzUmVzdWx0LFxuICBJbnNlcnRFZGdlc1Jlc3VsdCxcbiAgRGVsZXRlUmVzdWx0LFxuICBFeHBvcnROb2Rlc1Jlc3VsdCxcbiAgRXhwb3J0RWRnZXNSZXN1bHQsXG4gIEV4cG9ydENvbmZpZyxcbiAgRXhwb3J0Q2h1bmssXG4gIEV4cG9ydFN0YXRzLFxufSBmcm9tICcuLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBOb2RlRGF0YSwgRWRnZURhdGEsIEluc2VydFR5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwcm9taXNpZnlDYWxsIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgbm9kZURhdGFUb1Byb3RvLCBlZGdlRGF0YVRvUHJvdG8sIGNvbnZlcnRQcm90b1Byb3BlcnRpZXMgfSBmcm9tICcuL2NvbnZlcnRlcnMnO1xuaW1wb3J0IHsgSW5zZXJ0Tm9kZXNDb25maWcsIEluc2VydEVkZ2VzQ29uZmlnIH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IEdxbGRiRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG4vKipcbiAqIE1pbmltdW0gc2VydmVyIHZlcnNpb24gdGhhdCBzdXBwb3J0cyBgSW5zZXJ0TW9kZS5VUFNFUlRgIG9uIHRoZSBidWxrLWltcG9ydFxuICogUlBDcy4gT2xkZXIgc2VydmVycyBpZ25vcmUgdGhlIHVua25vd24gZW51bSB2YWx1ZSBhbmQgc2lsZW50bHkgZG93bmdyYWRlXG4gKiB0byBOb3JtYWwsIHN1cmZhY2luZyBhcyBhIGNvbmZ1c2luZyBcImR1cGxpY2F0ZSBfaWRcIiBlcnJvci5cbiAqXG4gKiBTZWUgYEdRTERCLTYuMS4xNDktRFJJVkVSLUFORC1URVNULUhBTkRPRkYtMjAyNi0wNS0wNS5tZGAgKFRlc3QgcGxhbiBzZWN0aW9uIEQpLlxuICovXG5jb25zdCBVUFNFUlRfTUlOX1ZFUlNJT046IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSA9IFs2LCAxLCAxNDldO1xuXG4vKipcbiAqIFBhcnNlIGxlYWRpbmcgbWFqb3IubWlub3IucGF0Y2ggZnJvbSBhIHNlcnZlciB2ZXJzaW9uIHN0cmluZy5cbiAqIFJldHVybnMgWzAsMCwwXSBvbiBwYXJzZSBmYWlsdXJlICh0cmVhdGVkIGFzIFwidW5rbm93biAvIHByZS02LjEuMTQ5XCIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWZXJzaW9uKHM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0ge1xuICBpZiAoIXMpIHJldHVybiBbMCwgMCwgMF07XG4gIGNvbnN0IG0gPSBzLm1hdGNoKC8oXFxkKylcXC4oXFxkKylcXC4oXFxkKykvKTtcbiAgaWYgKCFtKSByZXR1cm4gWzAsIDAsIDBdO1xuICByZXR1cm4gW3BhcnNlSW50KG1bMV0sIDEwKSwgcGFyc2VJbnQobVsyXSwgMTApLCBwYXJzZUludChtWzNdLCAxMCldO1xufVxuXG5mdW5jdGlvbiB2ZXJzaW9uR1RFKGFjdHVhbDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCByZXF1aXJlZDogW251bWJlciwgbnVtYmVyLCBudW1iZXJdKTogYm9vbGVhbiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKGFjdHVhbFtpXSAhPT0gcmVxdWlyZWRbaV0pIHJldHVybiBhY3R1YWxbaV0gPiByZXF1aXJlZFtpXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEYXRhIHNlcnZpY2UgZm9yIGluc2VydGluZywgZGVsZXRpbmcsIGFuZCBleHBvcnRpbmcgZ3JhcGggZGF0YS5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxuXG4gIC8qKlxuICAgKiBUaHJvdyBHcWxkYkVycm9yIGlmIGBtb2RlYCBpcyBVUFNFUlQgYW5kIHRoZSBjb25uZWN0ZWQgc2VydmVyIGlzXG4gICAqIG9sZGVyIHRoYW4gNi4xLjE0OS5cbiAgICpcbiAgICogU2VydmVyID49IDYuMS4xNTQgcmVwb3J0cyB0aGUgcmVhbCB2ZXJzaW9uIGluXG4gICAqIGBMb2dpblJlc3BvbnNlLnNlcnZlcl92ZXJzaW9uYC4gT2xkZXIgc2VydmVycyBlaXRoZXIgcmV0dXJuIGFcbiAgICogcGxhY2Vob2xkZXIgXCIxLjAuMFwiIG9yIGxlYXZlIHRoZSBmaWVsZCBlbXB0eSDigJQgYm90aCBhcmUgbm93IHRyZWF0ZWRcbiAgICogYXMgXCJkZWZpbml0ZWx5IG9sZGVyIHRoYW4gNi4xLjE0OVwiIGFuZCByZWplY3RlZC4gKEVhcmxpZXIgdmVyc2lvbnNcbiAgICogb2YgdGhpcyBnYXRlIGxldCB0aG9zZSBjYXNlcyBwYXNzIHRocm91Z2g7IHRoYXQgd29ya2Fyb3VuZCB3YXNcbiAgICogcmVtb3ZlZCBvbmNlIDYuMS4xNTQrIHN0YXJ0ZWQgcG9wdWxhdGluZyB0aGUgZmllbGQgY29ycmVjdGx5LilcbiAgICovXG4gIHByaXZhdGUgcmVxdWlyZVVwc2VydFN1cHBvcnQobW9kZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKG1vZGUgIT09IEluc2VydFR5cGUuVXBzZXJ0KSByZXR1cm47XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3R4LnNlc3Npb25zLmdldFNlc3Npb24oKTtcbiAgICBjb25zdCBzZXJ2ZXJWZXIgPSBzZXNzaW9uPy5zZXJ2ZXJWZXJzaW9uIHx8ICcnO1xuICAgIGlmICghdmVyc2lvbkdURShwYXJzZVZlcnNpb24oc2VydmVyVmVyKSwgVVBTRVJUX01JTl9WRVJTSU9OKSkge1xuICAgICAgdGhyb3cgbmV3IEdxbGRiRXJyb3IoXG4gICAgICAgIGBJbnNlcnRUeXBlLlVwc2VydCByZXF1aXJlcyBzZXJ2ZXIgPj0gJHtVUFNFUlRfTUlOX1ZFUlNJT04uam9pbignLicpfSwgYCArXG4gICAgICAgIGBjb25uZWN0ZWQgc2VydmVyIHJlcG9ydHMgJHtzZXJ2ZXJWZXIgfHwgJ3Vua25vd24nfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBtdWx0aXBsZSBub2RlcyBpbnRvIGEgZ3JhcGguXG4gICAqL1xuICBhc3luYyBpbnNlcnROb2RlcyhcbiAgICBncmFwaE5hbWU6IHN0cmluZyxcbiAgICBub2RlczogTm9kZURhdGFbXSxcbiAgICBjb25maWc/OiBJbnNlcnROb2Rlc0NvbmZpZ1xuICApOiBQcm9taXNlPEluc2VydE5vZGVzUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlVXBzZXJ0U3VwcG9ydChjb25maWc/Lm9wdGlvbnM/Lm1vZGUgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIGdyYXBoX25hbWU6IGdyYXBoTmFtZSxcbiAgICAgIG5vZGVzOiBub2Rlcy5tYXAoKG4pID0+IG5vZGVEYXRhVG9Qcm90byhuKSksXG4gICAgfTtcblxuICAgIC8vIEFMV0FZUyBzZXQgb3B0aW9ucyAoZXZlbiB3aGVuIHVuZGVmaW5lZCkgdG8gYXZvaWQgZGVwcmVjYXRlZCBidWxrIG9wZXJhdGlvbnMgZXJyb3IuXG4gICAgLy8gYG1vZGVgIGlzIGEgbnVtZXJpYyBlbnVtIGFsaWduZWQgd2l0aCBwcm90byBJbnNlcnRNb2RlIHZhbHVlczsgcGFzcyB0aHJvdWdoIGRpcmVjdGx5LlxuICAgIHJlcXVlc3Qub3B0aW9ucyA9IHsgbW9kZTogKGNvbmZpZz8ub3B0aW9ucz8ubW9kZSA/PyAwKSBhcyBudW1iZXIgfTtcblxuICAgIGlmIChjb25maWc/LmJ1bGtJbXBvcnRTZXNzaW9uSWQpIHtcbiAgICAgIHJlcXVlc3QuYnVsa19pbXBvcnRfc2Vzc2lvbl9pZCA9IGNvbmZpZy5idWxrSW1wb3J0U2Vzc2lvbklkO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmRhdGFTZXJ2aWNlLFxuICAgICAgJ0luc2VydE5vZGVzJyxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogcmVzcG9uc2Uuc3VjY2VzcyB8fCBmYWxzZSxcbiAgICAgIG5vZGVJZHM6IHJlc3BvbnNlLm5vZGVfaWRzIHx8IFtdLFxuICAgICAgbm9kZUNvdW50OiBwYXJzZUludChyZXNwb25zZS5ub2RlX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBtdWx0aXBsZSBlZGdlcyBpbnRvIGEgZ3JhcGguXG4gICAqL1xuICBhc3luYyBpbnNlcnRFZGdlcyhcbiAgICBncmFwaE5hbWU6IHN0cmluZyxcbiAgICBlZGdlczogRWRnZURhdGFbXSxcbiAgICBjb25maWc/OiBJbnNlcnRFZGdlc0NvbmZpZ1xuICApOiBQcm9taXNlPEluc2VydEVkZ2VzUmVzdWx0PiB7XG4gICAgdGhpcy5yZXF1aXJlVXBzZXJ0U3VwcG9ydChjb25maWc/Lm9wdGlvbnM/Lm1vZGUgYXMgbnVtYmVyIHwgdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIGdyYXBoX25hbWU6IGdyYXBoTmFtZSxcbiAgICAgIGVkZ2VzOiBlZGdlcy5tYXAoKGUpID0+IGVkZ2VEYXRhVG9Qcm90byhlKSksXG4gICAgfTtcblxuICAgIC8vIEFMV0FZUyBzZXQgb3B0aW9ucyAoZXZlbiB3aGVuIHVuZGVmaW5lZCkgdG8gYXZvaWQgZGVwcmVjYXRlZCBidWxrIG9wZXJhdGlvbnMgZXJyb3IuXG4gICAgcmVxdWVzdC5vcHRpb25zID0ge1xuICAgICAgc2tpcF9pbnZhbGlkX25vZGVzOiBjb25maWc/Lm9wdGlvbnM/LnNraXBJbnZhbGlkTm9kZXMgfHwgZmFsc2UsXG4gICAgICBtb2RlOiAoY29uZmlnPy5vcHRpb25zPy5tb2RlID8/IDApIGFzIG51bWJlcixcbiAgICB9O1xuXG4gICAgaWYgKGNvbmZpZz8uYnVsa0ltcG9ydFNlc3Npb25JZCkge1xuICAgICAgcmVxdWVzdC5idWxrX2ltcG9ydF9zZXNzaW9uX2lkID0gY29uZmlnLmJ1bGtJbXBvcnRTZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuZGF0YVNlcnZpY2UsXG4gICAgICAnSW5zZXJ0RWRnZXMnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgZWRnZUlkczogcmVzcG9uc2UuZWRnZV9pZHMgfHwgW10sXG4gICAgICBlZGdlQ291bnQ6IHBhcnNlSW50KHJlc3BvbnNlLmVkZ2VfY291bnQgfHwgJzAnLCAxMCksXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlIHx8ICcnLFxuICAgICAgc2tpcHBlZENvdW50OiBwYXJzZUludChyZXNwb25zZS5za2lwcGVkX2NvdW50IHx8ICcwJywgMTApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIG5vZGVzIGZyb20gYSBncmFwaC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZU5vZGVzKFxuICAgIGdyYXBoTmFtZTogc3RyaW5nLFxuICAgIG5vZGVJZHM/OiBzdHJpbmdbXSxcbiAgICBsYWJlbHM/OiBzdHJpbmdbXSxcbiAgICB3aGVyZT86IHN0cmluZ1xuICApOiBQcm9taXNlPERlbGV0ZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBub2RlX2lkczogbm9kZUlkcyB8fCBbXSxcbiAgICAgIGxhYmVsczogbGFiZWxzIHx8IFtdLFxuICAgICAgd2hlcmU6IHdoZXJlIHx8ICcnLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5kYXRhU2VydmljZSxcbiAgICAgICdEZWxldGVOb2RlcycsXG4gICAgICByZXF1ZXN0LFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHJlc3BvbnNlLnN1Y2Nlc3MgfHwgZmFsc2UsXG4gICAgICBkZWxldGVkQ291bnQ6IHBhcnNlSW50KHJlc3BvbnNlLmRlbGV0ZWRfY291bnQgfHwgJzAnLCAxMCksXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlIHx8ICcnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGVkZ2VzIGZyb20gYSBncmFwaC5cbiAgICovXG4gIGFzeW5jIGRlbGV0ZUVkZ2VzKFxuICAgIGdyYXBoTmFtZTogc3RyaW5nLFxuICAgIGVkZ2VJZHM/OiBzdHJpbmdbXSxcbiAgICBsYWJlbD86IHN0cmluZyxcbiAgICB3aGVyZT86IHN0cmluZ1xuICApOiBQcm9taXNlPERlbGV0ZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBlZGdlX2lkczogZWRnZUlkcyB8fCBbXSxcbiAgICAgIGxhYmVsOiBsYWJlbCB8fCAnJyxcbiAgICAgIHdoZXJlOiB3aGVyZSB8fCAnJyxcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuZGF0YVNlcnZpY2UsXG4gICAgICAnRGVsZXRlRWRnZXMnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgZGVsZXRlZENvdW50OiBwYXJzZUludChyZXNwb25zZS5kZWxldGVkX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBncmFwaCBkYXRhIGluIEpTT04gTGluZXMgZm9ybWF0IChzdHJlYW1pbmcpLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0KFxuICAgIGNvbmZpZzogRXhwb3J0Q29uZmlnLFxuICAgIGNhbGxiYWNrPzogKGNodW5rOiBFeHBvcnRDaHVuaykgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgZ3JhcGhfbmFtZTogY29uZmlnLmdyYXBoTmFtZSxcbiAgICAgIGJhdGNoX3NpemU6IGNvbmZpZy5iYXRjaFNpemUgfHwgMCxcbiAgICAgIGV4cG9ydF9ub2RlczogY29uZmlnLmV4cG9ydE5vZGVzICE9PSBmYWxzZSxcbiAgICAgIGV4cG9ydF9lZGdlczogY29uZmlnLmV4cG9ydEVkZ2VzICE9PSBmYWxzZSxcbiAgICAgIG5vZGVfbGFiZWxzOiBjb25maWcubm9kZUxhYmVscyB8fCBbXSxcbiAgICAgIGVkZ2VfbGFiZWxzOiBjb25maWcuZWRnZUxhYmVscyB8fCBbXSxcbiAgICAgIGluY2x1ZGVfbWV0YWRhdGE6IGNvbmZpZy5pbmNsdWRlTWV0YWRhdGEgfHwgZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gKHRoaXMuY3R4LmNsaWVudHMuZGF0YVNlcnZpY2UgYXMgYW55KS5FeHBvcnQocmVxdWVzdCwgbWV0YWRhdGEpO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBsZXQgc3RhdHM6IEV4cG9ydFN0YXRzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0cykge1xuICAgICAgICAgICAgc3RhdHMgPSB7XG4gICAgICAgICAgICAgIG5vZGVzRXhwb3J0ZWQ6IHBhcnNlSW50KHJlc3BvbnNlLnN0YXRzLm5vZGVzX2V4cG9ydGVkIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgICBlZGdlc0V4cG9ydGVkOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5lZGdlc19leHBvcnRlZCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5ieXRlc193cml0dGVuIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5kdXJhdGlvbl9tcyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2h1bms6IEV4cG9ydENodW5rID0ge1xuICAgICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20ocmVzcG9uc2UuZGF0YSB8fCBbXSksXG4gICAgICAgICAgICBpc0ZpbmFsOiByZXNwb25zZS5pc19maW5hbCB8fCBmYWxzZSxcbiAgICAgICAgICAgIHN0YXRzLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYWxsYmFjayhjaHVuayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UuaXNfZmluYWwpIHtcbiAgICAgICAgICBzdHJlYW0uY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHJlamVjdChlcnJvcikpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSBub2RlcyBmcm9tIGEgZ3JhcGguXG4gICAqIEBkZXByZWNhdGVkIFVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkXG4gICAqL1xuICBhc3luYyBleHBvcnROb2RlcyhcbiAgICBncmFwaE5hbWU6IHN0cmluZyxcbiAgICBsYWJlbHM/OiBzdHJpbmdbXSxcbiAgICBsaW1pdDogbnVtYmVyID0gMCxcbiAgICBjYWxsYmFjaz86IChyZXN1bHQ6IEV4cG9ydE5vZGVzUmVzdWx0KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybignZXhwb3J0Tm9kZXMgaXMgZGVwcmVjYXRlZCwgdXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWQnKTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBsYWJlbHM6IGxhYmVscyB8fCBbXSxcbiAgICAgIGxpbWl0OiBsaW1pdC50b1N0cmluZygpLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9ICh0aGlzLmN0eC5jbGllbnRzLmRhdGFTZXJ2aWNlIGFzIGFueSkuRXhwb3J0Tm9kZXMocmVxdWVzdCwgbWV0YWRhdGEpO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICBub2RlczogKHJlc3BvbnNlLm5vZGVzIHx8IFtdKS5tYXAoKG46IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IG4uaWQgfHwgJycsXG4gICAgICAgICAgICAgIGxhYmVsczogbi5sYWJlbHMgfHwgW10sXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbnZlcnRQcm90b1Byb3BlcnRpZXMobi5wcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGhhc01vcmU6IHJlc3BvbnNlLmhhc19tb3JlIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW0gZWRnZXMgZnJvbSBhIGdyYXBoLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWRnZXMoXG4gICAgZ3JhcGhOYW1lOiBzdHJpbmcsXG4gICAgbGFiZWxzPzogc3RyaW5nW10sXG4gICAgbGltaXQ6IG51bWJlciA9IDAsXG4gICAgY2FsbGJhY2s/OiAocmVzdWx0OiBFeHBvcnRFZGdlc1Jlc3VsdCkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ2V4cG9ydEVkZ2VzIGlzIGRlcHJlY2F0ZWQsIHVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkJyk7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgZ3JhcGhfbmFtZTogZ3JhcGhOYW1lLFxuICAgICAgbGFiZWxzOiBsYWJlbHMgfHwgW10sXG4gICAgICBsaW1pdDogbGltaXQudG9TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW0gPSAodGhpcy5jdHguY2xpZW50cy5kYXRhU2VydmljZSBhcyBhbnkpLkV4cG9ydEVkZ2VzKHJlcXVlc3QsIG1ldGFkYXRhKTtcblxuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgZWRnZXM6IChyZXNwb25zZS5lZGdlcyB8fCBbXSkubWFwKChlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBlLmlkIHx8ICcnLFxuICAgICAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCAnJyxcbiAgICAgICAgICAgICAgZnJvbU5vZGVJZDogZS5mcm9tX25vZGVfaWQgfHwgJycsXG4gICAgICAgICAgICAgIHRvTm9kZUlkOiBlLnRvX25vZGVfaWQgfHwgJycsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbnZlcnRQcm90b1Byb3BlcnRpZXMoZS5wcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGhhc01vcmU6IHJlc3BvbnNlLmhhc19tb3JlIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2RhdGEtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQStCSCxvQ0FLQztBQXhCRCxvQ0FBMEQ7QUFDMUQsMENBQTRDO0FBQzVDLDZDQUF3RjtBQUV4RixzQ0FBdUM7QUFFdkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxrQkFBa0IsR0FBNkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWpFOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxDQUE0QjtJQUN2RCxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFnQyxFQUFFLFFBQWtDO0lBQ3RGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxD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QUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpQRCxrQ0F5UEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERhdGEgc2VydmljZSBoYW5kbGVzIG5vZGUgYW5kIGVkZ2UgaW5zZXJ0L2RlbGV0ZS9leHBvcnQgb3BlcmF0aW9ucy5cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7XG4gIEluc2VydE5vZGVzUmVzdWx0LFxuICBJbnNlcnRFZGdlc1Jlc3VsdCxcbiAgRXhwb3J0Tm9kZXNSZXN1bHQsXG4gIEV4cG9ydEVkZ2VzUmVzdWx0LFxuICBFeHBvcnRDb25maWcsXG4gIEV4cG9ydENodW5rLFxuICBFeHBvcnRTdGF0cyxcbn0gZnJvbSAnLi4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgTm9kZURhdGEsIEVkZ2VEYXRhLCBJbnNlcnRUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5Q2FsbCB9IGZyb20gJy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IG5vZGVEYXRhVG9Qcm90bywgZWRnZURhdGFUb1Byb3RvLCBjb252ZXJ0UHJvdG9Qcm9wZXJ0aWVzIH0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcbmltcG9ydCB7IEluc2VydE5vZGVzQ29uZmlnLCBJbnNlcnRFZGdlc0NvbmZpZyB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyBHcWxkYkVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcblxuLyoqXG4gKiBNaW5pbXVtIHNlcnZlciB2ZXJzaW9uIHRoYXQgc3VwcG9ydHMgYEluc2VydE1vZGUuVVBTRVJUYCBvbiB0aGUgYnVsay1pbXBvcnRcbiAqIFJQQ3MuIE9sZGVyIHNlcnZlcnMgaWdub3JlIHRoZSB1bmtub3duIGVudW0gdmFsdWUgYW5kIHNpbGVudGx5IGRvd25ncmFkZVxuICogdG8gTm9ybWFsLCBzdXJmYWNpbmcgYXMgYSBjb25mdXNpbmcgXCJkdXBsaWNhdGUgX2lkXCIgZXJyb3IuXG4gKlxuICogU2VlIGBHUUxEQi02LjEuMTQ5LURSSVZFUi1BTkQtVEVTVC1IQU5ET0ZGLTIwMjYtMDUtMDUubWRgIChUZXN0IHBsYW4gc2VjdGlvbiBEKS5cbiAqL1xuY29uc3QgVVBTRVJUX01JTl9WRVJTSU9OOiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gPSBbNiwgMSwgMTQ5XTtcblxuLyoqXG4gKiBQYXJzZSBsZWFkaW5nIG1ham9yLm1pbm9yLnBhdGNoIGZyb20gYSBzZXJ2ZXIgdmVyc2lvbiBzdHJpbmcuXG4gKiBSZXR1cm5zIFswLDAsMF0gb24gcGFyc2UgZmFpbHVyZSAodHJlYXRlZCBhcyBcInVua25vd24gLyBwcmUtNi4xLjE0OVwiKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVyc2lvbihzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHtcbiAgaWYgKCFzKSByZXR1cm4gWzAsIDAsIDBdO1xuICBjb25zdCBtID0gcy5tYXRjaCgvKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLyk7XG4gIGlmICghbSkgcmV0dXJuIFswLCAwLCAwXTtcbiAgcmV0dXJuIFtwYXJzZUludChtWzFdLCAxMCksIHBhcnNlSW50KG1bMl0sIDEwKSwgcGFyc2VJbnQobVszXSwgMTApXTtcbn1cblxuZnVuY3Rpb24gdmVyc2lvbkdURShhY3R1YWw6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgcmVxdWlyZWQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSk6IGJvb2xlYW4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgIGlmIChhY3R1YWxbaV0gIT09IHJlcXVpcmVkW2ldKSByZXR1cm4gYWN0dWFsW2ldID4gcmVxdWlyZWRbaV07XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRGF0YSBzZXJ2aWNlIGZvciBpbnNlcnRpbmcsIGRlbGV0aW5nLCBhbmQgZXhwb3J0aW5nIGdyYXBoIGRhdGEuXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3R4OiBTZXJ2aWNlQ29udGV4dCkge31cblxuICAvKipcbiAgICogVGhyb3cgR3FsZGJFcnJvciBpZiBgbW9kZWAgaXMgVVBTRVJUIGFuZCB0aGUgY29ubmVjdGVkIHNlcnZlciBpc1xuICAgKiBvbGRlciB0aGFuIDYuMS4xNDkuXG4gICAqXG4gICAqIFNlcnZlciA+PSA2LjEuMTU0IHJlcG9ydHMgdGhlIHJlYWwgdmVyc2lvbiBpblxuICAgKiBgTG9naW5SZXNwb25zZS5zZXJ2ZXJfdmVyc2lvbmAuIE9sZGVyIHNlcnZlcnMgZWl0aGVyIHJldHVybiBhXG4gICAqIHBsYWNlaG9sZGVyIFwiMS4wLjBcIiBvciBsZWF2ZSB0aGUgZmllbGQgZW1wdHkg4oCUIGJvdGggYXJlIG5vdyB0cmVhdGVkXG4gICAqIGFzIFwiZGVmaW5pdGVseSBvbGRlciB0aGFuIDYuMS4xNDlcIiBhbmQgcmVqZWN0ZWQuIChFYXJsaWVyIHZlcnNpb25zXG4gICAqIG9mIHRoaXMgZ2F0ZSBsZXQgdGhvc2UgY2FzZXMgcGFzcyB0aHJvdWdoOyB0aGF0IHdvcmthcm91bmQgd2FzXG4gICAqIHJlbW92ZWQgb25jZSA2LjEuMTU0KyBzdGFydGVkIHBvcHVsYXRpbmcgdGhlIGZpZWxkIGNvcnJlY3RseS4pXG4gICAqL1xuICBwcml2YXRlIHJlcXVpcmVVcHNlcnRTdXBwb3J0KG1vZGU6IG51bWJlciB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGlmIChtb2RlICE9PSBJbnNlcnRUeXBlLlVwc2VydCkgcmV0dXJuO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3Qgc2VydmVyVmVyID0gc2Vzc2lvbj8uc2VydmVyVmVyc2lvbiB8fCAnJztcbiAgICBpZiAoIXZlcnNpb25HVEUocGFyc2VWZXJzaW9uKHNlcnZlclZlciksIFVQU0VSVF9NSU5fVkVSU0lPTikpIHtcbiAgICAgIHRocm93IG5ldyBHcWxkYkVycm9yKFxuICAgICAgICBgSW5zZXJ0VHlwZS5VcHNlcnQgcmVxdWlyZXMgc2VydmVyID49ICR7VVBTRVJUX01JTl9WRVJTSU9OLmpvaW4oJy4nKX0sIGAgK1xuICAgICAgICBgY29ubmVjdGVkIHNlcnZlciByZXBvcnRzICR7c2VydmVyVmVyIHx8ICd1bmtub3duJ31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgbXVsdGlwbGUgbm9kZXMgaW50byBhIGdyYXBoLlxuICAgKi9cbiAgYXN5bmMgaW5zZXJ0Tm9kZXMoXG4gICAgZ3JhcGhOYW1lOiBzdHJpbmcsXG4gICAgbm9kZXM6IE5vZGVEYXRhW10sXG4gICAgY29uZmlnPzogSW5zZXJ0Tm9kZXNDb25maWdcbiAgKTogUHJvbWlzZTxJbnNlcnROb2Rlc1Jlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVVwc2VydFN1cHBvcnQoY29uZmlnPy5vcHRpb25zPy5tb2RlIGFzIG51bWJlciB8IHVuZGVmaW5lZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBub2Rlczogbm9kZXMubWFwKChuKSA9PiBub2RlRGF0YVRvUHJvdG8obikpLFxuICAgIH07XG5cbiAgICAvLyBBTFdBWVMgc2V0IG9wdGlvbnMgKGV2ZW4gd2hlbiB1bmRlZmluZWQpIHRvIGF2b2lkIGRlcHJlY2F0ZWQgYnVsayBvcGVyYXRpb25zIGVycm9yLlxuICAgIC8vIGBtb2RlYCBpcyBhIG51bWVyaWMgZW51bSBhbGlnbmVkIHdpdGggcHJvdG8gSW5zZXJ0TW9kZSB2YWx1ZXM7IHBhc3MgdGhyb3VnaCBkaXJlY3RseS5cbiAgICByZXF1ZXN0Lm9wdGlvbnMgPSB7IG1vZGU6IChjb25maWc/Lm9wdGlvbnM/Lm1vZGUgPz8gMCkgYXMgbnVtYmVyIH07XG5cbiAgICBpZiAoY29uZmlnPy5idWxrSW1wb3J0U2Vzc2lvbklkKSB7XG4gICAgICByZXF1ZXN0LmJ1bGtfaW1wb3J0X3Nlc3Npb25faWQgPSBjb25maWcuYnVsa0ltcG9ydFNlc3Npb25JZDtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5kYXRhU2VydmljZSxcbiAgICAgICdJbnNlcnROb2RlcycsXG4gICAgICByZXF1ZXN0LFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHJlc3BvbnNlLnN1Y2Nlc3MgfHwgZmFsc2UsXG4gICAgICBub2RlSWRzOiByZXNwb25zZS5ub2RlX2lkcyB8fCBbXSxcbiAgICAgIG5vZGVDb3VudDogcGFyc2VJbnQocmVzcG9uc2Uubm9kZV9jb3VudCB8fCAnMCcsIDEwKSxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UgfHwgJycsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgbXVsdGlwbGUgZWRnZXMgaW50byBhIGdyYXBoLlxuICAgKi9cbiAgYXN5bmMgaW5zZXJ0RWRnZXMoXG4gICAgZ3JhcGhOYW1lOiBzdHJpbmcsXG4gICAgZWRnZXM6IEVkZ2VEYXRhW10sXG4gICAgY29uZmlnPzogSW5zZXJ0RWRnZXNDb25maWdcbiAgKTogUHJvbWlzZTxJbnNlcnRFZGdlc1Jlc3VsdD4ge1xuICAgIHRoaXMucmVxdWlyZVVwc2VydFN1cHBvcnQoY29uZmlnPy5vcHRpb25zPy5tb2RlIGFzIG51bWJlciB8IHVuZGVmaW5lZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0OiBhbnkgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBlZGdlczogZWRnZXMubWFwKChlKSA9PiBlZGdlRGF0YVRvUHJvdG8oZSkpLFxuICAgIH07XG5cbiAgICAvLyBBTFdBWVMgc2V0IG9wdGlvbnMgKGV2ZW4gd2hlbiB1bmRlZmluZWQpIHRvIGF2b2lkIGRlcHJlY2F0ZWQgYnVsayBvcGVyYXRpb25zIGVycm9yLlxuICAgIHJlcXVlc3Qub3B0aW9ucyA9IHtcbiAgICAgIHNraXBfaW52YWxpZF9ub2RlczogY29uZmlnPy5vcHRpb25zPy5za2lwSW52YWxpZE5vZGVzIHx8IGZhbHNlLFxuICAgICAgbW9kZTogKGNvbmZpZz8ub3B0aW9ucz8ubW9kZSA/PyAwKSBhcyBudW1iZXIsXG4gICAgfTtcblxuICAgIGlmIChjb25maWc/LmJ1bGtJbXBvcnRTZXNzaW9uSWQpIHtcbiAgICAgIHJlcXVlc3QuYnVsa19pbXBvcnRfc2Vzc2lvbl9pZCA9IGNvbmZpZy5idWxrSW1wb3J0U2Vzc2lvbklkO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmRhdGFTZXJ2aWNlLFxuICAgICAgJ0luc2VydEVkZ2VzJyxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogcmVzcG9uc2Uuc3VjY2VzcyB8fCBmYWxzZSxcbiAgICAgIGVkZ2VJZHM6IHJlc3BvbnNlLmVkZ2VfaWRzIHx8IFtdLFxuICAgICAgZWRnZUNvdW50OiBwYXJzZUludChyZXNwb25zZS5lZGdlX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICAgIHNraXBwZWRDb3VudDogcGFyc2VJbnQocmVzcG9uc2Uuc2tpcHBlZF9jb3VudCB8fCAnMCcsIDEwKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gZGVsZXRlTm9kZXMgLyBkZWxldGVFZGdlcyBubyBsb25nZXIgZ28gdGhyb3VnaCB0aGUgZ1JQQyBEYXRhU2VydmljZVxuICAvLyBEZWxldGVOb2RlcyAvIERlbGV0ZUVkZ2VzIFJQQ3MgKHRob3NlIHByb3RvIG1ldGhvZHMgYXJlIGJlaW5nIHJlbW92ZWRcbiAgLy8gc2VydmVyLXNpZGUpLiBUaGUgcHVibGljIGRlbGV0ZSBBUEkgbGl2ZXMgb24gR3FsZGJDbGllbnQgYXNcbiAgLy8gZGVsZXRlTm9kZXNCeUlkcyAvIGRlbGV0ZU5vZGVzQnlDb25kaXRpb24gLyBkZWxldGVFZGdlc0J5SWRzIC9cbiAgLy8gZGVsZXRlRWRnZXNCeUNvbmRpdGlvbiwgd2hpY2ggZW1pdCBHUUwgYW5kIHJldHVybiBhIGZ1bGwgUmVzcG9uc2UuXG5cbiAgLyoqXG4gICAqIEV4cG9ydCBncmFwaCBkYXRhIGluIEpTT04gTGluZXMgZm9ybWF0IChzdHJlYW1pbmcpLlxuICAgKi9cbiAgYXN5bmMgZXhwb3J0KFxuICAgIGNvbmZpZzogRXhwb3J0Q29uZmlnLFxuICAgIGNhbGxiYWNrPzogKGNodW5rOiBFeHBvcnRDaHVuaykgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgZ3JhcGhfbmFtZTogY29uZmlnLmdyYXBoTmFtZSxcbiAgICAgIGJhdGNoX3NpemU6IGNvbmZpZy5iYXRjaFNpemUgfHwgMCxcbiAgICAgIGV4cG9ydF9ub2RlczogY29uZmlnLmV4cG9ydE5vZGVzICE9PSBmYWxzZSxcbiAgICAgIGV4cG9ydF9lZGdlczogY29uZmlnLmV4cG9ydEVkZ2VzICE9PSBmYWxzZSxcbiAgICAgIG5vZGVfbGFiZWxzOiBjb25maWcubm9kZUxhYmVscyB8fCBbXSxcbiAgICAgIGVkZ2VfbGFiZWxzOiBjb25maWcuZWRnZUxhYmVscyB8fCBbXSxcbiAgICAgIGluY2x1ZGVfbWV0YWRhdGE6IGNvbmZpZy5pbmNsdWRlTWV0YWRhdGEgfHwgZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gKHRoaXMuY3R4LmNsaWVudHMuZGF0YVNlcnZpY2UgYXMgYW55KS5FeHBvcnQocmVxdWVzdCwgbWV0YWRhdGEpO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBsZXQgc3RhdHM6IEV4cG9ydFN0YXRzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0cykge1xuICAgICAgICAgICAgc3RhdHMgPSB7XG4gICAgICAgICAgICAgIG5vZGVzRXhwb3J0ZWQ6IHBhcnNlSW50KHJlc3BvbnNlLnN0YXRzLm5vZGVzX2V4cG9ydGVkIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgICBlZGdlc0V4cG9ydGVkOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5lZGdlc19leHBvcnRlZCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5ieXRlc193cml0dGVuIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgICBkdXJhdGlvbk1zOiBwYXJzZUludChyZXNwb25zZS5zdGF0cy5kdXJhdGlvbl9tcyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2h1bms6IEV4cG9ydENodW5rID0ge1xuICAgICAgICAgICAgZGF0YTogQnVmZmVyLmZyb20ocmVzcG9uc2UuZGF0YSB8fCBbXSksXG4gICAgICAgICAgICBpc0ZpbmFsOiByZXNwb25zZS5pc19maW5hbCB8fCBmYWxzZSxcbiAgICAgICAgICAgIHN0YXRzLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjYWxsYmFjayhjaHVuayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UuaXNfZmluYWwpIHtcbiAgICAgICAgICBzdHJlYW0uY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoKSk7XG4gICAgICBzdHJlYW0ub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHJlamVjdChlcnJvcikpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSBub2RlcyBmcm9tIGEgZ3JhcGguXG4gICAqIEBkZXByZWNhdGVkIFVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkXG4gICAqL1xuICBhc3luYyBleHBvcnROb2RlcyhcbiAgICBncmFwaE5hbWU6IHN0cmluZyxcbiAgICBsYWJlbHM/OiBzdHJpbmdbXSxcbiAgICBsaW1pdDogbnVtYmVyID0gMCxcbiAgICBjYWxsYmFjaz86IChyZXN1bHQ6IEV4cG9ydE5vZGVzUmVzdWx0KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUud2FybignZXhwb3J0Tm9kZXMgaXMgZGVwcmVjYXRlZCwgdXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWQnKTtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBncmFwaF9uYW1lOiBncmFwaE5hbWUsXG4gICAgICBsYWJlbHM6IGxhYmVscyB8fCBbXSxcbiAgICAgIGxpbWl0OiBsaW1pdC50b1N0cmluZygpLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9ICh0aGlzLmN0eC5jbGllbnRzLmRhdGFTZXJ2aWNlIGFzIGFueSkuRXhwb3J0Tm9kZXMocmVxdWVzdCwgbWV0YWRhdGEpO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayh7XG4gICAgICAgICAgICBub2RlczogKHJlc3BvbnNlLm5vZGVzIHx8IFtdKS5tYXAoKG46IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IG4uaWQgfHwgJycsXG4gICAgICAgICAgICAgIGxhYmVsczogbi5sYWJlbHMgfHwgW10sXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbnZlcnRQcm90b1Byb3BlcnRpZXMobi5wcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGhhc01vcmU6IHJlc3BvbnNlLmhhc19tb3JlIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJlYW0gZWRnZXMgZnJvbSBhIGdyYXBoLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWRnZXMoXG4gICAgZ3JhcGhOYW1lOiBzdHJpbmcsXG4gICAgbGFiZWxzPzogc3RyaW5nW10sXG4gICAgbGltaXQ6IG51bWJlciA9IDAsXG4gICAgY2FsbGJhY2s/OiAocmVzdWx0OiBFeHBvcnRFZGdlc1Jlc3VsdCkgPT4gdm9pZFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLndhcm4oJ2V4cG9ydEVkZ2VzIGlzIGRlcHJlY2F0ZWQsIHVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkJyk7XG5cbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgZ3JhcGhfbmFtZTogZ3JhcGhOYW1lLFxuICAgICAgbGFiZWxzOiBsYWJlbHMgfHwgW10sXG4gICAgICBsaW1pdDogbGltaXQudG9TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW0gPSAodGhpcy5jdHguY2xpZW50cy5kYXRhU2VydmljZSBhcyBhbnkpLkV4cG9ydEVkZ2VzKHJlcXVlc3QsIG1ldGFkYXRhKTtcblxuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2soe1xuICAgICAgICAgICAgZWRnZXM6IChyZXNwb25zZS5lZGdlcyB8fCBbXSkubWFwKChlOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgIGlkOiBlLmlkIHx8ICcnLFxuICAgICAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCAnJyxcbiAgICAgICAgICAgICAgZnJvbU5vZGVJZDogZS5mcm9tX25vZGVfaWQgfHwgJycsXG4gICAgICAgICAgICAgIHRvTm9kZUlkOiBlLnRvX25vZGVfaWQgfHwgJycsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGNvbnZlcnRQcm90b1Byb3BlcnRpZXMoZS5wcm9wZXJ0aWVzIHx8IHt9KSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGhhc01vcmU6IHJlc3BvbnNlLmhhc19tb3JlIHx8IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -159,12 +159,23 @@ class QueryService {
|
|
|
159
159
|
const rows = chunks.flatMap(c => c.rows);
|
|
160
160
|
const warnings = chunks.flatMap(c => c.warnings);
|
|
161
161
|
let rowsAffected = 0;
|
|
162
|
+
// Server populates timing / current_graph only on the final batch
|
|
163
|
+
// (has_more=false). Take latest non-zero values.
|
|
164
|
+
let currentGraph = '';
|
|
165
|
+
let timeCostNs = 0, diskCostNs = 0, computeCostNs = 0;
|
|
162
166
|
for (const c of chunks) {
|
|
163
|
-
if (c.rowsAffected)
|
|
167
|
+
if (c.rowsAffected)
|
|
164
168
|
rowsAffected = c.rowsAffected;
|
|
165
|
-
|
|
169
|
+
if (c.currentGraph)
|
|
170
|
+
currentGraph = c.currentGraph;
|
|
171
|
+
if (c.timeCostNs)
|
|
172
|
+
timeCostNs = c.timeCostNs;
|
|
173
|
+
if (c.diskCostNs)
|
|
174
|
+
diskCostNs = c.diskCostNs;
|
|
175
|
+
if (c.computeCostNs)
|
|
176
|
+
computeCostNs = c.computeCostNs;
|
|
166
177
|
}
|
|
167
|
-
return new response_1.Response(columns, rows, rows.length, false, warnings, rowsAffected);
|
|
178
|
+
return new response_1.Response(columns, rows, rows.length, false, warnings, rowsAffected, currentGraph, timeCostNs, diskCostNs, computeCostNs);
|
|
168
179
|
}
|
|
169
180
|
/**
|
|
170
181
|
* Execute a GQL query and stream the results.
|
|
@@ -220,4 +231,4 @@ class QueryService {
|
|
|
220
231
|
}
|
|
221
232
|
}
|
|
222
233
|
exports.QueryService = QueryService;
|
|
223
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLDBDQUF1QztBQUN2QyxzQ0FBOEQ7QUFDOUQsMENBQXdEO0FBQ3hELDZDQUdzQjtBQUd0Qjs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsb0NBQW9DLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDSDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7Ozs7Ozs7O09BUUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFvQjtRQUMzQyxnRUFBZ0U7UUFDaEUsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsd0VBQXdFO1FBQ3hFLHNDQUFzQztRQUV0QyxxREFBcUQ7UUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUFvQjtRQUMzQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksd0JBQWUsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDRCQUFlLEVBQUMsS0FBSyxFQUFFLE9B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SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFhLEVBQUUsTUFBb0I7UUFDL0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsTUFBTSxJQUFJLHdCQUFlLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBQSw0QkFBZSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsb0NBQXlCLEVBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFDN0IsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQXBORCxvQ0FvTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1ZXJ5IHNlcnZpY2UgaGFuZGxlcyBHUUwgcXVlcnkgZXhlY3V0aW9uLlxuICovXG5cbmltcG9ydCAqIGFzIGdycGMgZnJvbSAnQGdycGMvZ3JwYy1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgRW1wdHlRdWVyeUVycm9yLCBRdWVyeUZhaWxlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHByb21pc2lmeUNhbGxXaXRoRGVhZGxpbmUgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBidWlsZEdxbFJlcXVlc3QsXG4gIGNvbnZlcnRHcWxSZXNwb25zZSxcbn0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcbmltcG9ydCB7IFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiBNYXRjaCBhIFNJTkdMRSBgVVNFIEdSQVBIIDxpZGVudD5gIHN0YXRlbWVudCAoY2FzZS1pbnNlbnNpdGl2ZSkgd2l0aFxuICogb3B0aW9uYWwgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgc2VtaWNvbG9ucy4gQ29tcG91bmQgcXVlcmllcyBkbyBub3RcbiAqIG1hdGNoIOKAlCBzZWUgY29tbWVudCBpbiBRdWVyeVNlcnZpY2UuZ3FsIGJlbG93LlxuICovXG5jb25zdCBVU0VfR1JBUEhfUkUgPSAvXlxccypVU0VcXHMrR1JBUEhcXHMrKFxcUys/KVxccyo7KlxccyokL2k7XG5cbi8qKlxuICogUXVlcnkgc2VydmljZSBmb3IgZXhlY3V0aW5nIEdRTCBxdWVyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGltZW91dCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHk6XG4gICAqIDEuIFF1ZXJ5Q29uZmlnLnRpbWVvdXQgKGhpZ2hlc3QgcHJpb3JpdHkpIC0gZXhwbGljaXRseSBzcGVjaWZpZWQgdGltZW91dFxuICAgKiAyLiBDb250ZXh0IGRlYWRsaW5lIChtZWRpdW0gcHJpb3JpdHkpIC0gcmVtYWluaW5nIHRpbWUgZnJvbSBjb250ZXh0IGRlYWRsaW5lXG4gICAqIDMuIGNsaWVudC5jb25maWcudGltZW91dCAoZGVmYXVsdCkgLSBkZWZhdWx0IHRpbWVvdXQgZnJvbSBjbGllbnQgY29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgcXVlcnkgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBUaW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUaW1lb3V0KGNvbmZpZz86IFF1ZXJ5Q29uZmlnKTogbnVtYmVyIHtcbiAgICAvLyBQcmlvcml0eSAxOiBVc2UgZXhwbGljaXRseSBzcGVjaWZpZWQgdGltZW91dCBmcm9tIFF1ZXJ5Q29uZmlnXG4gICAgaWYgKGNvbmZpZz8udGltZW91dCAmJiBjb25maWcudGltZW91dCA+IDApIHtcbiAgICAgIHJldHVybiBjb25maWcudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBQcmlvcml0eSAyOiBDb250ZXh0IGRlYWRsaW5lIHN1cHBvcnRcbiAgICAvLyBOb3RlOiBOb2RlLmpzIFNESyBkb2Vzbid0IGN1cnJlbnRseSBleHBvc2UgY29udGV4dCBkZWFkbGluZSBwYXJhbWV0ZXJcbiAgICAvLyBUaGlzIGlzIGxlZnQgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudFxuXG4gICAgLy8gUHJpb3JpdHkgMzogVXNlIGRlZmF1bHQgdGltZW91dCBmcm9tIGNsaWVudCBjb25maWdcbiAgICByZXR1cm4gdGhpcy5jdHguY29uZmlnLnRpbWVvdXQgfHwgMzAwMDA7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIEdRTCBxdWVyeSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8gR3FsU3RyZWFtICsgY2xpZW50LXNpZGUgYWdncmVnYXRpb24gd2hlbiB0aGUgc2VydmVyXG4gICAqIHJlamVjdHMgdGhlIHJlc3VsdCBzZXQgYXMgdG9vIGxhcmdlIGZvciBub24tc3RyZWFtaW5nIFJQQ1xuICAgKiAoUkVTT1VSQ0VfRVhIQVVTVEVEIHdpdGggXCJ1c2Ugc3RyZWFtaW5nIEFQSVwiIGRldGFpbCkuXG4gICAqL1xuICBhc3luYyBncWwocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVtcHR5UXVlcnlFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbFdpdGhEZWFkbGluZShcbiAgICAgICAgdGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UsXG4gICAgICAgICdHcWwnLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB0aW1lb3V0TXMsXG4gICAgICAgIG1ldGFkYXRhXG4gICAgICApO1xuXG4gICAgICB0aGlzLmN0eC51cGRhdGVBY3Rpdml0eSgpO1xuXG4gICAgICAvLyBQaGFzZSAyIGR1YWwtc291cmNlIGNhY2hlIHVwZGF0ZTogcHJlZmVyIHRoZSBzZXJ2ZXIncyBhdXRob3JpdGF0aXZlXG4gICAgICAvLyBjdXJyZW50X2dyYXBoIChjb3ZlcnMgY29tcG91bmQgcXVlcmllcywgbXVsdGlwbGUgZW1iZWRkZWRcbiAgICAgIC8vIFVTRSBHUkFQSCwgYW5kIGxhc3Qtd3JpdGUtd2lucykgYW5kIGZhbGwgYmFjayB0byB0aGUgc3RyaWN0XG4gICAgICAvLyBjbGllbnQtc2lkZSByZWdleCAvIERST1AgR1JBUEggZGV0ZWN0aW9uIGZvciBvbGRlciBzZXJ2ZXJzIHRoYXRcbiAgICAgIC8vIGRvbid0IHBvcHVsYXRlIHRoZSBmaWVsZC5cbiAgICAgIGNvbnN0IHNlcnZlckN1cnJlbnQ6IHN0cmluZyA9IChyZXNwb25zZSBhcyBhbnkpLmN1cnJlbnRfZ3JhcGggfHwgJyc7XG4gICAgICBpZiAoc2VydmVyQ3VycmVudCkge1xuICAgICAgICB0aGlzLmN0eC5zZXNzaW9ucy5zZXREZWZhdWx0R3JhcGgoc2VydmVyQ3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtID0gcXVlcnkubWF0Y2goVVNFX0dSQVBIX1JFKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAvLyBDb21wb3VuZCBxdWVyaWVzIHRoYXQgbWVyZWx5ICpzdGFydCogd2l0aCBgVVNFIEdSQVBIYCBtdXN0XG4gICAgICAgICAgLy8gTk9UIHBvaXNvbiB0aGUgZGVmYXVsdC1ncmFwaCBzdGF0ZSDigJQgb25seSBzaW5nbGUtc3RhdGVtZW50XG4gICAgICAgICAgLy8gZm9ybSBtYXRjaGVzLlxuICAgICAgICAgIHRoaXMuY3R4LnNlc3Npb25zLnNldERlZmF1bHRHcmFwaChtWzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSb3VuZC0yMSAjNTogYSBzdWNjZXNzZnVsIERST1AgR1JBUEggWCBtdXN0IGNsZWFyIG91ciBjYWNoZWRcbiAgICAgICAgICAvLyBkZWZhdWx0X2dyYXBoIGlmIGl0IHBvaW50ZWQgYXQgWC4gTmV3IHNlcnZlcnMgaGFuZGxlIHRoaXNcbiAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlbHkgdmlhIGN1cnJlbnRfZ3JhcGggKHJldHVybnMgXCJcIiBhZnRlciBzZWxmLWRyb3ApXG4gICAgICAgICAgLy8g4oCUIHRoaXMgYnJhbmNoIG9ubHkgZmlyZXMgb24gb2xkZXIgc2VydmVycyB3aXRob3V0IHRoZSBmaWVsZC5cbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gcXVlcnkudHJpbSgpO1xuICAgICAgICAgIGlmICh0cmltbWVkLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aCgnRFJPUCBHUkFQSCcpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdEUk9QIEdSQVBIJy5sZW5ndGgpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgaWYgKHJlc3QudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKCdJRiBFWElTVFMnKSkge1xuICAgICAgICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHJpbmcoJ0lGIEVYSVNUUycubGVuZ3RoKS50cmltU3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyb3BwZWQgPSByZXN0LnJlcGxhY2UoLzsrJC8sICcnKS50cmltKCkucmVwbGFjZSgvXltgXCInXSt8W2BcIiddKyQvZywgJycpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3R4LnNlc3Npb25zLmdldERlZmF1bHRHcmFwaCgpO1xuICAgICAgICAgICAgaWYgKGRyb3BwZWQgJiYgY3VycmVudCAmJiBkcm9wcGVkID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuY3R4LnNlc3Npb25zLnNldERlZmF1bHRHcmFwaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0R3FsUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3I/LmNvZGUgPT09IGdycGMuc3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCAmJlxuICAgICAgICB0eXBlb2YgZXJyb3I/LmRldGFpbHMgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGVycm9yLmRldGFpbHMuaW5jbHVkZXMoJ3VzZSBzdHJlYW1pbmcgQVBJJylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncWxTdHJlYW1Db2xsZWN0KHF1ZXJ5LCBjb25maWcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RmFpbGVkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCAnUXVlcnkgZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBHcWxTdHJlYW0gYW5kIGFnZ3JlZ2F0ZSBjaHVua3MgaW50byBhIHNpbmdsZSBSZXNwb25zZS5cbiAgICpcbiAgICogVXNlZCBhcyBmYWxsYmFjayBmcm9tIGdxbCgpIHdoZW4gdGhlIHNlcnZlciByZWplY3RzIHRoZSByZXN1bHQgc2V0XG4gICAqIGFzIHRvbyBsYXJnZSBmb3Igbm9uLXN0cmVhbWluZyBSUEMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdxbFN0cmVhbUNvbGxlY3QocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2h1bmtzOiBSZXNwb25zZVtdID0gW107XG4gICAgYXdhaXQgdGhpcy5ncWxTdHJlYW0ocXVlcnksIGNvbmZpZywgKGNodW5rOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH0pO1xuXG4gICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoW10sIFtdLCAwLCBmYWxzZSwgW10sIDApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbnMgPSBjaHVua3NbMF0uY29sdW1ucztcbiAgICBjb25zdCByb3dzID0gY2h1bmtzLmZsYXRNYXAoYyA9PiBjLnJvd3MpO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gY2h1bmtzLmZsYXRNYXAoYyA9PiBjLndhcm5pbmdzKTtcbiAgICBsZXQgcm93c0FmZmVjdGVkID0gMDtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY2h1bmtzKSB7XG4gICAgICBpZiAoYy5yb3dzQWZmZWN0ZWQpIHtcbiAgICAgICAgcm93c0FmZmVjdGVkID0gYy5yb3dzQWZmZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UoY29sdW1ucywgcm93cywgcm93cy5sZW5ndGgsIGZhbHNlLCB3YXJuaW5ncywgcm93c0FmZmVjdGVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgR1FMIHF1ZXJ5IGFuZCBzdHJlYW0gdGhlIHJlc3VsdHMuXG4gICAqL1xuICBhc3luYyBncWxTdHJlYW0oXG4gICAgcXVlcnk6IHN0cmluZyxcbiAgICBjb25maWc/OiBRdWVyeUNvbmZpZyxcbiAgICBjYWxsYmFjaz86IChyZXNwb25zZTogUmVzcG9uc2UpID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVtcHR5UXVlcnlFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgdGltZW91dE1zID0gdGhpcy5jYWxjdWxhdGVUaW1lb3V0KGNvbmZpZyk7XG4gICAgY29uc3QgZGVhZGxpbmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgdGltZW91dE1zKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzdHJlYW0gPSAodGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UgYXMgYW55KS5HcWxTdHJlYW0oXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB7IGRlYWRsaW5lIH1cbiAgICAgICk7XG5cbiAgICAgIHN0cmVhbS5vbignZGF0YScsIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKGNvbnZlcnRHcWxSZXNwb25zZShyZXNwb25zZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtLm9uKCdlbmQnLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiByZWplY3QobmV3IFF1ZXJ5RmFpbGVkRXJyb3IoZXJyb3IubWVzc2FnZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGV4ZWN1dGlvbiBwbGFuIGZvciBhIHF1ZXJ5LlxuICAgKi9cbiAgYXN5bmMgZXhwbGFpbihxdWVyeTogc3RyaW5nLCBjb25maWc/OiBRdWVyeUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVtcHR5UXVlcnlFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgdGltZW91dE1zID0gdGhpcy5jYWxjdWxhdGVUaW1lb3V0KGNvbmZpZyk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGxXaXRoRGVhZGxpbmUoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLnF1ZXJ5U2VydmljZSxcbiAgICAgICdFeHBsYWluJyxcbiAgICAgIHJlcXVlc3QsXG4gICAgICB0aW1lb3V0TXMsXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2UucGxhbiB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgcXVlcnkgd2l0aCBwcm9maWxpbmcgYW5kIHJldHVybiBzdGF0aXN0aWNzLlxuICAgKi9cbiAgYXN5bmMgcHJvZmlsZShxdWVyeTogc3RyaW5nLCBjb25maWc/OiBRdWVyeUNvbmZpZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVtcHR5UXVlcnlFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgdGltZW91dE1zID0gdGhpcy5jYWxjdWxhdGVUaW1lb3V0KGNvbmZpZyk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGxXaXRoRGVhZGxpbmUoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLnF1ZXJ5U2VydmljZSxcbiAgICAgICdQcm9maWxlJyxcbiAgICAgIHJlcXVlc3QsXG4gICAgICB0aW1lb3V0TXMsXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2UucHJvZmlsZSB8fCAnJztcbiAgfVxufVxuIl19
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9xdWVyeS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsb0RBQXNDO0FBRXRDLDBDQUF1QztBQUN2QyxzQ0FBOEQ7QUFDOUQsMENBQXdEO0FBQ3hELDZDQUdzQjtBQUd0Qjs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsb0NBQW9DLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDSDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7Ozs7Ozs7O09BUUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFvQjtRQUMzQyxnRUFBZ0U7UUFDaEUsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDMUMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsd0VBQXdFO1FBQ3hFLHNDQUFzQztRQUV0QyxxREFBcUQ7UUFDckQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQWEsRUFBRSxNQUFvQjtRQUMzQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksd0JBQWUsRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFBLDRCQUFlLEVBQUMsS0FBSyxFQUFFLE9B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U0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLEVBQ1QsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQTNORCxvQ0EyTkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1ZXJ5IHNlcnZpY2UgaGFuZGxlcyBHUUwgcXVlcnkgZXhlY3V0aW9uLlxuICovXG5cbmltcG9ydCAqIGFzIGdycGMgZnJvbSAnQGdycGMvZ3JwYy1qcyc7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgRW1wdHlRdWVyeUVycm9yLCBRdWVyeUZhaWxlZEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHByb21pc2lmeUNhbGxXaXRoRGVhZGxpbmUgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICBidWlsZEdxbFJlcXVlc3QsXG4gIGNvbnZlcnRHcWxSZXNwb25zZSxcbn0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcbmltcG9ydCB7IFF1ZXJ5Q29uZmlnIH0gZnJvbSAnLi4vY2xpZW50JztcblxuLyoqXG4gKiBNYXRjaCBhIFNJTkdMRSBgVVNFIEdSQVBIIDxpZGVudD5gIHN0YXRlbWVudCAoY2FzZS1pbnNlbnNpdGl2ZSkgd2l0aFxuICogb3B0aW9uYWwgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgc2VtaWNvbG9ucy4gQ29tcG91bmQgcXVlcmllcyBkbyBub3RcbiAqIG1hdGNoIOKAlCBzZWUgY29tbWVudCBpbiBRdWVyeVNlcnZpY2UuZ3FsIGJlbG93LlxuICovXG5jb25zdCBVU0VfR1JBUEhfUkUgPSAvXlxccypVU0VcXHMrR1JBUEhcXHMrKFxcUys/KVxccyo7KlxccyokL2k7XG5cbi8qKlxuICogUXVlcnkgc2VydmljZSBmb3IgZXhlY3V0aW5nIEdRTCBxdWVyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgUXVlcnlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGltZW91dCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpb3JpdHk6XG4gICAqIDEuIFF1ZXJ5Q29uZmlnLnRpbWVvdXQgKGhpZ2hlc3QgcHJpb3JpdHkpIC0gZXhwbGljaXRseSBzcGVjaWZpZWQgdGltZW91dFxuICAgKiAyLiBDb250ZXh0IGRlYWRsaW5lIChtZWRpdW0gcHJpb3JpdHkpIC0gcmVtYWluaW5nIHRpbWUgZnJvbSBjb250ZXh0IGRlYWRsaW5lXG4gICAqIDMuIGNsaWVudC5jb25maWcudGltZW91dCAoZGVmYXVsdCkgLSBkZWZhdWx0IHRpbWVvdXQgZnJvbSBjbGllbnQgY29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgT3B0aW9uYWwgcXVlcnkgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBUaW1lb3V0IGluIG1pbGxpc2Vjb25kc1xuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVUaW1lb3V0KGNvbmZpZz86IFF1ZXJ5Q29uZmlnKTogbnVtYmVyIHtcbiAgICAvLyBQcmlvcml0eSAxOiBVc2UgZXhwbGljaXRseSBzcGVjaWZpZWQgdGltZW91dCBmcm9tIFF1ZXJ5Q29uZmlnXG4gICAgaWYgKGNvbmZpZz8udGltZW91dCAmJiBjb25maWcudGltZW91dCA+IDApIHtcbiAgICAgIHJldHVybiBjb25maWcudGltZW91dDtcbiAgICB9XG5cbiAgICAvLyBQcmlvcml0eSAyOiBDb250ZXh0IGRlYWRsaW5lIHN1cHBvcnRcbiAgICAvLyBOb3RlOiBOb2RlLmpzIFNESyBkb2Vzbid0IGN1cnJlbnRseSBleHBvc2UgY29udGV4dCBkZWFkbGluZSBwYXJhbWV0ZXJcbiAgICAvLyBUaGlzIGlzIGxlZnQgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudFxuXG4gICAgLy8gUHJpb3JpdHkgMzogVXNlIGRlZmF1bHQgdGltZW91dCBmcm9tIGNsaWVudCBjb25maWdcbiAgICByZXR1cm4gdGhpcy5jdHguY29uZmlnLnRpbWVvdXQgfHwgMzAwMDA7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIEdRTCBxdWVyeSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqXG4gICAqIEZhbGxzIGJhY2sgdG8gR3FsU3RyZWFtICsgY2xpZW50LXNpZGUgYWdncmVnYXRpb24gd2hlbiB0aGUgc2VydmVyXG4gICAqIHJlamVjdHMgdGhlIHJlc3VsdCBzZXQgYXMgdG9vIGxhcmdlIGZvciBub24tc3RyZWFtaW5nIFJQQ1xuICAgKiAoUkVTT1VSQ0VfRVhIQVVTVEVEIHdpdGggXCJ1c2Ugc3RyZWFtaW5nIEFQSVwiIGRldGFpbCkuXG4gICAqL1xuICBhc3luYyBncWwocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEVtcHR5UXVlcnlFcnJvcigpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmN0eC5zZXNzaW9ucy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGJ1aWxkR3FsUmVxdWVzdChxdWVyeSwgc2Vzc2lvbiwgdGhpcy5jdHguY29uZmlnLCBjb25maWcpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbFdpdGhEZWFkbGluZShcbiAgICAgICAgdGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UsXG4gICAgICAgICdHcWwnLFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICB0aW1lb3V0TXMsXG4gICAgICAgIG1ldGFkYXRhXG4gICAgICApO1xuXG4gICAgICB0aGlzLmN0eC51cGRhdGVBY3Rpdml0eSgpO1xuXG4gICAgICAvLyBQaGFzZSAyIGR1YWwtc291cmNlIGNhY2hlIHVwZGF0ZTogcHJlZmVyIHRoZSBzZXJ2ZXIncyBhdXRob3JpdGF0aXZlXG4gICAgICAvLyBjdXJyZW50X2dyYXBoIChjb3ZlcnMgY29tcG91bmQgcXVlcmllcywgbXVsdGlwbGUgZW1iZWRkZWRcbiAgICAgIC8vIFVTRSBHUkFQSCwgYW5kIGxhc3Qtd3JpdGUtd2lucykgYW5kIGZhbGwgYmFjayB0byB0aGUgc3RyaWN0XG4gICAgICAvLyBjbGllbnQtc2lkZSByZWdleCAvIERST1AgR1JBUEggZGV0ZWN0aW9uIGZvciBvbGRlciBzZXJ2ZXJzIHRoYXRcbiAgICAgIC8vIGRvbid0IHBvcHVsYXRlIHRoZSBmaWVsZC5cbiAgICAgIGNvbnN0IHNlcnZlckN1cnJlbnQ6IHN0cmluZyA9IChyZXNwb25zZSBhcyBhbnkpLmN1cnJlbnRfZ3JhcGggfHwgJyc7XG4gICAgICBpZiAoc2VydmVyQ3VycmVudCkge1xuICAgICAgICB0aGlzLmN0eC5zZXNzaW9ucy5zZXREZWZhdWx0R3JhcGgoc2VydmVyQ3VycmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtID0gcXVlcnkubWF0Y2goVVNFX0dSQVBIX1JFKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAvLyBDb21wb3VuZCBxdWVyaWVzIHRoYXQgbWVyZWx5ICpzdGFydCogd2l0aCBgVVNFIEdSQVBIYCBtdXN0XG4gICAgICAgICAgLy8gTk9UIHBvaXNvbiB0aGUgZGVmYXVsdC1ncmFwaCBzdGF0ZSDigJQgb25seSBzaW5nbGUtc3RhdGVtZW50XG4gICAgICAgICAgLy8gZm9ybSBtYXRjaGVzLlxuICAgICAgICAgIHRoaXMuY3R4LnNlc3Npb25zLnNldERlZmF1bHRHcmFwaChtWzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBSb3VuZC0yMSAjNTogYSBzdWNjZXNzZnVsIERST1AgR1JBUEggWCBtdXN0IGNsZWFyIG91ciBjYWNoZWRcbiAgICAgICAgICAvLyBkZWZhdWx0X2dyYXBoIGlmIGl0IHBvaW50ZWQgYXQgWC4gTmV3IHNlcnZlcnMgaGFuZGxlIHRoaXNcbiAgICAgICAgICAvLyBhdXRob3JpdGF0aXZlbHkgdmlhIGN1cnJlbnRfZ3JhcGggKHJldHVybnMgXCJcIiBhZnRlciBzZWxmLWRyb3ApXG4gICAgICAgICAgLy8g4oCUIHRoaXMgYnJhbmNoIG9ubHkgZmlyZXMgb24gb2xkZXIgc2VydmVycyB3aXRob3V0IHRoZSBmaWVsZC5cbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gcXVlcnkudHJpbSgpO1xuICAgICAgICAgIGlmICh0cmltbWVkLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aCgnRFJPUCBHUkFQSCcpKSB7XG4gICAgICAgICAgICBsZXQgcmVzdCA9IHRyaW1tZWQuc3Vic3RyaW5nKCdEUk9QIEdSQVBIJy5sZW5ndGgpLnRyaW1TdGFydCgpO1xuICAgICAgICAgICAgaWYgKHJlc3QudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKCdJRiBFWElTVFMnKSkge1xuICAgICAgICAgICAgICByZXN0ID0gcmVzdC5zdWJzdHJpbmcoJ0lGIEVYSVNUUycubGVuZ3RoKS50cmltU3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRyb3BwZWQgPSByZXN0LnJlcGxhY2UoLzsrJC8sICcnKS50cmltKCkucmVwbGFjZSgvXltgXCInXSt8W2BcIiddKyQvZywgJycpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3R4LnNlc3Npb25zLmdldERlZmF1bHRHcmFwaCgpO1xuICAgICAgICAgICAgaWYgKGRyb3BwZWQgJiYgY3VycmVudCAmJiBkcm9wcGVkID09PSBjdXJyZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMuY3R4LnNlc3Npb25zLnNldERlZmF1bHRHcmFwaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb252ZXJ0R3FsUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3I/LmNvZGUgPT09IGdycGMuc3RhdHVzLlJFU09VUkNFX0VYSEFVU1RFRCAmJlxuICAgICAgICB0eXBlb2YgZXJyb3I/LmRldGFpbHMgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIGVycm9yLmRldGFpbHMuaW5jbHVkZXMoJ3VzZSBzdHJlYW1pbmcgQVBJJylcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncWxTdHJlYW1Db2xsZWN0KHF1ZXJ5LCBjb25maWcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFF1ZXJ5RmFpbGVkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCAnUXVlcnkgZmFpbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBHcWxTdHJlYW0gYW5kIGFnZ3JlZ2F0ZSBjaHVua3MgaW50byBhIHNpbmdsZSBSZXNwb25zZS5cbiAgICpcbiAgICogVXNlZCBhcyBmYWxsYmFjayBmcm9tIGdxbCgpIHdoZW4gdGhlIHNlcnZlciByZWplY3RzIHRoZSByZXN1bHQgc2V0XG4gICAqIGFzIHRvbyBsYXJnZSBmb3Igbm9uLXN0cmVhbWluZyBSUEMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdxbFN0cmVhbUNvbGxlY3QocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2h1bmtzOiBSZXNwb25zZVtdID0gW107XG4gICAgYXdhaXQgdGhpcy5ncWxTdHJlYW0ocXVlcnksIGNvbmZpZywgKGNodW5rOiBSZXNwb25zZSkgPT4ge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH0pO1xuXG4gICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoW10sIFtdLCAwLCBmYWxzZSwgW10sIDApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbnMgPSBjaHVua3NbMF0uY29sdW1ucztcbiAgICBjb25zdCByb3dzID0gY2h1bmtzLmZsYXRNYXAoYyA9PiBjLnJvd3MpO1xuICAgIGNvbnN0IHdhcm5pbmdzID0gY2h1bmtzLmZsYXRNYXAoYyA9PiBjLndhcm5pbmdzKTtcbiAgICBsZXQgcm93c0FmZmVjdGVkID0gMDtcbiAgICAvLyBTZXJ2ZXIgcG9wdWxhdGVzIHRpbWluZyAvIGN1cnJlbnRfZ3JhcGggb25seSBvbiB0aGUgZmluYWwgYmF0Y2hcbiAgICAvLyAoaGFzX21vcmU9ZmFsc2UpLiBUYWtlIGxhdGVzdCBub24temVybyB2YWx1ZXMuXG4gICAgbGV0IGN1cnJlbnRHcmFwaCA9ICcnO1xuICAgIGxldCB0aW1lQ29zdE5zID0gMCwgZGlza0Nvc3ROcyA9IDAsIGNvbXB1dGVDb3N0TnMgPSAwO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaHVua3MpIHtcbiAgICAgIGlmIChjLnJvd3NBZmZlY3RlZCkgcm93c0FmZmVjdGVkID0gYy5yb3dzQWZmZWN0ZWQ7XG4gICAgICBpZiAoYy5jdXJyZW50R3JhcGgpIGN1cnJlbnRHcmFwaCA9IGMuY3VycmVudEdyYXBoO1xuICAgICAgaWYgKGMudGltZUNvc3ROcykgdGltZUNvc3ROcyA9IGMudGltZUNvc3ROcztcbiAgICAgIGlmIChjLmRpc2tDb3N0TnMpIGRpc2tDb3N0TnMgPSBjLmRpc2tDb3N0TnM7XG4gICAgICBpZiAoYy5jb21wdXRlQ29zdE5zKSBjb21wdXRlQ29zdE5zID0gYy5jb21wdXRlQ29zdE5zO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKGNvbHVtbnMsIHJvd3MsIHJvd3MubGVuZ3RoLCBmYWxzZSwgd2FybmluZ3MsXG4gICAgICByb3dzQWZmZWN0ZWQsIGN1cnJlbnRHcmFwaCwgdGltZUNvc3ROcywgZGlza0Nvc3ROcywgY29tcHV0ZUNvc3ROcyk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIEdRTCBxdWVyeSBhbmQgc3RyZWFtIHRoZSByZXN1bHRzLlxuICAgKi9cbiAgYXN5bmMgZ3FsU3RyZWFtKFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgY29uZmlnPzogUXVlcnlDb25maWcsXG4gICAgY2FsbGJhY2s/OiAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBFbXB0eVF1ZXJ5RXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMuZ2V0U2Vzc2lvbigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZEdxbFJlcXVlc3QocXVlcnksIHNlc3Npb24sIHRoaXMuY3R4LmNvbmZpZywgY29uZmlnKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xuICAgIGNvbnN0IGRlYWRsaW5lID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIHRpbWVvdXRNcyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc3RyZWFtID0gKHRoaXMuY3R4LmNsaWVudHMucXVlcnlTZXJ2aWNlIGFzIGFueSkuR3FsU3RyZWFtKFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgeyBkZWFkbGluZSB9XG4gICAgICApO1xuXG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmN0eC51cGRhdGVBY3Rpdml0eSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjYWxsYmFjayhjb252ZXJ0R3FsUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN0cmVhbS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgIHN0cmVhbS5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KG5ldyBRdWVyeUZhaWxlZEVycm9yKGVycm9yLm1lc3NhZ2UpKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBleGVjdXRpb24gcGxhbiBmb3IgYSBxdWVyeS5cbiAgICovXG4gIGFzeW5jIGV4cGxhaW4ocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBFbXB0eVF1ZXJ5RXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMuZ2V0U2Vzc2lvbigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZEdxbFJlcXVlc3QocXVlcnksIHNlc3Npb24sIHRoaXMuY3R4LmNvbmZpZywgY29uZmlnKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsV2l0aERlYWRsaW5lKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UsXG4gICAgICAnRXhwbGFpbicsXG4gICAgICByZXF1ZXN0LFxuICAgICAgdGltZW91dE1zLFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLnBsYW4gfHwgJyc7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHF1ZXJ5IHdpdGggcHJvZmlsaW5nIGFuZCByZXR1cm4gc3RhdGlzdGljcy5cbiAgICovXG4gIGFzeW5jIHByb2ZpbGUocXVlcnk6IHN0cmluZywgY29uZmlnPzogUXVlcnlDb25maWcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBFbXB0eVF1ZXJ5RXJyb3IoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5jdHguc2Vzc2lvbnMuZ2V0U2Vzc2lvbigpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSBidWlsZEdxbFJlcXVlc3QocXVlcnksIHNlc3Npb24sIHRoaXMuY3R4LmNvbmZpZywgY29uZmlnKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IHRoaXMuY2FsY3VsYXRlVGltZW91dChjb25maWcpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsV2l0aERlYWRsaW5lKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5xdWVyeVNlcnZpY2UsXG4gICAgICAnUHJvZmlsZScsXG4gICAgICByZXF1ZXN0LFxuICAgICAgdGltZW91dE1zLFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlLnByb2ZpbGUgfHwgJyc7XG4gIH1cbn1cbiJdfQ==
|