@decaf-ts/utils 0.2.6 → 0.2.8
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/LICENSE.md +0 -0
- package/README.md +0 -0
- package/bin/build-scripts.cjs +1885 -1423
- package/bin/tag-release.cjs +1876 -1420
- package/bin/tag-release.sh +0 -0
- package/bin/update-scripts.cjs +1881 -1425
- package/dist/assets/slogans.json +0 -0
- package/dist/utils.cjs +86 -689
- package/dist/utils.esm.cjs +78 -674
- package/lib/assets/slogans.json +0 -0
- package/lib/bin/build-scripts.d.ts +0 -0
- package/lib/bin/tag-release.d.ts +0 -0
- package/lib/bin/update-scripts.d.ts +0 -0
- package/lib/cli/command.cjs +6 -7
- package/lib/cli/command.d.ts +5 -5
- package/lib/cli/commands/build-scripts.cjs +9 -3
- package/lib/cli/commands/build-scripts.d.ts +1 -1
- package/lib/cli/commands/index.cjs +0 -0
- package/lib/cli/commands/index.d.ts +0 -0
- package/lib/cli/commands/tag-release.cjs +1 -1
- package/lib/cli/commands/tag-release.d.ts +1 -1
- package/lib/cli/commands/update-scripts.cjs +1 -1
- package/lib/cli/commands/update-scripts.d.ts +1 -1
- package/lib/cli/constants.cjs +0 -0
- package/lib/cli/constants.d.ts +0 -0
- package/lib/cli/index.cjs +0 -0
- package/lib/cli/index.d.ts +0 -0
- package/lib/cli/types.cjs +1 -1
- package/lib/cli/types.d.ts +1 -1
- package/lib/esm/assets/slogans.json +0 -0
- package/lib/esm/bin/build-scripts.d.ts +0 -0
- package/lib/esm/bin/build-scripts.js +0 -0
- package/lib/esm/bin/tag-release.d.ts +0 -0
- package/lib/esm/bin/tag-release.js +0 -0
- package/lib/esm/bin/update-scripts.d.ts +0 -0
- package/lib/esm/bin/update-scripts.js +0 -0
- package/lib/esm/cli/command.d.ts +5 -5
- package/lib/esm/cli/command.js +2 -3
- package/lib/esm/cli/commands/build-scripts.d.ts +1 -1
- package/lib/esm/cli/commands/build-scripts.js +9 -3
- package/lib/esm/cli/commands/index.d.ts +0 -0
- package/lib/esm/cli/commands/index.js +0 -0
- package/lib/esm/cli/commands/tag-release.d.ts +1 -1
- package/lib/esm/cli/commands/tag-release.js +1 -1
- package/lib/esm/cli/commands/update-scripts.d.ts +1 -1
- package/lib/esm/cli/commands/update-scripts.js +1 -1
- package/lib/esm/cli/constants.d.ts +0 -0
- package/lib/esm/cli/constants.js +0 -0
- package/lib/esm/cli/index.d.ts +0 -0
- package/lib/esm/cli/index.js +0 -0
- package/lib/esm/cli/types.d.ts +1 -1
- package/lib/esm/cli/types.js +1 -1
- package/lib/esm/index.d.ts +2 -2
- package/lib/esm/index.js +2 -2
- package/lib/esm/input/index.d.ts +0 -0
- package/lib/esm/input/index.js +0 -0
- package/lib/esm/input/input.d.ts +1 -2
- package/lib/esm/input/input.js +2 -2
- package/lib/esm/input/types.d.ts +83 -0
- package/lib/esm/input/types.js +1 -1
- package/lib/esm/output/common.d.ts +3 -3
- package/lib/esm/output/common.js +2 -2
- package/lib/esm/output/index.d.ts +1 -3
- package/lib/esm/output/index.js +2 -4
- package/lib/esm/utils/constants.d.ts +0 -77
- package/lib/esm/utils/constants.js +1 -114
- package/lib/esm/utils/environment.d.ts +1 -1
- package/lib/esm/utils/environment.js +2 -2
- package/lib/esm/utils/fs.d.ts +0 -0
- package/lib/esm/utils/fs.js +2 -2
- package/lib/esm/utils/http.d.ts +1 -1
- package/lib/esm/utils/http.js +2 -2
- package/lib/esm/utils/index.d.ts +0 -0
- package/lib/esm/utils/index.js +0 -0
- package/lib/esm/utils/md.d.ts +0 -0
- package/lib/esm/utils/md.js +0 -0
- package/lib/esm/utils/tests.d.ts +0 -0
- package/lib/esm/utils/tests.js +0 -0
- package/lib/esm/utils/text.d.ts +0 -0
- package/lib/esm/utils/text.js +0 -0
- package/lib/esm/utils/timeout.d.ts +0 -0
- package/lib/esm/utils/timeout.js +0 -0
- package/lib/esm/utils/types.d.ts +0 -0
- package/lib/esm/utils/types.js +0 -0
- package/lib/esm/utils/utils.d.ts +2 -2
- package/lib/esm/utils/utils.js +2 -2
- package/lib/esm/utils/web.d.ts +0 -0
- package/lib/esm/utils/web.js +0 -0
- package/lib/esm/writers/OutputWriter.d.ts +0 -0
- package/lib/esm/writers/OutputWriter.js +0 -0
- package/lib/esm/writers/RegexpOutputWriter.d.ts +0 -0
- package/lib/esm/writers/RegexpOutputWriter.js +0 -0
- package/lib/esm/writers/StandardOutputWriter.d.ts +2 -2
- package/lib/esm/writers/StandardOutputWriter.js +2 -2
- package/lib/esm/writers/index.d.ts +0 -0
- package/lib/esm/writers/index.js +0 -0
- package/lib/esm/writers/types.d.ts +0 -0
- package/lib/esm/writers/types.js +0 -0
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/input/index.cjs +0 -0
- package/lib/input/index.d.ts +0 -0
- package/lib/input/input.cjs +2 -2
- package/lib/input/input.d.ts +1 -2
- package/lib/input/types.cjs +1 -1
- package/lib/input/types.d.ts +83 -0
- package/lib/output/common.cjs +2 -2
- package/lib/output/common.d.ts +3 -3
- package/lib/output/index.cjs +1 -3
- package/lib/output/index.d.ts +1 -3
- package/lib/utils/constants.cjs +2 -115
- package/lib/utils/constants.d.ts +0 -77
- package/lib/utils/environment.cjs +3 -3
- package/lib/utils/environment.d.ts +1 -1
- package/lib/utils/fs.cjs +2 -2
- package/lib/utils/fs.d.ts +0 -0
- package/lib/utils/http.cjs +2 -2
- package/lib/utils/http.d.ts +1 -1
- package/lib/utils/index.cjs +0 -0
- package/lib/utils/index.d.ts +0 -0
- package/lib/utils/md.cjs +0 -0
- package/lib/utils/md.d.ts +0 -0
- package/lib/utils/tests.cjs +0 -0
- package/lib/utils/tests.d.ts +0 -0
- package/lib/utils/text.cjs +0 -0
- package/lib/utils/text.d.ts +0 -0
- package/lib/utils/timeout.cjs +0 -0
- package/lib/utils/timeout.d.ts +0 -0
- package/lib/utils/types.cjs +0 -0
- package/lib/utils/types.d.ts +0 -0
- package/lib/utils/utils.cjs +2 -2
- package/lib/utils/utils.d.ts +2 -2
- package/lib/utils/web.cjs +0 -0
- package/lib/utils/web.d.ts +0 -0
- package/lib/writers/OutputWriter.cjs +0 -0
- package/lib/writers/OutputWriter.d.ts +0 -0
- package/lib/writers/RegexpOutputWriter.cjs +0 -0
- package/lib/writers/RegexpOutputWriter.d.ts +0 -0
- package/lib/writers/StandardOutputWriter.cjs +2 -2
- package/lib/writers/StandardOutputWriter.d.ts +2 -2
- package/lib/writers/index.cjs +0 -0
- package/lib/writers/index.d.ts +0 -0
- package/lib/writers/types.cjs +0 -0
- package/lib/writers/types.d.ts +0 -0
- package/package.json +5 -2
- package/lib/esm/output/logging.d.ts +0 -177
- package/lib/esm/output/logging.js +0 -349
- package/lib/esm/output/types.d.ts +0 -203
- package/lib/esm/output/types.js +0 -2
- package/lib/esm/utils/accumulator.d.ts +0 -105
- package/lib/esm/utils/accumulator.js +0 -144
- package/lib/output/logging.cjs +0 -354
- package/lib/output/logging.d.ts +0 -177
- package/lib/output/types.cjs +0 -3
- package/lib/output/types.d.ts +0 -203
- package/lib/utils/accumulator.cjs +0 -148
- package/lib/utils/accumulator.d.ts +0 -105
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @class ObjectAccumulator
|
|
3
|
-
* @template T - The type of the accumulated object, extends object
|
|
4
|
-
* @description A class that accumulates objects and provides type-safe access to their properties.
|
|
5
|
-
* It allows for dynamic addition of properties while maintaining type information.
|
|
6
|
-
* @summary Accumulates objects and maintains type information for accumulated properties
|
|
7
|
-
* @memberOf utils
|
|
8
|
-
*/
|
|
9
|
-
export declare class ObjectAccumulator<T extends object> {
|
|
10
|
-
/**
|
|
11
|
-
* @private
|
|
12
|
-
* @description The size of the accumulated object
|
|
13
|
-
* @type {number}
|
|
14
|
-
*/
|
|
15
|
-
private __size;
|
|
16
|
-
constructor();
|
|
17
|
-
/**
|
|
18
|
-
* @protected
|
|
19
|
-
* @description Expands the accumulator with properties from a new object
|
|
20
|
-
* @summary Adds new properties to the accumulator
|
|
21
|
-
* @template V - The type of the object being expanded
|
|
22
|
-
* @param {V} value - The object to expand with
|
|
23
|
-
* @returns {void}
|
|
24
|
-
*/
|
|
25
|
-
protected expand<V extends object>(value: V): void;
|
|
26
|
-
/**
|
|
27
|
-
* @description Accumulates a new object into the accumulator
|
|
28
|
-
* @summary Adds properties from a new object to the accumulator, maintaining type information
|
|
29
|
-
* @template V - The type of the object being accumulated
|
|
30
|
-
* @param {V} value - The object to accumulate
|
|
31
|
-
* @returns A new ObjectAccumulator instance with updated type information
|
|
32
|
-
* @mermaid
|
|
33
|
-
* sequenceDiagram
|
|
34
|
-
* participant A as Accumulator
|
|
35
|
-
* participant O as Object
|
|
36
|
-
* A->>O: Get entries
|
|
37
|
-
* loop For each entry
|
|
38
|
-
* A->>A: Define property
|
|
39
|
-
* end
|
|
40
|
-
* A->>A: Update size
|
|
41
|
-
* A->>A: Return updated accumulator
|
|
42
|
-
*/
|
|
43
|
-
accumulate<V extends object>(value: V): T & V & ObjectAccumulator<T & V>;
|
|
44
|
-
/**
|
|
45
|
-
* @description Retrieves a value from the accumulator by its key
|
|
46
|
-
* @summary Gets a value from the accumulated object using a type-safe key
|
|
47
|
-
* @template K - The key type, must be a key of this
|
|
48
|
-
* @param {K} key - The key of the value to retrieve
|
|
49
|
-
* @returns {any | undefined} The value associated with the key, or undefined if not found
|
|
50
|
-
*/
|
|
51
|
-
get<K extends keyof this>(key: K): this[K] | undefined;
|
|
52
|
-
/**
|
|
53
|
-
* @description Checks if a key exists in the accumulator
|
|
54
|
-
* @summary Determines whether the accumulator contains a specific key
|
|
55
|
-
* @param {string} key - The key to check for existence
|
|
56
|
-
* @returns {boolean} True if the key exists, false otherwise
|
|
57
|
-
*/
|
|
58
|
-
has(key: string): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* @description Removes a key-value pair from the accumulator
|
|
61
|
-
* @summary Deletes a property from the accumulated object
|
|
62
|
-
* @param {string} key - The key of the property to remove
|
|
63
|
-
* @returns {} The accumulator instance with the specified property removed
|
|
64
|
-
*/
|
|
65
|
-
remove(key: keyof this | string): (Omit<this, typeof key> & ObjectAccumulator<Omit<this, typeof key>>) | this;
|
|
66
|
-
/**
|
|
67
|
-
* @description Retrieves all keys from the accumulator
|
|
68
|
-
* @summary Gets an array of all accumulated property keys
|
|
69
|
-
* @returns {string[]} An array of keys as strings
|
|
70
|
-
*/
|
|
71
|
-
keys(): string[];
|
|
72
|
-
/**
|
|
73
|
-
* @description Retrieves all values from the accumulator
|
|
74
|
-
* @summary Gets an array of all accumulated property values
|
|
75
|
-
* @returns An array of values
|
|
76
|
-
*/
|
|
77
|
-
values(): T[keyof T][];
|
|
78
|
-
/**
|
|
79
|
-
* @description Gets the number of key-value pairs in the accumulator
|
|
80
|
-
* @summary Returns the count of accumulated properties
|
|
81
|
-
* @returns {number} The number of key-value pairs
|
|
82
|
-
*/
|
|
83
|
-
size(): number;
|
|
84
|
-
/**
|
|
85
|
-
* @description Clears all accumulated key-value pairs
|
|
86
|
-
* @summary Removes all properties from the accumulator and returns a new empty instance
|
|
87
|
-
* @returns {ObjectAccumulator<never>} A new empty ObjectAccumulator instance
|
|
88
|
-
*/
|
|
89
|
-
clear(): ObjectAccumulator<never>;
|
|
90
|
-
/**
|
|
91
|
-
* @description Executes a callback for each key-value pair in the accumulator
|
|
92
|
-
* @summary Iterates over all accumulated properties, calling a function for each
|
|
93
|
-
* @param {function(any, string, number): void} callback - The function to execute for each entry
|
|
94
|
-
* @returns {void}
|
|
95
|
-
*/
|
|
96
|
-
forEach(callback: (value: this[keyof this], key: keyof this, i: number) => void): void;
|
|
97
|
-
/**
|
|
98
|
-
* @description Creates a new array with the results of calling a provided function on every element in the accumulator
|
|
99
|
-
* @summary Maps each accumulated property to a new value using a callback function
|
|
100
|
-
* @template R - The type of the mapped values
|
|
101
|
-
* @param {function(any, string,number): R} callback - Function that produces an element of the new array
|
|
102
|
-
* @returns {R[]} A new array with each element being the result of the callback function
|
|
103
|
-
*/
|
|
104
|
-
map<R>(callback: (value: this[keyof this], key: keyof this, i: number) => R): R[];
|
|
105
|
-
}
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @class ObjectAccumulator
|
|
3
|
-
* @template T - The type of the accumulated object, extends object
|
|
4
|
-
* @description A class that accumulates objects and provides type-safe access to their properties.
|
|
5
|
-
* It allows for dynamic addition of properties while maintaining type information.
|
|
6
|
-
* @summary Accumulates objects and maintains type information for accumulated properties
|
|
7
|
-
* @memberOf utils
|
|
8
|
-
*/
|
|
9
|
-
export class ObjectAccumulator {
|
|
10
|
-
constructor() {
|
|
11
|
-
Object.defineProperty(this, "__size", {
|
|
12
|
-
value: 0,
|
|
13
|
-
writable: true,
|
|
14
|
-
configurable: false,
|
|
15
|
-
enumerable: false,
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @protected
|
|
20
|
-
* @description Expands the accumulator with properties from a new object
|
|
21
|
-
* @summary Adds new properties to the accumulator
|
|
22
|
-
* @template V - The type of the object being expanded
|
|
23
|
-
* @param {V} value - The object to expand with
|
|
24
|
-
* @returns {void}
|
|
25
|
-
*/
|
|
26
|
-
expand(value) {
|
|
27
|
-
Object.entries(value).forEach(([k, v]) => {
|
|
28
|
-
Object.defineProperty(this, k, {
|
|
29
|
-
get: () => v,
|
|
30
|
-
set: (val) => {
|
|
31
|
-
v = val;
|
|
32
|
-
},
|
|
33
|
-
configurable: true,
|
|
34
|
-
enumerable: true,
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* @description Accumulates a new object into the accumulator
|
|
40
|
-
* @summary Adds properties from a new object to the accumulator, maintaining type information
|
|
41
|
-
* @template V - The type of the object being accumulated
|
|
42
|
-
* @param {V} value - The object to accumulate
|
|
43
|
-
* @returns A new ObjectAccumulator instance with updated type information
|
|
44
|
-
* @mermaid
|
|
45
|
-
* sequenceDiagram
|
|
46
|
-
* participant A as Accumulator
|
|
47
|
-
* participant O as Object
|
|
48
|
-
* A->>O: Get entries
|
|
49
|
-
* loop For each entry
|
|
50
|
-
* A->>A: Define property
|
|
51
|
-
* end
|
|
52
|
-
* A->>A: Update size
|
|
53
|
-
* A->>A: Return updated accumulator
|
|
54
|
-
*/
|
|
55
|
-
accumulate(value) {
|
|
56
|
-
this.expand(value);
|
|
57
|
-
this.__size = this.__size + Object.keys(value).length;
|
|
58
|
-
return this;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* @description Retrieves a value from the accumulator by its key
|
|
62
|
-
* @summary Gets a value from the accumulated object using a type-safe key
|
|
63
|
-
* @template K - The key type, must be a key of this
|
|
64
|
-
* @param {K} key - The key of the value to retrieve
|
|
65
|
-
* @returns {any | undefined} The value associated with the key, or undefined if not found
|
|
66
|
-
*/
|
|
67
|
-
get(key) {
|
|
68
|
-
return this[key];
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* @description Checks if a key exists in the accumulator
|
|
72
|
-
* @summary Determines whether the accumulator contains a specific key
|
|
73
|
-
* @param {string} key - The key to check for existence
|
|
74
|
-
* @returns {boolean} True if the key exists, false otherwise
|
|
75
|
-
*/
|
|
76
|
-
has(key) {
|
|
77
|
-
return !!this[key];
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* @description Removes a key-value pair from the accumulator
|
|
81
|
-
* @summary Deletes a property from the accumulated object
|
|
82
|
-
* @param {string} key - The key of the property to remove
|
|
83
|
-
* @returns {} The accumulator instance with the specified property removed
|
|
84
|
-
*/
|
|
85
|
-
remove(key) {
|
|
86
|
-
if (!(key in this))
|
|
87
|
-
return this;
|
|
88
|
-
delete this[key];
|
|
89
|
-
this.__size--;
|
|
90
|
-
return this;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* @description Retrieves all keys from the accumulator
|
|
94
|
-
* @summary Gets an array of all accumulated property keys
|
|
95
|
-
* @returns {string[]} An array of keys as strings
|
|
96
|
-
*/
|
|
97
|
-
keys() {
|
|
98
|
-
return Object.keys(this);
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* @description Retrieves all values from the accumulator
|
|
102
|
-
* @summary Gets an array of all accumulated property values
|
|
103
|
-
* @returns An array of values
|
|
104
|
-
*/
|
|
105
|
-
values() {
|
|
106
|
-
return Object.values(this);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* @description Gets the number of key-value pairs in the accumulator
|
|
110
|
-
* @summary Returns the count of accumulated properties
|
|
111
|
-
* @returns {number} The number of key-value pairs
|
|
112
|
-
*/
|
|
113
|
-
size() {
|
|
114
|
-
return this.__size;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* @description Clears all accumulated key-value pairs
|
|
118
|
-
* @summary Removes all properties from the accumulator and returns a new empty instance
|
|
119
|
-
* @returns {ObjectAccumulator<never>} A new empty ObjectAccumulator instance
|
|
120
|
-
*/
|
|
121
|
-
clear() {
|
|
122
|
-
return new ObjectAccumulator();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* @description Executes a callback for each key-value pair in the accumulator
|
|
126
|
-
* @summary Iterates over all accumulated properties, calling a function for each
|
|
127
|
-
* @param {function(any, string, number): void} callback - The function to execute for each entry
|
|
128
|
-
* @returns {void}
|
|
129
|
-
*/
|
|
130
|
-
forEach(callback) {
|
|
131
|
-
Object.entries(this).forEach(([key, value], i) => callback(value, key, i));
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* @description Creates a new array with the results of calling a provided function on every element in the accumulator
|
|
135
|
-
* @summary Maps each accumulated property to a new value using a callback function
|
|
136
|
-
* @template R - The type of the mapped values
|
|
137
|
-
* @param {function(any, string,number): R} callback - Function that produces an element of the new array
|
|
138
|
-
* @returns {R[]} A new array with each element being the result of the callback function
|
|
139
|
-
*/
|
|
140
|
-
map(callback) {
|
|
141
|
-
return Object.entries(this).map(([key, value], i) => callback(value, key, i));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvYWNjdW11bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFRNUI7UUFDRSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEMsS0FBSyxFQUFFLENBQUM7WUFDUixRQUFRLEVBQUUsSUFBSTtZQUNkLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFtQixLQUFRO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQzdCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLEdBQUcsRUFBRSxDQUFDLEdBQWUsRUFBRSxFQUFFO29CQUN2QixDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUNWLENBQUM7Z0JBQ0QsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsVUFBVSxDQUFtQixLQUFRO1FBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3RELE9BQU8sSUFBbUQsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsR0FBRyxDQUF1QixHQUFNO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQWlCLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQ0osR0FBd0I7UUFJeEIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWhDLE9BQU8sSUFBSSxDQUFDLEdBQWlCLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxPQUFPLElBQ29DLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLO1FBQ0gsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUNMLFFBQXVFO1FBRXZFLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDL0MsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFpQixFQUFFLENBQUMsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEdBQUcsQ0FDRCxRQUFvRTtRQUVwRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDbEQsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFpQixFQUFFLENBQUMsQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAY2xhc3MgT2JqZWN0QWNjdW11bGF0b3JcbiAqIEB0ZW1wbGF0ZSBUIC0gVGhlIHR5cGUgb2YgdGhlIGFjY3VtdWxhdGVkIG9iamVjdCwgZXh0ZW5kcyBvYmplY3RcbiAqIEBkZXNjcmlwdGlvbiBBIGNsYXNzIHRoYXQgYWNjdW11bGF0ZXMgb2JqZWN0cyBhbmQgcHJvdmlkZXMgdHlwZS1zYWZlIGFjY2VzcyB0byB0aGVpciBwcm9wZXJ0aWVzLlxuICogSXQgYWxsb3dzIGZvciBkeW5hbWljIGFkZGl0aW9uIG9mIHByb3BlcnRpZXMgd2hpbGUgbWFpbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvbi5cbiAqIEBzdW1tYXJ5IEFjY3VtdWxhdGVzIG9iamVjdHMgYW5kIG1haW50YWlucyB0eXBlIGluZm9ybWF0aW9uIGZvciBhY2N1bXVsYXRlZCBwcm9wZXJ0aWVzXG4gKiBAbWVtYmVyT2YgdXRpbHNcbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdEFjY3VtdWxhdG9yPFQgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2l6ZSBvZiB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIF9fc2l6ZSE6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3NpemVcIiwge1xuICAgICAgdmFsdWU6IDAsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIHRoZSBhY2N1bXVsYXRvciB3aXRoIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3RcbiAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgYWNjdW11bGF0b3JcbiAgICogQHRlbXBsYXRlIFYgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGV4cGFuZGVkXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGV4cGFuZCB3aXRoXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJvdGVjdGVkIGV4cGFuZDxWIGV4dGVuZHMgb2JqZWN0Pih2YWx1ZTogVik6IHZvaWQge1xuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgIGdldDogKCkgPT4gdixcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFjY3VtdWxhdGVzIGEgbmV3IG9iamVjdCBpbnRvIHRoZSBhY2N1bXVsYXRvclxuICAgKiBAc3VtbWFyeSBBZGRzIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3QgdG8gdGhlIGFjY3VtdWxhdG9yLCBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBhY2N1bXVsYXRlZFxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBhY2N1bXVsYXRlXG4gICAqIEByZXR1cm5zIEEgbmV3IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdXBkYXRlZCB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQWNjdW11bGF0b3JcbiAgICogICBwYXJ0aWNpcGFudCBPIGFzIE9iamVjdFxuICAgKiAgIEEtPj5POiBHZXQgZW50cmllc1xuICAgKiAgIGxvb3AgRm9yIGVhY2ggZW50cnlcbiAgICogICAgIEEtPj5BOiBEZWZpbmUgcHJvcGVydHlcbiAgICogICBlbmRcbiAgICogICBBLT4+QTogVXBkYXRlIHNpemVcbiAgICogICBBLT4+QTogUmV0dXJuIHVwZGF0ZWQgYWNjdW11bGF0b3JcbiAgICovXG4gIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiBUICYgViAmIE9iamVjdEFjY3VtdWxhdG9yPFQgJiBWPiB7XG4gICAgdGhpcy5leHBhbmQodmFsdWUpO1xuICAgIHRoaXMuX19zaXplID0gdGhpcy5fX3NpemUgKyBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVCAmIFYgJiBPYmplY3RBY2N1bXVsYXRvcjxUICYgVj47XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdG9yIGJ5IGl0cyBrZXlcbiAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdCB1c2luZyBhIHR5cGUtc2FmZSBrZXlcbiAgICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHR5cGUsIG11c3QgYmUgYSBrZXkgb2YgdGhpc1xuICAgKiBAcGFyYW0ge0t9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIHthbnkgfCB1bmRlZmluZWR9IFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiB0aGlzPihrZXk6IEspOiB0aGlzW0tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSBrZXkgZXhpc3RzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGEgc3BlY2lmaWMga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIGNoZWNrIGZvciBleGlzdGVuY2VcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaGFzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpc1trZXkgYXMga2V5b2YgdGhpc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgKiBAc3VtbWFyeSBEZWxldGVzIGEgcHJvcGVydHkgZnJvbSB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZW1vdmVcbiAgICogQHJldHVybnMge30gVGhlIGFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSByZW1vdmVkXG4gICAqL1xuICByZW1vdmUoXG4gICAga2V5OiBrZXlvZiB0aGlzIHwgc3RyaW5nXG4gICk6XG4gICAgfCAoT21pdDx0aGlzLCB0eXBlb2Yga2V5PiAmIE9iamVjdEFjY3VtdWxhdG9yPE9taXQ8dGhpcywgdHlwZW9mIGtleT4+KVxuICAgIHwgdGhpcyB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMpKSByZXR1cm4gdGhpcztcblxuICAgIGRlbGV0ZSB0aGlzW2tleSBhcyBrZXlvZiB0aGlzXTtcbiAgICB0aGlzLl9fc2l6ZS0tO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgT21pdDx0aGlzLCB0eXBlb2Yga2V5PiAmXG4gICAgICBPYmplY3RBY2N1bXVsYXRvcjxPbWl0PHRoaXMsIHR5cGVvZiBrZXk+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBrZXlzIGZyb20gdGhlIGFjY3VtdWxhdG9yXG4gICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IGtleXNcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGFzIHN0cmluZ3NcbiAgICovXG4gIGtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCB2YWx1ZXMgZnJvbSB0aGUgYWNjdW11bGF0b3JcbiAgICogQHN1bW1hcnkgR2V0cyBhbiBhcnJheSBvZiBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydHkgdmFsdWVzXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbHVlc1xuICAgKi9cbiAgdmFsdWVzKCk6IFRba2V5b2YgVF1bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvdW50IG9mIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnNcbiAgICovXG4gIHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fX3NpemU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENsZWFycyBhbGwgYWNjdW11bGF0ZWQga2V5LXZhbHVlIHBhaXJzXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYWxsIHByb3BlcnRpZXMgZnJvbSB0aGUgYWNjdW11bGF0b3IgYW5kIHJldHVybnMgYSBuZXcgZW1wdHkgaW5zdGFuY2VcbiAgICogQHJldHVybnMge09iamVjdEFjY3VtdWxhdG9yPG5ldmVyPn0gQSBuZXcgZW1wdHkgT2JqZWN0QWNjdW11bGF0b3IgaW5zdGFuY2VcbiAgICovXG4gIGNsZWFyKCk6IE9iamVjdEFjY3VtdWxhdG9yPG5ldmVyPiB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RBY2N1bXVsYXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIGNhbGxiYWNrIGZvciBlYWNoIGtleS12YWx1ZSBwYWlyIGluIHRoZSBhY2N1bXVsYXRvclxuICAgKiBAc3VtbWFyeSBJdGVyYXRlcyBvdmVyIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0aWVzLCBjYWxsaW5nIGEgZnVuY3Rpb24gZm9yIGVhY2hcbiAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZywgbnVtYmVyKTogdm9pZH0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBlbnRyeVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goXG4gICAgY2FsbGJhY2s6ICh2YWx1ZTogdGhpc1trZXlvZiB0aGlzXSwga2V5OiBrZXlvZiB0aGlzLCBpOiBudW1iZXIpID0+IHZvaWRcbiAgKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModGhpcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdLCBpKSA9PlxuICAgICAgY2FsbGJhY2sodmFsdWUsIGtleSBhcyBrZXlvZiB0aGlzLCBpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgZnVuY3Rpb24gb24gZXZlcnkgZWxlbWVudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICogQHN1bW1hcnkgTWFwcyBlYWNoIGFjY3VtdWxhdGVkIHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgbWFwcGVkIHZhbHVlc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFueSwgc3RyaW5nLG51bWJlcik6IFJ9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlbGVtZW50IG9mIHRoZSBuZXcgYXJyYXlcbiAgICogQHJldHVybnMge1JbXX0gQSBuZXcgYXJyYXkgd2l0aCBlYWNoIGVsZW1lbnQgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICovXG4gIG1hcDxSPihcbiAgICBjYWxsYmFjazogKHZhbHVlOiB0aGlzW2tleW9mIHRoaXNdLCBrZXk6IGtleW9mIHRoaXMsIGk6IG51bWJlcikgPT4gUlxuICApOiBSW10ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzKS5tYXAoKFtrZXksIHZhbHVlXSwgaSkgPT5cbiAgICAgIGNhbGxiYWNrKHZhbHVlLCBrZXkgYXMga2V5b2YgdGhpcywgaSlcbiAgICApO1xuICB9XG59XG4iXX0=
|