@doctorus/common 0.0.2 → 0.0.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.
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { Resource, MEDICAL_RESOURCES, PUBLIC_RESOURCES, isMedicalResource, isPublicResource, } from "./resources";
|
|
2
2
|
export { Action } from "./actions";
|
|
3
|
-
export { Operation } from "./operation";
|
|
3
|
+
export { Operation, OPERATION, getResourceFromOperation, getActionFromOperation, } from "./operation";
|
|
4
4
|
export { Operations, getAllOperations, getOperationsByResource, getOperationsByAction, } from "./predefined";
|
package/lib/operations/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getOperationsByAction = exports.getOperationsByResource = exports.getAllOperations = exports.Operations = exports.Operation = exports.Action = exports.isPublicResource = exports.isMedicalResource = exports.PUBLIC_RESOURCES = exports.MEDICAL_RESOURCES = exports.Resource = void 0;
|
|
3
|
+
exports.getOperationsByAction = exports.getOperationsByResource = exports.getAllOperations = exports.Operations = exports.getActionFromOperation = exports.getResourceFromOperation = exports.Operation = exports.Action = exports.isPublicResource = exports.isMedicalResource = exports.PUBLIC_RESOURCES = exports.MEDICAL_RESOURCES = exports.Resource = void 0;
|
|
4
4
|
var resources_1 = require("./resources");
|
|
5
5
|
Object.defineProperty(exports, "Resource", { enumerable: true, get: function () { return resources_1.Resource; } });
|
|
6
6
|
Object.defineProperty(exports, "MEDICAL_RESOURCES", { enumerable: true, get: function () { return resources_1.MEDICAL_RESOURCES; } });
|
|
@@ -11,9 +11,11 @@ var actions_1 = require("./actions");
|
|
|
11
11
|
Object.defineProperty(exports, "Action", { enumerable: true, get: function () { return actions_1.Action; } });
|
|
12
12
|
var operation_1 = require("./operation");
|
|
13
13
|
Object.defineProperty(exports, "Operation", { enumerable: true, get: function () { return operation_1.Operation; } });
|
|
14
|
+
Object.defineProperty(exports, "getResourceFromOperation", { enumerable: true, get: function () { return operation_1.getResourceFromOperation; } });
|
|
15
|
+
Object.defineProperty(exports, "getActionFromOperation", { enumerable: true, get: function () { return operation_1.getActionFromOperation; } });
|
|
14
16
|
var predefined_1 = require("./predefined");
|
|
15
17
|
Object.defineProperty(exports, "Operations", { enumerable: true, get: function () { return predefined_1.Operations; } });
|
|
16
18
|
Object.defineProperty(exports, "getAllOperations", { enumerable: true, get: function () { return predefined_1.getAllOperations; } });
|
|
17
19
|
Object.defineProperty(exports, "getOperationsByResource", { enumerable: true, get: function () { return predefined_1.getOperationsByResource; } });
|
|
18
20
|
Object.defineProperty(exports, "getOperationsByAction", { enumerable: true, get: function () { return predefined_1.getOperationsByAction; } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlcmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FNcUI7QUFMbkIscUdBQUEsUUFBUSxPQUFBO0FBQ1IsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFFbEIscUNBQW1DO0FBQTFCLGlHQUFBLE1BQU0sT0FBQTtBQUNmLHlDQUtxQjtBQUpuQixzR0FBQSxTQUFTLE9BQUE7QUFFVCxxSEFBQSx3QkFBd0IsT0FBQTtBQUN4QixtSEFBQSxzQkFBc0IsT0FBQTtBQUV4QiwyQ0FLc0I7QUFKcEIsd0dBQUEsVUFBVSxPQUFBO0FBQ1YsOEdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIscUhBQUEsdUJBQXVCLE9BQUE7QUFDdkIsbUhBQUEscUJBQXFCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBSZXNvdXJjZSxcbiAgTUVESUNBTF9SRVNPVVJDRVMsXG4gIFBVQkxJQ19SRVNPVVJDRVMsXG4gIGlzTWVkaWNhbFJlc291cmNlLFxuICBpc1B1YmxpY1Jlc291cmNlLFxufSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmV4cG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvbnNcIjtcbmV4cG9ydCB7XG4gIE9wZXJhdGlvbixcbiAgT1BFUkFUSU9OLFxuICBnZXRSZXNvdXJjZUZyb21PcGVyYXRpb24sXG4gIGdldEFjdGlvbkZyb21PcGVyYXRpb24sXG59IGZyb20gXCIuL29wZXJhdGlvblwiO1xuZXhwb3J0IHtcbiAgT3BlcmF0aW9ucyxcbiAgZ2V0QWxsT3BlcmF0aW9ucyxcbiAgZ2V0T3BlcmF0aW9uc0J5UmVzb3VyY2UsXG4gIGdldE9wZXJhdGlvbnNCeUFjdGlvbixcbn0gZnJvbSBcIi4vcHJlZGVmaW5lZFwiO1xuIl19
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { Action } from "./actions";
|
|
2
2
|
import { Resource } from "./resources";
|
|
3
|
+
/**
|
|
4
|
+
* Operation string type in RESOURCE:ACTION format
|
|
5
|
+
*/
|
|
6
|
+
export type OPERATION = `${Resource}:${Action}`;
|
|
3
7
|
/**
|
|
4
8
|
* Operation in RESOURCE:ACTION format
|
|
5
9
|
*/
|
|
@@ -16,7 +20,7 @@ export declare class Operation {
|
|
|
16
20
|
/**
|
|
17
21
|
* Get operation string in RESOURCE:ACTION format
|
|
18
22
|
*/
|
|
19
|
-
toString():
|
|
23
|
+
toString(): OPERATION;
|
|
20
24
|
/**
|
|
21
25
|
* Check if two operations are equal
|
|
22
26
|
*/
|
|
@@ -27,6 +31,30 @@ export declare class Operation {
|
|
|
27
31
|
toJSON(): {
|
|
28
32
|
resource: Resource;
|
|
29
33
|
action: Action;
|
|
30
|
-
operation:
|
|
34
|
+
operation: OPERATION;
|
|
31
35
|
};
|
|
32
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract Resource from an OPERATION string
|
|
39
|
+
* @param operation - Operation string in RESOURCE:ACTION format
|
|
40
|
+
* @returns Resource or null if invalid
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* getResourceFromOperation("PATIENT:READ") // Returns: Resource.PATIENT
|
|
45
|
+
* getResourceFromOperation("INVALID:ACTION") // Returns: null
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function getResourceFromOperation(operation: string): Resource | null;
|
|
49
|
+
/**
|
|
50
|
+
* Extract Action from an OPERATION string
|
|
51
|
+
* @param operation - Operation string in RESOURCE:ACTION format
|
|
52
|
+
* @returns Action or null if invalid
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* getActionFromOperation("PATIENT:READ") // Returns: Action.READ
|
|
57
|
+
* getActionFromOperation("PATIENT:INVALID") // Returns: null
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function getActionFromOperation(operation: string): Action | null;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Operation = void 0;
|
|
4
|
+
exports.getResourceFromOperation = getResourceFromOperation;
|
|
5
|
+
exports.getActionFromOperation = getActionFromOperation;
|
|
4
6
|
const actions_1 = require("./actions");
|
|
5
7
|
const resources_1 = require("./resources");
|
|
6
8
|
/**
|
|
@@ -58,4 +60,50 @@ class Operation {
|
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
exports.Operation = Operation;
|
|
61
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Extract Resource from an OPERATION string
|
|
65
|
+
* @param operation - Operation string in RESOURCE:ACTION format
|
|
66
|
+
* @returns Resource or null if invalid
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* getResourceFromOperation("PATIENT:READ") // Returns: Resource.PATIENT
|
|
71
|
+
* getResourceFromOperation("INVALID:ACTION") // Returns: null
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
function getResourceFromOperation(operation) {
|
|
75
|
+
const parts = operation.split(":");
|
|
76
|
+
if (parts.length !== 2) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const [resourceStr] = parts;
|
|
80
|
+
// Validate resource
|
|
81
|
+
if (Object.values(resources_1.Resource).includes(resourceStr)) {
|
|
82
|
+
return resourceStr;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract Action from an OPERATION string
|
|
88
|
+
* @param operation - Operation string in RESOURCE:ACTION format
|
|
89
|
+
* @returns Action or null if invalid
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* getActionFromOperation("PATIENT:READ") // Returns: Action.READ
|
|
94
|
+
* getActionFromOperation("PATIENT:INVALID") // Returns: null
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function getActionFromOperation(operation) {
|
|
98
|
+
const parts = operation.split(":");
|
|
99
|
+
if (parts.length !== 2) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const [, actionStr] = parts;
|
|
103
|
+
// Validate action
|
|
104
|
+
if (Object.values(actions_1.Action).includes(actionStr)) {
|
|
105
|
+
return actionStr;
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvb3BlcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdGQSw0REFjQztBQWFELHdEQWNDO0FBekhELHVDQUFtQztBQUNuQywyQ0FBdUM7QUFPdkM7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUE0QkY7SUFDQTtJQTVCbEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBdUI7UUFDdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFdkMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBdUIsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBbUIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUF1QixFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsWUFDa0IsUUFBa0IsRUFDbEIsTUFBYztRQURkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUM3QixDQUFDO0lBRUo7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBZSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1NBQzNCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4REQsOEJBd0RDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFNBQWlCO0lBQ3hELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7SUFFNUIsb0JBQW9CO0lBQ3BCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxvQkFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQXVCLENBQUMsRUFBRSxDQUFDO1FBQzlELE9BQU8sV0FBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLFNBQWlCO0lBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUU1QixrQkFBa0I7SUFDbEIsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBbUIsQ0FBQyxFQUFFLENBQUM7UUFDeEQsT0FBTyxTQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBSZXNvdXJjZSB9IGZyb20gXCIuL3Jlc291cmNlc1wiO1xuXG4vKipcbiAqIE9wZXJhdGlvbiBzdHJpbmcgdHlwZSBpbiBSRVNPVVJDRTpBQ1RJT04gZm9ybWF0XG4gKi9cbmV4cG9ydCB0eXBlIE9QRVJBVElPTiA9IGAke1Jlc291cmNlfToke0FjdGlvbn1gO1xuXG4vKipcbiAqIE9wZXJhdGlvbiBpbiBSRVNPVVJDRTpBQ1RJT04gZm9ybWF0XG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIG9wZXJhdGlvbiBmcm9tIHN0cmluZ1xuICAgKiBAcGFyYW0gb3BlcmF0aW9uU3RyaW5nIC0gU3RyaW5nIGluIFJFU09VUkNFOkFDVElPTiBmb3JtYXRcbiAgICogQHJldHVybnMgT3BlcmF0aW9uIGluc3RhbmNlIG9yIG51bGwgaWYgaW52YWxpZFxuICAgKi9cbiAgc3RhdGljIGZyb21TdHJpbmcob3BlcmF0aW9uU3RyaW5nOiBzdHJpbmcpOiBPcGVyYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBwYXJ0cyA9IG9wZXJhdGlvblN0cmluZy5zcGxpdChcIjpcIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgW3Jlc291cmNlU3RyLCBhY3Rpb25TdHJdID0gcGFydHM7XG5cbiAgICAvLyBWYWxpZGF0ZSByZXNvdXJjZVxuICAgIGlmICghT2JqZWN0LnZhbHVlcyhSZXNvdXJjZSkuaW5jbHVkZXMocmVzb3VyY2VTdHIgYXMgUmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBhY3Rpb25cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQWN0aW9uKS5pbmNsdWRlcyhhY3Rpb25TdHIgYXMgQWN0aW9uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcGVyYXRpb24ocmVzb3VyY2VTdHIgYXMgUmVzb3VyY2UsIGFjdGlvblN0ciBhcyBBY3Rpb24pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uOiBBY3Rpb24sXG4gICkge31cblxuICAvKipcbiAgICogR2V0IG9wZXJhdGlvbiBzdHJpbmcgaW4gUkVTT1VSQ0U6QUNUSU9OIGZvcm1hdFxuICAgKi9cbiAgdG9TdHJpbmcoKTogT1BFUkFUSU9OIHtcbiAgICByZXR1cm4gYCR7dGhpcy5yZXNvdXJjZX06JHt0aGlzLmFjdGlvbn1gIGFzIE9QRVJBVElPTjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gb3BlcmF0aW9ucyBhcmUgZXF1YWxcbiAgICovXG4gIGVxdWFscyhvdGhlcjogT3BlcmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UgPT09IG90aGVyLnJlc291cmNlICYmIHRoaXMuYWN0aW9uID09PSBvdGhlci5hY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB0b0pTT04oKTogeyByZXNvdXJjZTogUmVzb3VyY2U7IGFjdGlvbjogQWN0aW9uOyBvcGVyYXRpb246IE9QRVJBVElPTiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UsXG4gICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgUmVzb3VyY2UgZnJvbSBhbiBPUEVSQVRJT04gc3RyaW5nXG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIHN0cmluZyBpbiBSRVNPVVJDRTpBQ1RJT04gZm9ybWF0XG4gKiBAcmV0dXJucyBSZXNvdXJjZSBvciBudWxsIGlmIGludmFsaWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGdldFJlc291cmNlRnJvbU9wZXJhdGlvbihcIlBBVElFTlQ6UkVBRFwiKSAvLyBSZXR1cm5zOiBSZXNvdXJjZS5QQVRJRU5UXG4gKiBnZXRSZXNvdXJjZUZyb21PcGVyYXRpb24oXCJJTlZBTElEOkFDVElPTlwiKSAvLyBSZXR1cm5zOiBudWxsXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlRnJvbU9wZXJhdGlvbihvcGVyYXRpb246IHN0cmluZyk6IFJlc291cmNlIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gb3BlcmF0aW9uLnNwbGl0KFwiOlwiKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgW3Jlc291cmNlU3RyXSA9IHBhcnRzO1xuXG4gIC8vIFZhbGlkYXRlIHJlc291cmNlXG4gIGlmIChPYmplY3QudmFsdWVzKFJlc291cmNlKS5pbmNsdWRlcyhyZXNvdXJjZVN0ciBhcyBSZXNvdXJjZSkpIHtcbiAgICByZXR1cm4gcmVzb3VyY2VTdHIgYXMgUmVzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IEFjdGlvbiBmcm9tIGFuIE9QRVJBVElPTiBzdHJpbmdcbiAqIEBwYXJhbSBvcGVyYXRpb24gLSBPcGVyYXRpb24gc3RyaW5nIGluIFJFU09VUkNFOkFDVElPTiBmb3JtYXRcbiAqIEByZXR1cm5zIEFjdGlvbiBvciBudWxsIGlmIGludmFsaWRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGdldEFjdGlvbkZyb21PcGVyYXRpb24oXCJQQVRJRU5UOlJFQURcIikgLy8gUmV0dXJuczogQWN0aW9uLlJFQURcbiAqIGdldEFjdGlvbkZyb21PcGVyYXRpb24oXCJQQVRJRU5UOklOVkFMSURcIikgLy8gUmV0dXJuczogbnVsbFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25Gcm9tT3BlcmF0aW9uKG9wZXJhdGlvbjogc3RyaW5nKTogQWN0aW9uIHwgbnVsbCB7XG4gIGNvbnN0IHBhcnRzID0gb3BlcmF0aW9uLnNwbGl0KFwiOlwiKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgWywgYWN0aW9uU3RyXSA9IHBhcnRzO1xuXG4gIC8vIFZhbGlkYXRlIGFjdGlvblxuICBpZiAoT2JqZWN0LnZhbHVlcyhBY3Rpb24pLmluY2x1ZGVzKGFjdGlvblN0ciBhcyBBY3Rpb24pKSB7XG4gICAgcmV0dXJuIGFjdGlvblN0ciBhcyBBY3Rpb247XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
|