@doctorus/common 0.0.2 → 0.0.4

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.
@@ -0,0 +1 @@
1
+ npx lint-staged
@@ -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";
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlcmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FNcUI7QUFMbkIscUdBQUEsUUFBUSxPQUFBO0FBQ1IsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFDaEIsOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIsNkdBQUEsZ0JBQWdCLE9BQUE7QUFFbEIscUNBQW1DO0FBQTFCLGlHQUFBLE1BQU0sT0FBQTtBQUNmLHlDQUF3QztBQUEvQixzR0FBQSxTQUFTLE9BQUE7QUFDbEIsMkNBS3NCO0FBSnBCLHdHQUFBLFVBQVUsT0FBQTtBQUNWLDhHQUFBLGdCQUFnQixPQUFBO0FBQ2hCLHFIQUFBLHVCQUF1QixPQUFBO0FBQ3ZCLG1IQUFBLHFCQUFxQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgUmVzb3VyY2UsXG4gIE1FRElDQUxfUkVTT1VSQ0VTLFxuICBQVUJMSUNfUkVTT1VSQ0VTLFxuICBpc01lZGljYWxSZXNvdXJjZSxcbiAgaXNQdWJsaWNSZXNvdXJjZSxcbn0gZnJvbSBcIi4vcmVzb3VyY2VzXCI7XG5leHBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5leHBvcnQgeyBPcGVyYXRpb24gfSBmcm9tIFwiLi9vcGVyYXRpb25cIjtcbmV4cG9ydCB7XG4gIE9wZXJhdGlvbnMsXG4gIGdldEFsbE9wZXJhdGlvbnMsXG4gIGdldE9wZXJhdGlvbnNCeVJlc291cmNlLFxuICBnZXRPcGVyYXRpb25zQnlBY3Rpb24sXG59IGZyb20gXCIuL3ByZWRlZmluZWRcIjtcbiJdfQ==
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(): string;
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: string;
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL29wZXJhdGlvbnMvb3BlcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFtQztBQUNuQywyQ0FBdUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUE0QkY7SUFDQTtJQTVCbEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBdUI7UUFDdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFFdkMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLG9CQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBdUIsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGdCQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBbUIsQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUF1QixFQUFFLFNBQW1CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsWUFDa0IsUUFBa0IsRUFDbEIsTUFBYztRQURkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUM3QixDQUFDO0lBRUo7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDMUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO1NBQzNCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4REQsOEJBd0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcblxuLyoqXG4gKiBPcGVyYXRpb24gaW4gUkVTT1VSQ0U6QUNUSU9OIGZvcm1hdFxuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBvcGVyYXRpb24gZnJvbSBzdHJpbmdcbiAgICogQHBhcmFtIG9wZXJhdGlvblN0cmluZyAtIFN0cmluZyBpbiBSRVNPVVJDRTpBQ1RJT04gZm9ybWF0XG4gICAqIEByZXR1cm5zIE9wZXJhdGlvbiBpbnN0YW5jZSBvciBudWxsIGlmIGludmFsaWRcbiAgICovXG4gIHN0YXRpYyBmcm9tU3RyaW5nKG9wZXJhdGlvblN0cmluZzogc3RyaW5nKTogT3BlcmF0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgcGFydHMgPSBvcGVyYXRpb25TdHJpbmcuc3BsaXQoXCI6XCIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFtyZXNvdXJjZVN0ciwgYWN0aW9uU3RyXSA9IHBhcnRzO1xuXG4gICAgLy8gVmFsaWRhdGUgcmVzb3VyY2VcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUmVzb3VyY2UpLmluY2x1ZGVzKHJlc291cmNlU3RyIGFzIFJlc291cmNlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgYWN0aW9uXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKEFjdGlvbikuaW5jbHVkZXMoYWN0aW9uU3RyIGFzIEFjdGlvbikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0aW9uKHJlc291cmNlU3RyIGFzIFJlc291cmNlLCBhY3Rpb25TdHIgYXMgQWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbjogQWN0aW9uLFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEdldCBvcGVyYXRpb24gc3RyaW5nIGluIFJFU09VUkNFOkFDVElPTiBmb3JtYXRcbiAgICovXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb3VyY2V9OiR7dGhpcy5hY3Rpb259YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0d28gb3BlcmF0aW9ucyBhcmUgZXF1YWxcbiAgICovXG4gIGVxdWFscyhvdGhlcjogT3BlcmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UgPT09IG90aGVyLnJlc291cmNlICYmIHRoaXMuYWN0aW9uID09PSBvdGhlci5hY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0byBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuICB0b0pTT04oKTogeyByZXNvdXJjZTogUmVzb3VyY2U7IGFjdGlvbjogQWN0aW9uOyBvcGVyYXRpb246IHN0cmluZyB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UsXG4gICAgICBhY3Rpb246IHRoaXMuYWN0aW9uLFxuICAgICAgb3BlcmF0aW9uOiB0aGlzLnRvU3RyaW5nKCksXG4gICAgfTtcbiAgfVxufVxuIl19
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==
package/package.json CHANGED
@@ -17,8 +17,10 @@
17
17
  "eslint-import-resolver-typescript": "^4.4.4",
18
18
  "eslint-plugin-import": "^2.32.0",
19
19
  "eslint-plugin-prettier": "^5.5.4",
20
+ "husky": "^9",
20
21
  "jest": "^30.2.0",
21
22
  "jest-junit": "^16",
23
+ "lint-staged": "^15",
22
24
  "prettier": "^3.6.2",
23
25
  "projen": "^0.98.6",
24
26
  "ts-jest": "^29.4.5",
@@ -30,7 +32,7 @@
30
32
  "publishConfig": {
31
33
  "access": "public"
32
34
  },
33
- "version": "0.0.2",
35
+ "version": "0.0.4",
34
36
  "jest": {
35
37
  "coverageProvider": "v8",
36
38
  "testMatch": [
@@ -83,6 +85,11 @@
83
85
  "require": "./lib/index.js"
84
86
  }
85
87
  },
88
+ "lint-staged": {
89
+ "*.ts": [
90
+ "prettier --write"
91
+ ]
92
+ },
86
93
  "//": "~~ Generated by projen. To modify, edit .projenrc.ts and run \"npx projen\".",
87
94
  "scripts": {
88
95
  "build": "npx projen build",
@@ -92,6 +99,7 @@
92
99
  "default": "npx projen default",
93
100
  "eject": "npx projen eject",
94
101
  "eslint": "npx projen eslint",
102
+ "format": "npx projen format",
95
103
  "package": "npx projen package",
96
104
  "post-compile": "npx projen post-compile",
97
105
  "post-upgrade": "npx projen post-upgrade",