@decaf-ts/db-decorators 0.6.7 → 0.6.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/dist/db-decorators.cjs +5 -72
- package/dist/db-decorators.esm.cjs +5 -72
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/repository/Context.d.ts +3 -65
- package/lib/esm/repository/Context.js +4 -71
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/repository/Context.cjs +4 -71
- package/lib/repository/Context.d.ts +3 -65
- package/package.json +1 -1
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -15,5 +15,5 @@ export * from "./validation/index.js";
|
|
|
15
15
|
* @const VERSION
|
|
16
16
|
* @memberOf module:db-decorators
|
|
17
17
|
*/
|
|
18
|
-
export const VERSION = "0.6.
|
|
18
|
+
export const VERSION = "0.6.8";
|
|
19
19
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQTJCO0FBQzNCLHNDQUE2QjtBQUM3QixpQ0FBd0I7QUFDeEIsc0NBQTZCO0FBQzdCLHNDQUE2QjtBQUM3QixzQ0FBNkI7QUFFN0I7Ozs7R0FJRztBQUdIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2lkZW50aXR5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3BlcmF0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVwb3NpdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEYXRhYmFzZSBkZWNvcmF0b3JzIGZvciBUeXBlU2NyaXB0IGFwcGxpY2F0aW9uc1xuICogQHN1bW1hcnkgQSBjb21wcmVoZW5zaXZlIGxpYnJhcnkgcHJvdmlkaW5nIGRlY29yYXRvcnMgYW5kIHV0aWxpdGllcyBmb3IgZGF0YWJhc2Ugb3BlcmF0aW9ucywgbW9kZWwgZGVmaW5pdGlvbnMsIHZhbGlkYXRpb24sIGFuZCByZXBvc2l0b3J5IHBhdHRlcm5zIGluIFR5cGVTY3JpcHQgYXBwbGljYXRpb25zXG4gKiBAbW9kdWxlIGRiLWRlY29yYXRvcnNcbiAqL1xuXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcmVmbGVjdGlvbiBwYWNrYWdlXG4gKiBAc3VtbWFyeSBTdG9yZXMgdGhlIHNlbWFudGljIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBwYWNrYWdlXG4gKiBAY29uc3QgVkVSU0lPTlxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
|
|
@@ -2,6 +2,7 @@ import { ContextArgs } from "./utils";
|
|
|
2
2
|
import { Contextual } from "../interfaces/Contextual";
|
|
3
3
|
import { OperationKeys } from "../operations/constants";
|
|
4
4
|
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
|
5
|
+
import { ObjectAccumulator } from "typed-object-accumulator";
|
|
5
6
|
import { RepositoryFlags } from "./types";
|
|
6
7
|
/**
|
|
7
8
|
* @description Factory type for creating context instances.
|
|
@@ -80,91 +81,28 @@ export declare const DefaultContextFactory: ContextFactory<any>;
|
|
|
80
81
|
export declare class Context<F extends RepositoryFlags> {
|
|
81
82
|
constructor();
|
|
82
83
|
static factory: ContextFactory<any>;
|
|
83
|
-
|
|
84
|
+
readonly cache: RepositoryFlags & ObjectAccumulator<any>;
|
|
84
85
|
/**
|
|
85
86
|
* @description Accumulates new values into the context.
|
|
86
87
|
* @summary Merges the provided value object with the existing context state,
|
|
87
88
|
* creating a new immutable cache state.
|
|
88
|
-
*
|
|
89
|
-
* @template F - current accumulator type
|
|
90
|
-
* @template V - Type extending object for the values to accumulate
|
|
91
|
-
* @param {V} value - The object containing values to accumulate
|
|
92
|
-
* @returns A new context instance with accumulated values
|
|
93
89
|
*/
|
|
94
90
|
accumulate<V extends object>(value: V): Context<F & V>;
|
|
95
|
-
get timestamp():
|
|
91
|
+
get timestamp(): F["timestamp"];
|
|
96
92
|
/**
|
|
97
93
|
* @description Retrieves a value from the context by key.
|
|
98
|
-
* @summary Attempts to get a value from the current context's cache.
|
|
99
|
-
* If not found, traverses up the parent context chain.
|
|
100
|
-
*
|
|
101
|
-
* @template K - Type extending keyof F for the key to retrieve
|
|
102
|
-
* @template F - Accumulator type
|
|
103
|
-
* @param {K} key - The key to retrieve from the context
|
|
104
|
-
* @returns The value associated with the key
|
|
105
|
-
* @throws {Error} If the key is not found in the context chain
|
|
106
94
|
*/
|
|
107
95
|
get<K extends keyof F>(key: K): F[K];
|
|
108
|
-
/**
|
|
109
|
-
* @description Creates a child context
|
|
110
|
-
* @summary Generates a new context instance with current context as parent
|
|
111
|
-
*
|
|
112
|
-
* @template M - Type extending Model
|
|
113
|
-
* @param {OperationKeys} operation - The operation type
|
|
114
|
-
* @param {Constructor<M>} [model] - Optional model constructor
|
|
115
|
-
* @returns {C} New child context instance
|
|
116
|
-
*/
|
|
117
|
-
child<M extends Model, C extends Context<F>>(operation: OperationKeys, model?: Constructor<M>): C;
|
|
118
96
|
/**
|
|
119
97
|
* @description Creates a child context from another context
|
|
120
|
-
* @summary Generates a new context instance with parent reference
|
|
121
|
-
*
|
|
122
|
-
* @template F - Type extending Repository Flags
|
|
123
|
-
* @template C - Type extending Context<F>
|
|
124
|
-
* @param {C} context - The parent context
|
|
125
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
126
|
-
* @returns {C} New child context instance
|
|
127
98
|
*/
|
|
128
99
|
static childFrom<F extends RepositoryFlags, C extends Context<F>>(context: C, overrides?: Partial<F>): C;
|
|
129
100
|
/**
|
|
130
101
|
* @description Creates a new context from operation parameters
|
|
131
|
-
* @summary Generates a context instance for specific operation
|
|
132
|
-
*
|
|
133
|
-
* @template F - Type extending Repository Flags
|
|
134
|
-
* @template M - Type extending Model
|
|
135
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
136
|
-
* @param {Partial<F>} overrides - Flag overrides
|
|
137
|
-
* @param {Constructor<M>} model - The model constructor
|
|
138
|
-
* @param {any} args - Operation arguments
|
|
139
|
-
* @returns {Promise<C>} Promise resolving to new context
|
|
140
102
|
*/
|
|
141
103
|
static from<M extends Model, F extends RepositoryFlags, C extends Context<F>>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, overrides: Partial<F>, model: Constructor<M>, ...args: any[]): Promise<C>;
|
|
142
104
|
/**
|
|
143
105
|
* @description Prepares arguments for context operations
|
|
144
|
-
* @summary Creates a context args object with the specified operation parameters
|
|
145
|
-
*
|
|
146
|
-
* @template F - Type extending {@link RepositoryFlags}
|
|
147
|
-
* @template M - Type extending {@link Model}
|
|
148
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
149
|
-
* @param {Constructor<M>} model - The model constructor
|
|
150
|
-
* @param {any[]} args - Operation arguments
|
|
151
|
-
* @param {Contextual<F>} [contextual] - Optional contextual object
|
|
152
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
153
|
-
* @returns {Promise<ContextArgs>} Promise resolving to context arguments
|
|
154
|
-
*
|
|
155
|
-
* @mermaid
|
|
156
|
-
* sequenceDiagram
|
|
157
|
-
* participant C as Context
|
|
158
|
-
* participant M as Model
|
|
159
|
-
* participant A as Args
|
|
160
|
-
*
|
|
161
|
-
* C->>C: Receive operation request
|
|
162
|
-
* C->>M: Validate model constructor
|
|
163
|
-
* C->>C: Create child context
|
|
164
|
-
* C->>A: Process operation args
|
|
165
|
-
* A->>C: Return context args
|
|
166
|
-
* C->>C: Apply overrides
|
|
167
|
-
* C->>C: Return final context
|
|
168
106
|
*/
|
|
169
107
|
static args<M extends Model<any>, C extends Context<F>, F extends RepositoryFlags>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, model: Constructor<M>, args: any[], contextual?: Contextual<F>, overrides?: Partial<F>): Promise<ContextArgs<F, C>>;
|
|
170
108
|
}
|
|
@@ -83,11 +83,6 @@ export class Context {
|
|
|
83
83
|
* @description Accumulates new values into the context.
|
|
84
84
|
* @summary Merges the provided value object with the existing context state,
|
|
85
85
|
* creating a new immutable cache state.
|
|
86
|
-
*
|
|
87
|
-
* @template F - current accumulator type
|
|
88
|
-
* @template V - Type extending object for the values to accumulate
|
|
89
|
-
* @param {V} value - The object containing values to accumulate
|
|
90
|
-
* @returns A new context instance with accumulated values
|
|
91
86
|
*/
|
|
92
87
|
accumulate(value) {
|
|
93
88
|
Object.defineProperty(this, "cache", {
|
|
@@ -103,64 +98,26 @@ export class Context {
|
|
|
103
98
|
}
|
|
104
99
|
/**
|
|
105
100
|
* @description Retrieves a value from the context by key.
|
|
106
|
-
* @summary Attempts to get a value from the current context's cache.
|
|
107
|
-
* If not found, traverses up the parent context chain.
|
|
108
|
-
*
|
|
109
|
-
* @template K - Type extending keyof F for the key to retrieve
|
|
110
|
-
* @template F - Accumulator type
|
|
111
|
-
* @param {K} key - The key to retrieve from the context
|
|
112
|
-
* @returns The value associated with the key
|
|
113
|
-
* @throws {Error} If the key is not found in the context chain
|
|
114
101
|
*/
|
|
115
102
|
get(key) {
|
|
116
103
|
try {
|
|
117
104
|
return this.cache.get(key);
|
|
118
105
|
}
|
|
119
106
|
catch (e) {
|
|
120
|
-
|
|
121
|
-
|
|
107
|
+
const parent = this.cache.parentContext;
|
|
108
|
+
if (parent)
|
|
109
|
+
return parent.get(key);
|
|
122
110
|
throw e;
|
|
123
111
|
}
|
|
124
112
|
}
|
|
125
|
-
/**
|
|
126
|
-
* @description Creates a child context
|
|
127
|
-
* @summary Generates a new context instance with current context as parent
|
|
128
|
-
*
|
|
129
|
-
* @template M - Type extending Model
|
|
130
|
-
* @param {OperationKeys} operation - The operation type
|
|
131
|
-
* @param {Constructor<M>} [model] - Optional model constructor
|
|
132
|
-
* @returns {C} New child context instance
|
|
133
|
-
*/
|
|
134
|
-
child(operation, model) {
|
|
135
|
-
return Context.childFrom(this, {
|
|
136
|
-
operation: operation,
|
|
137
|
-
affectedTables: model ? [model] : [],
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
113
|
/**
|
|
141
114
|
* @description Creates a child context from another context
|
|
142
|
-
* @summary Generates a new context instance with parent reference
|
|
143
|
-
*
|
|
144
|
-
* @template F - Type extending Repository Flags
|
|
145
|
-
* @template C - Type extending Context<F>
|
|
146
|
-
* @param {C} context - The parent context
|
|
147
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
148
|
-
* @returns {C} New child context instance
|
|
149
115
|
*/
|
|
150
116
|
static childFrom(context, overrides) {
|
|
151
117
|
return Context.factory(Object.assign({}, context.cache, overrides || {}));
|
|
152
118
|
}
|
|
153
119
|
/**
|
|
154
120
|
* @description Creates a new context from operation parameters
|
|
155
|
-
* @summary Generates a context instance for specific operation
|
|
156
|
-
*
|
|
157
|
-
* @template F - Type extending Repository Flags
|
|
158
|
-
* @template M - Type extending Model
|
|
159
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
160
|
-
* @param {Partial<F>} overrides - Flag overrides
|
|
161
|
-
* @param {Constructor<M>} model - The model constructor
|
|
162
|
-
* @param {any} args - Operation arguments
|
|
163
|
-
* @returns {Promise<C>} Promise resolving to new context
|
|
164
121
|
*/
|
|
165
122
|
static async from(operation, overrides, model,
|
|
166
123
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -172,30 +129,6 @@ export class Context {
|
|
|
172
129
|
}
|
|
173
130
|
/**
|
|
174
131
|
* @description Prepares arguments for context operations
|
|
175
|
-
* @summary Creates a context args object with the specified operation parameters
|
|
176
|
-
*
|
|
177
|
-
* @template F - Type extending {@link RepositoryFlags}
|
|
178
|
-
* @template M - Type extending {@link Model}
|
|
179
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
180
|
-
* @param {Constructor<M>} model - The model constructor
|
|
181
|
-
* @param {any[]} args - Operation arguments
|
|
182
|
-
* @param {Contextual<F>} [contextual] - Optional contextual object
|
|
183
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
184
|
-
* @returns {Promise<ContextArgs>} Promise resolving to context arguments
|
|
185
|
-
*
|
|
186
|
-
* @mermaid
|
|
187
|
-
* sequenceDiagram
|
|
188
|
-
* participant C as Context
|
|
189
|
-
* participant M as Model
|
|
190
|
-
* participant A as Args
|
|
191
|
-
*
|
|
192
|
-
* C->>C: Receive operation request
|
|
193
|
-
* C->>M: Validate model constructor
|
|
194
|
-
* C->>C: Create child context
|
|
195
|
-
* C->>A: Process operation args
|
|
196
|
-
* A->>C: Return context args
|
|
197
|
-
* C->>C: Apply overrides
|
|
198
|
-
* C->>C: Return final context
|
|
199
132
|
*/
|
|
200
133
|
static async args(operation, model, args, contextual, overrides) {
|
|
201
134
|
const last = args.pop();
|
|
@@ -223,4 +156,4 @@ export class Context {
|
|
|
223
156
|
return { context: c, args: args };
|
|
224
157
|
}
|
|
225
158
|
}
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L0NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHVCQUFvQjtBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWM3RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBd0IsQ0FJeEQsR0FBeUIsRUFDekIsRUFBRTtJQUNGLE9BQU8sSUFBSSxPQUFPLEVBQUssQ0FBQyxVQUFVLENBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQU0sQ0FDbEQsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNsQjtRQVdpQixVQUFLLEdBQ3BCLElBQUksaUJBQWlCLEVBQThCLENBQUM7UUFYcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRSxJQUFJLGlCQUFpQixFQUFLO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzthQUVNLFlBQU8sR0FBd0IscUJBQXFCLEFBQTdDLENBQThDO0lBSzVEOzs7Ozs7Ozs7T0FTRztJQUNILFVBQVUsQ0FBbUIsS0FBUTtRQUNuQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNu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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsRUFBRSxDQUFNLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRleHRBcmdzIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IENvbnRleHR1YWwgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9Db250ZXh0dWFsXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEZWZhdWx0UmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnlGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgY29udGV4dCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgZnVuY3Rpb24gdHlwZSB0aGF0IGNyZWF0ZXMgY29udGV4dCBpbnN0YW5jZXMgd2l0aCBzcGVjaWZpYyByZXBvc2l0b3J5IGZsYWdzLlxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlIGV4dGVuZGluZyBSZXBvc2l0b3J5RmxhZ3NcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQ29udGV4dEZhY3RvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBDb250ZXh0RmFjdG9yeTxGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzPiA9IDxDIGV4dGVuZHMgQ29udGV4dDxGPj4oXG4gIGFyZzogT21pdDxGLCBcInRpbWVzdGFtcFwiPlxuKSA9PiBDO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGZhY3RvcnkgZm9yIGNyZWF0aW5nIGNvbnRleHQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgQSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgQ29udGV4dCBpbnN0YW5jZXMgd2l0aCB0aGUgcHJvdmlkZWQgcmVwb3NpdG9yeSBmbGFncy5cbiAqIEl0IGF1dG9tYXRpY2FsbHkgYWRkcyBhIHRpbWVzdGFtcCB0byB0aGUgY29udGV4dCBhbmQgcmV0dXJucyBhIHByb3Blcmx5IHR5cGVkIGNvbnRleHQgaW5zdGFuY2UuXG4gKiBAY29uc3QgRGVmYXVsdENvbnRleHRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDb250ZXh0RmFjdG9yeTogQ29udGV4dEZhY3Rvcnk8YW55PiA9IDxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+KFxuICBhcmc6IE9taXQ8RiwgXCJ0aW1lc3RhbXBcIj5cbikgPT4ge1xuICByZXR1cm4gbmV3IENvbnRleHQ8Rj4oKS5hY2N1bXVsYXRlKFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGFyZywgeyB0aW1lc3RhbXA6IG5ldyBEYXRlKCkgfSkgYXMgRlxuICApIGFzIEM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGNvbnRleHQgbWFuYWdlbWVudCBjbGFzcyBmb3IgaGFuZGxpbmcgcmVwb3NpdG9yeSBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIENvbnRleHQgY2xhc3MgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIHJlcG9zaXRvcnkgb3BlcmF0aW9ucyB3aXRoIGZsYWdzLFxuICogcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMsIGFuZCBzdGF0ZSBhY2N1bXVsYXRpb24uIEl0IGFsbG93cyBmb3IgaGllcmFyY2hpY2FsIGNvbnRleHQgY2hhaW5zXG4gKiBhbmQgbWFpbnRhaW5zIG9wZXJhdGlvbi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aGlsZSBzdXBwb3J0aW5nIHR5cGUgc2FmZXR5IHRocm91Z2ggZ2VuZXJpY3MuXG4gKlxuICogQHRlbXBsYXRlIEYgLSBUeXBlIGV4dGVuZGluZyBSZXBvc2l0b3J5RmxhZ3MgdGhhdCBkZWZpbmVzIHRoZSBjb250ZXh0IGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdEFjY3VtdWxhdG9yPEY+fSBjYWNoZSAtIFRoZSBpbnRlcm5hbCBjYWNoZSBzdG9yaW5nIGFjY3VtdWxhdGVkIHZhbHVlc1xuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGluZyBhIG5ldyBjb250ZXh0IHdpdGggcmVwb3NpdG9yeSBmbGFnc1xuICogY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0PFJlcG9zaXRvcnlGbGFncz4oKTtcbiAqXG4gKiAvLyBBY2N1bXVsYXRpbmcgdmFsdWVzXG4gKiBjb25zdCBlbnJpY2hlZENvbnRleHQgPSBjb250ZXh0LmFjY3VtdWxhdGUoe1xuICogICB3cml0ZU9wZXJhdGlvbjogdHJ1ZSxcbiAqICAgYWZmZWN0ZWRUYWJsZXM6IFsndXNlcnMnXSxcbiAqICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLkNSRUFURVxuICogfSk7XG4gKlxuICogLy8gQWNjZXNzaW5nIHZhbHVlc1xuICogY29uc3QgaXNXcml0ZSA9IGVucmljaGVkQ29udGV4dC5nZXQoJ3dyaXRlT3BlcmF0aW9uJyk7IC8vIHRydWVcbiAqIGNvbnN0IHRhYmxlcyA9IGVucmljaGVkQ29udGV4dC5nZXQoJ2FmZmVjdGVkVGFibGVzJyk7IC8vIFsndXNlcnMnXVxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBDdHggYXMgQ29udGV4dFxuICogICBwYXJ0aWNpcGFudCBDYWNoZSBhcyBPYmplY3RBY2N1bXVsYXRvclxuICpcbiAqICAgQy0+PkN0eDogbmV3IENvbnRleHQoKVxuICogICBDdHgtPj5DYWNoZTogY3JlYXRlIGNhY2hlXG4gKlxuICogICBDLT4+Q3R4OiBhY2N1bXVsYXRlKHZhbHVlKVxuICogICBDdHgtPj5DYWNoZTogYWNjdW11bGF0ZSh2YWx1ZSlcbiAqICAgQ2FjaGUtLT4+Q3R4OiB1cGRhdGVkIGNhY2hlXG4gKiAgIEN0eC0tPj5DOiB1cGRhdGVkIGNvbnRleHRcbiAqXG4gKiAgIEMtPj5DdHg6IGdldChrZXkpXG4gKiAgIEN0eC0+PkNhY2hlOiBnZXQoa2V5KVxuICogICBhbHQgS2V5IGV4aXN0cyBpbiBjYWNoZVxuICogICAgIENhY2hlLS0+PkN0eDogdmFsdWVcbiAqICAgZWxzZSBLZXkgbm90IGZvdW5kXG4gKiAgICAgQ3R4LT4+Q3R4OiBjaGVjayBwYXJlbnQgY29udGV4dFxuICogICAgIGFsdCBQYXJlbnQgZXhpc3RzXG4gKiAgICAgICBDdHgtPj5QYXJlbnQ6IGdldChrZXkpXG4gKiAgICAgICBQYXJlbnQtLT4+Q3R4OiB2YWx1ZVxuICogICAgIGVsc2UgTm8gcGFyZW50XG4gKiAgICAgICBDdHgtLT4+QzogdGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiAgIEN0eC0tPj5DOiByZXF1ZXN0ZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHQ8RiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjYWNoZVwiLCB7XG4gICAgICB2YWx1ZTogbmV3IE9iamVjdEFjY3VtdWxhdG9yPEY+KCksXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmYWN0b3J5OiBDb250ZXh0RmFjdG9yeTxhbnk+ID0gRGVmYXVsdENvbnRleHRGYWN0b3J5O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IEYgJiBPYmplY3RBY2N1bXVsYXRvcjxGPiA9XG4gICAgbmV3IE9iamVjdEFjY3VtdWxhdG9yKCkgYXMgRiAmIE9iamVjdEFjY3VtdWxhdG9yPEY+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgbmV3IHZhbHVlcyBpbnRvIHRoZSBjb250ZXh0LlxuICAgKiBAc3VtbWFyeSBNZXJnZXMgdGhlIHByb3ZpZGVkIHZhbHVlIG9iamVjdCB3aXRoIHRoZSBleGlzdGluZyBjb250ZXh0IHN0YXRlLFxuICAgKiBjcmVhdGluZyBhIG5ldyBpbW11dGFibGUgY2FjaGUgc3RhdGUuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBGIC0gY3VycmVudCBhY2N1bXVsYXRvciB0eXBlXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBleHRlbmRpbmcgb2JqZWN0IGZvciB0aGUgdmFsdWVzIHRvIGFjY3VtdWxhdGVcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgY29udGFpbmluZyB2YWx1ZXMgdG8gYWNjdW11bGF0ZVxuICAgKiBAcmV0dXJucyBBIG5ldyBjb250ZXh0IGluc3RhbmNlIHdpdGggYWNjdW11bGF0ZWQgdmFsdWVzXG4gICAqL1xuICBhY2N1bXVsYXRlPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FjaGVcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuY2FjaGUuYWNjdW11bGF0ZSh2YWx1ZSksXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIENvbnRleHQ8RiAmIFY+O1xuICB9XG5cbiAgZ2V0IHRpbWVzdGFtcCgpIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS50aW1lc3RhbXA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGNvbnRleHQgYnkga2V5LlxuICAgKiBAc3VtbWFyeSBBdHRlbXB0cyB0byBnZXQgYSB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IGNvbnRleHQncyBjYWNoZS5cbiAgICogSWYgbm90IGZvdW5kLCB0cmF2ZXJzZXMgdXAgdGhlIHBhcmVudCBjb250ZXh0IGNoYWluLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgSyAtIFR5cGUgZXh0ZW5kaW5nIGtleW9mIEYgZm9yIHRoZSBrZXkgdG8gcmV0cmlldmVcbiAgICogQHRlbXBsYXRlIEYgLSBBY2N1bXVsYXRvciB0eXBlXG4gICAqIEBwYXJhbSB7S30ga2V5IC0gVGhlIGtleSB0byByZXRyaWV2ZSBmcm9tIHRoZSBjb250ZXh0XG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIGNvbnRleHQgY2hhaW5cbiAgICovXG4gIGdldDxLIGV4dGVuZHMga2V5b2YgRj4oa2V5OiBLKTogRltLXSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmICh0aGlzLmNhY2hlLnBhcmVudENvbnRleHQpIHJldHVybiB0aGlzLmNhY2hlLnBhcmVudENvbnRleHQuZ2V0KGtleSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNoaWxkIGNvbnRleHRcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgbmV3IGNvbnRleHQgaW5zdGFuY2Ugd2l0aCBjdXJyZW50IGNvbnRleHQgYXMgcGFyZW50XG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzfSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHR5cGVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gW21vZGVsXSAtIE9wdGlvbmFsIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDfSBOZXcgY2hpbGQgY29udGV4dCBpbnN0YW5jZVxuICAgKi9cbiAgY2hpbGQ8TSBleHRlbmRzIE1vZGVsLCBDIGV4dGVuZHMgQ29udGV4dDxGPj4oXG4gICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLFxuICAgIG1vZGVsPzogQ29uc3RydWN0b3I8TT5cbiAgKTogQyB7XG4gICAgcmV0dXJuIENvbnRleHQuY2hpbGRGcm9tPEYsIEM+KFxuICAgICAgdGhpcyBhcyB1bmtub3duIGFzIEMsXG4gICAgICB7XG4gICAgICAgIG9wZXJhdGlvbjogb3BlcmF0aW9uLFxuICAgICAgICBhZmZlY3RlZFRhYmxlczogbW9kZWwgPyBbbW9kZWxdIDogW10sXG4gICAgICB9IGFzIHVua25vd24gYXMgUGFydGlhbDxGPlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBjaGlsZCBjb250ZXh0IGZyb20gYW5vdGhlciBjb250ZXh0XG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIG5ldyBjb250ZXh0IGluc3RhbmNlIHdpdGggcGFyZW50IHJlZmVyZW5jZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgRiAtIFR5cGUgZXh0ZW5kaW5nIFJlcG9zaXRvcnkgRmxhZ3NcbiAgICogQHRlbXBsYXRlIEMgLSBUeXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gICAqIEBwYXJhbSB7Q30gY29udGV4dCAtIFRoZSBwYXJlbnQgY29udGV4dFxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IFtvdmVycmlkZXNdIC0gT3B0aW9uYWwgZmxhZyBvdmVycmlkZXNcbiAgICogQHJldHVybnMge0N9IE5ldyBjaGlsZCBjb250ZXh0IGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgY2hpbGRGcm9tPEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsIEMgZXh0ZW5kcyBDb250ZXh0PEY+PihcbiAgICBjb250ZXh0OiBDLFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8Rj5cbiAgKTogQyB7XG4gICAgcmV0dXJuIENvbnRleHQuZmFjdG9yeShcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIGNvbnRleHQuY2FjaGUsIG92ZXJyaWRlcyB8fCB7fSlcbiAgICApIGFzIHVua25vd24gYXMgQztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb250ZXh0IGZyb20gb3BlcmF0aW9uIHBhcmFtZXRlcnNcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgY29udGV4dCBpbnN0YW5jZSBmb3Igc3BlY2lmaWMgb3BlcmF0aW9uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBGIC0gVHlwZSBleHRlbmRpbmcgUmVwb3NpdG9yeSBGbGFnc1xuICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5cy5ERUxFVEV9IG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gdHlwZVxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IG92ZXJyaWRlcyAtIEZsYWcgb3ZlcnJpZGVzXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7YW55fSBhcmdzIC0gT3BlcmF0aW9uIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gbmV3IGNvbnRleHRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBmcm9tPFxuICAgIE0gZXh0ZW5kcyBNb2RlbCxcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuICA+KFxuICAgIG9wZXJhdGlvbjpcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgIG92ZXJyaWRlczogUGFydGlhbDxGPixcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8Qz4ge1xuICAgIHJldHVybiBDb250ZXh0LmZhY3RvcnkoXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0UmVwb3NpdG9yeUZsYWdzLCBvdmVycmlkZXMsIHtcbiAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb24sXG4gICAgICAgIG1vZGVsOiBtb2RlbCxcbiAgICAgIH0pXG4gICAgKSBhcyBDO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhcmd1bWVudHMgZm9yIGNvbnRleHQgb3BlcmF0aW9uc1xuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgY29udGV4dCBhcmdzIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW9uIHBhcmFtZXRlcnNcbiAgICpcbiAgICogQHRlbXBsYXRlIEYgLSBUeXBlIGV4dGVuZGluZyB7QGxpbmsgUmVwb3NpdG9yeUZsYWdzfVxuICAgKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIHtAbGluayBNb2RlbH1cbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzLkRFTEVURX0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiB0eXBlXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7YW55W119IGFyZ3MgLSBPcGVyYXRpb24gYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Q29udGV4dHVhbDxGPn0gW2NvbnRleHR1YWxdIC0gT3B0aW9uYWwgY29udGV4dHVhbCBvYmplY3RcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEY+fSBbb3ZlcnJpZGVzXSAtIE9wdGlvbmFsIGZsYWcgb3ZlcnJpZGVzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENvbnRleHRBcmdzPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gY29udGV4dCBhcmd1bWVudHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDb250ZXh0XG4gICAqICAgcGFydGljaXBhbnQgTSBhcyBNb2RlbFxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQXJnc1xuICAgKlxuICAgKiAgIEMtPj5DOiBSZWNlaXZlIG9wZXJhdGlvbiByZXF1ZXN0XG4gICAqICAgQy0+Pk06IFZhbGlkYXRlIG1vZGVsIGNvbnN0cnVjdG9yXG4gICAqICAgQy0+PkM6IENyZWF0ZSBjaGlsZCBjb250ZXh0XG4gICAqICAgQy0+PkE6IFByb2Nlc3Mgb3BlcmF0aW9uIGFyZ3NcbiAgICogICBBLT4+QzogUmV0dXJuIGNvbnRleHQgYXJnc1xuICAgKiAgIEMtPj5DOiBBcHBseSBvdmVycmlkZXNcbiAgICogICBDLT4+QzogUmV0dXJuIGZpbmFsIGNvbnRleHRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBhcmdzPFxuICAgIE0gZXh0ZW5kcyBNb2RlbDxhbnk+LFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+LFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gID4oXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5VUERBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIGFyZ3M6IGFueVtdLFxuICAgIGNvbnRleHR1YWw/OiBDb250ZXh0dWFsPEY+LFxuICAgIG92ZXJyaWRlcz86IFBhcnRpYWw8Rj5cbiAgKTogUHJvbWlzZTxDb250ZXh0QXJnczxGLCBDPj4ge1xuICAgIGNvbnN0IGxhc3QgPSBhcmdzLnBvcCgpO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0Q29udGV4dCgpIHtcbiAgICAgIGlmIChjb250ZXh0dWFsKVxuICAgICAgICByZXR1cm4gY29udGV4dHVhbC5jb250ZXh0KG9wZXJhdGlvbiwgb3ZlcnJpZGVzIHx8IHt9LCBtb2RlbCwgLi4uYXJncyk7XG4gICAgICByZXR1cm4gQ29udGV4dC5mcm9tKG9wZXJhdGlvbiwgb3ZlcnJpZGVzIHx8IHt9LCBtb2RlbCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgbGV0IGM6IEM7XG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIGlmIChsYXN0IGluc3RhbmNlb2YgQ29udGV4dCkge1xuICAgICAgICBjID0gbGFzdCBhcyBDO1xuICAgICAgICBhcmdzLnB1c2gobGFzdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2gobGFzdCk7XG4gICAgICAgIGMgPSAoYXdhaXQgZ2V0Q29udGV4dCgpKSBhcyBDO1xuICAgICAgICBhcmdzLnB1c2goYyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgPSAoYXdhaXQgZ2V0Q29udGV4dCgpKSBhcyBDO1xuICAgICAgYXJncy5wdXNoKGMpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNvbnRleHQ6IGMsIGFyZ3M6IGFyZ3MgfTtcbiAgfVxufVxuIl19
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZXBvc2l0b3J5L0NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHVCQUFvQjtBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWM3RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBd0IsQ0FJeEQsR0FBeUIsRUFDekIsRUFBRTtJQUNGLE9BQU8sSUFBSSxPQUFPLEVBQUssQ0FBQyxVQUFVLENBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLENBQU0sQ0FDbEQsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQUNsQjtRQVdTLFVBQUssR0FDWixJQUFJLGlCQUFpQixFQUNHLENBQUM7UUFaekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRSxJQUFJLGlCQUFpQixFQUFLO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzthQUVNLFlBQU8sR0FBd0IscUJBQXFCLEFBQTdDLENBQThDO0lBTTVEOzs7O09BSUc7SUFDSCxVQUFVLENBQW1CLEtBQVE7UUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRyxJQUFJLENBQUMsS0FBZ0MsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQy9ELFFBQVEs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bnRleHRBcmdzIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IENvbnRleHR1YWwgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9Db250ZXh0dWFsXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIi4uL29wZXJhdGlvbnMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBEZWZhdWx0UmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnlGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgY29udGV4dCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgZnVuY3Rpb24gdHlwZSB0aGF0IGNyZWF0ZXMgY29udGV4dCBpbnN0YW5jZXMgd2l0aCBzcGVjaWZpYyByZXBvc2l0b3J5IGZsYWdzLlxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlIGV4dGVuZGluZyBSZXBvc2l0b3J5RmxhZ3NcbiAqIEB0eXBlZGVmIHtGdW5jdGlvbn0gQ29udGV4dEZhY3RvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgdHlwZSBDb250ZXh0RmFjdG9yeTxGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzPiA9IDxDIGV4dGVuZHMgQ29udGV4dDxGPj4oXG4gIGFyZzogT21pdDxGLCBcInRpbWVzdGFtcFwiPlxuKSA9PiBDO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGZhY3RvcnkgZm9yIGNyZWF0aW5nIGNvbnRleHQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgQSBmYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgQ29udGV4dCBpbnN0YW5jZXMgd2l0aCB0aGUgcHJvdmlkZWQgcmVwb3NpdG9yeSBmbGFncy5cbiAqIEl0IGF1dG9tYXRpY2FsbHkgYWRkcyBhIHRpbWVzdGFtcCB0byB0aGUgY29udGV4dCBhbmQgcmV0dXJucyBhIHByb3Blcmx5IHR5cGVkIGNvbnRleHQgaW5zdGFuY2UuXG4gKiBAY29uc3QgRGVmYXVsdENvbnRleHRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmRiLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRDb250ZXh0RmFjdG9yeTogQ29udGV4dEZhY3Rvcnk8YW55PiA9IDxcbiAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4+KFxuICBhcmc6IE9taXQ8RiwgXCJ0aW1lc3RhbXBcIj5cbikgPT4ge1xuICByZXR1cm4gbmV3IENvbnRleHQ8Rj4oKS5hY2N1bXVsYXRlKFxuICAgIE9iamVjdC5hc3NpZ24oe30sIGFyZywgeyB0aW1lc3RhbXA6IG5ldyBEYXRlKCkgfSkgYXMgRlxuICApIGFzIEM7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIGNvbnRleHQgbWFuYWdlbWVudCBjbGFzcyBmb3IgaGFuZGxpbmcgcmVwb3NpdG9yeSBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIENvbnRleHQgY2xhc3MgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIG1hbmFnaW5nIHJlcG9zaXRvcnkgb3BlcmF0aW9ucyB3aXRoIGZsYWdzLFxuICogcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMsIGFuZCBzdGF0ZSBhY2N1bXVsYXRpb24uIEl0IGFsbG93cyBmb3IgaGllcmFyY2hpY2FsIGNvbnRleHQgY2hhaW5zXG4gKiBhbmQgbWFpbnRhaW5zIG9wZXJhdGlvbi1zcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3aGlsZSBzdXBwb3J0aW5nIHR5cGUgc2FmZXR5IHRocm91Z2ggZ2VuZXJpY3MuXG4gKlxuICogQHRlbXBsYXRlIEYgLSBUeXBlIGV4dGVuZGluZyBSZXBvc2l0b3J5RmxhZ3MgdGhhdCBkZWZpbmVzIHRoZSBjb250ZXh0IGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdEFjY3VtdWxhdG9yPEY+fSBjYWNoZSAtIFRoZSBpbnRlcm5hbCBjYWNoZSBzdG9yaW5nIGFjY3VtdWxhdGVkIHZhbHVlc1xuICpcbiAqIEBjbGFzc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGluZyBhIG5ldyBjb250ZXh0IHdpdGggcmVwb3NpdG9yeSBmbGFnc1xuICogY29uc3QgY29udGV4dCA9IG5ldyBDb250ZXh0PFJlcG9zaXRvcnlGbGFncz4oKTtcbiAqXG4gKiAvLyBBY2N1bXVsYXRpbmcgdmFsdWVzXG4gKiBjb25zdCBlbnJpY2hlZENvbnRleHQgPSBjb250ZXh0LmFjY3VtdWxhdGUoe1xuICogICB3cml0ZU9wZXJhdGlvbjogdHJ1ZSxcbiAqICAgYWZmZWN0ZWRUYWJsZXM6IFsndXNlcnMnXSxcbiAqICAgb3BlcmF0aW9uOiBPcGVyYXRpb25LZXlzLkNSRUFURVxuICogfSk7XG4gKlxuICogLy8gQWNjZXNzaW5nIHZhbHVlc1xuICogY29uc3QgaXNXcml0ZSA9IGVucmljaGVkQ29udGV4dC5nZXQoJ3dyaXRlT3BlcmF0aW9uJyk7IC8vIHRydWVcbiAqIGNvbnN0IHRhYmxlcyA9IGVucmljaGVkQ29udGV4dC5nZXQoJ2FmZmVjdGVkVGFibGVzJyk7IC8vIFsndXNlcnMnXVxuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICogICBwYXJ0aWNpcGFudCBDdHggYXMgQ29udGV4dFxuICogICBwYXJ0aWNpcGFudCBDYWNoZSBhcyBPYmplY3RBY2N1bXVsYXRvclxuICpcbiAqICAgQy0+PkN0eDogbmV3IENvbnRleHQoKVxuICogICBDdHgtPj5DYWNoZTogY3JlYXRlIGNhY2hlXG4gKlxuICogICBDLT4+Q3R4OiBhY2N1bXVsYXRlKHZhbHVlKVxuICogICBDdHgtPj5DYWNoZTogYWNjdW11bGF0ZSh2YWx1ZSlcbiAqICAgQ2FjaGUtLT4+Q3R4OiB1cGRhdGVkIGNhY2hlXG4gKiAgIEN0eC0tPj5DOiB1cGRhdGVkIGNvbnRleHRcbiAqXG4gKiAgIEMtPj5DdHg6IGdldChrZXkpXG4gKiAgIEN0eC0+PkNhY2hlOiBnZXQoa2V5KVxuICogICBhbHQgS2V5IGV4aXN0cyBpbiBjYWNoZVxuICogICAgIENhY2hlLS0+PkN0eDogdmFsdWVcbiAqICAgZWxzZSBLZXkgbm90IGZvdW5kXG4gKiAgICAgQ3R4LT4+Q3R4OiBjaGVjayBwYXJlbnQgY29udGV4dFxuICogICAgIGFsdCBQYXJlbnQgZXhpc3RzXG4gKiAgICAgICBDdHgtPj5QYXJlbnQ6IGdldChrZXkpXG4gKiAgICAgICBQYXJlbnQtLT4+Q3R4OiB2YWx1ZVxuICogICAgIGVsc2UgTm8gcGFyZW50XG4gKiAgICAgICBDdHgtLT4+QzogdGhyb3cgZXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiAgIEN0eC0tPj5DOiByZXF1ZXN0ZWQgdmFsdWVcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRleHQ8RiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncz4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjYWNoZVwiLCB7XG4gICAgICB2YWx1ZTogbmV3IE9iamVjdEFjY3VtdWxhdG9yPEY+KCksXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmYWN0b3J5OiBDb250ZXh0RmFjdG9yeTxhbnk+ID0gRGVmYXVsdENvbnRleHRGYWN0b3J5O1xuXG4gIHJlYWRvbmx5IGNhY2hlOiBSZXBvc2l0b3J5RmxhZ3MgJiBPYmplY3RBY2N1bXVsYXRvcjxhbnk+ID1cbiAgICBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKSBhcyB1bmtub3duIGFzIFJlcG9zaXRvcnlGbGFncyAmXG4gICAgICBPYmplY3RBY2N1bXVsYXRvcjxhbnk+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgbmV3IHZhbHVlcyBpbnRvIHRoZSBjb250ZXh0LlxuICAgKiBAc3VtbWFyeSBNZXJnZXMgdGhlIHByb3ZpZGVkIHZhbHVlIG9iamVjdCB3aXRoIHRoZSBleGlzdGluZyBjb250ZXh0IHN0YXRlLFxuICAgKiBjcmVhdGluZyBhIG5ldyBpbW11dGFibGUgY2FjaGUgc3RhdGUuXG4gICAqL1xuICBhY2N1bXVsYXRlPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FjaGVcIiwge1xuICAgICAgdmFsdWU6ICh0aGlzLmNhY2hlIGFzIE9iamVjdEFjY3VtdWxhdG9yPGFueT4pLmFjY3VtdWxhdGUodmFsdWUpLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBDb250ZXh0PEYgJiBWPjtcbiAgfVxuXG4gIGdldCB0aW1lc3RhbXAoKSB7XG4gICAgcmV0dXJuICh0aGlzLmNhY2hlIGFzIGFueSkudGltZXN0YW1wIGFzIEZbXCJ0aW1lc3RhbXBcIl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGNvbnRleHQgYnkga2V5LlxuICAgKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBGPihrZXk6IEspOiBGW0tdIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICh0aGlzLmNhY2hlIGFzIE9iamVjdEFjY3VtdWxhdG9yPGFueT4pLmdldChcbiAgICAgICAga2V5IGFzIHVua25vd24gYXMgc3RyaW5nXG4gICAgICApIGFzIEZbS107XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgY29uc3QgcGFyZW50ID0gKHRoaXMuY2FjaGUgYXMgYW55KS5wYXJlbnRDb250ZXh0IGFzXG4gICAgICAgIHwgQ29udGV4dDxGPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwYXJlbnQpIHJldHVybiBwYXJlbnQuZ2V0KGtleSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNoaWxkIGNvbnRleHQgZnJvbSBhbm90aGVyIGNvbnRleHRcbiAgICovXG4gIHN0YXRpYyBjaGlsZEZyb208RiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncywgQyBleHRlbmRzIENvbnRleHQ8Rj4+KFxuICAgIGNvbnRleHQ6IEMsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGPlxuICApOiBDIHtcbiAgICByZXR1cm4gQ29udGV4dC5mYWN0b3J5KFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgKGNvbnRleHQgYXMgYW55KS5jYWNoZSwgb3ZlcnJpZGVzIHx8IHt9KVxuICAgICkgYXMgdW5rbm93biBhcyBDO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgZnJvbSBvcGVyYXRpb24gcGFyYW1ldGVyc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGZyb208XG4gICAgTSBleHRlbmRzIE1vZGVsLFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4gID4oXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5VUERBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEY+LFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxDPiB7XG4gICAgcmV0dXJuIENvbnRleHQuZmFjdG9yeShcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRSZXBvc2l0b3J5RmxhZ3MgYXMgUmVwb3NpdG9yeUZsYWdzLCBvdmVycmlkZXMsIHtcbiAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb24sXG4gICAgICAgIG1vZGVsOiBtb2RlbCxcbiAgICAgIH0pXG4gICAgKSBhcyBDO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBhcmd1bWVudHMgZm9yIGNvbnRleHQgb3BlcmF0aW9uc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFyZ3M8XG4gICAgTSBleHRlbmRzIE1vZGVsPGFueT4sXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4gICAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgPihcbiAgICBvcGVyYXRpb246XG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgYXJnczogYW55W10sXG4gICAgY29udGV4dHVhbD86IENvbnRleHR1YWw8Rj4sXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGPlxuICApOiBQcm9taXNlPENvbnRleHRBcmdzPEYsIEM+PiB7XG4gICAgY29uc3QgbGFzdCA9IGFyZ3MucG9wKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgICAgaWYgKGNvbnRleHR1YWwpXG4gICAgICAgIHJldHVybiBjb250ZXh0dWFsLmNvbnRleHQob3BlcmF0aW9uLCBvdmVycmlkZXMgfHwge30sIG1vZGVsLCAuLi5hcmdzKTtcbiAgICAgIHJldHVybiBDb250ZXh0LmZyb20ob3BlcmF0aW9uLCBvdmVycmlkZXMgfHwge30sIG1vZGVsLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBsZXQgYzogQztcbiAgICBpZiAobGFzdCkge1xuICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgICAgIGMgPSBsYXN0IGFzIEM7XG4gICAgICAgIGFyZ3MucHVzaChsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaChsYXN0KTtcbiAgICAgICAgYyA9IChhd2FpdCBnZXRDb250ZXh0KCkpIGFzIEM7XG4gICAgICAgIGFyZ3MucHVzaChjKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYyA9IChhd2FpdCBnZXRDb250ZXh0KCkpIGFzIEM7XG4gICAgICBhcmdzLnB1c2goYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29udGV4dDogYywgYXJnczogYXJncyB9O1xuICB9XG59XG4iXX0=
|
package/lib/index.cjs
CHANGED
|
@@ -32,5 +32,5 @@ __exportStar(require("./validation/index.cjs"), exports);
|
|
|
32
32
|
* @const VERSION
|
|
33
33
|
* @memberOf module:db-decorators
|
|
34
34
|
*/
|
|
35
|
-
exports.VERSION = "0.6.
|
|
35
|
+
exports.VERSION = "0.6.8";
|
|
36
36
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1REFBMkI7QUFDM0IseURBQTZCO0FBQzdCLG9EQUF3QjtBQUN4Qix5REFBNkI7QUFDN0IseURBQTZCO0FBQzdCLHlEQUE2QjtBQUU3Qjs7OztHQUlHO0FBR0g7Ozs7O0dBS0c7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9pZGVudGl0eVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50ZXJmYWNlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wZXJhdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGF0YWJhc2UgZGVjb3JhdG9ycyBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnNcbiAqIEBzdW1tYXJ5IEEgY29tcHJlaGVuc2l2ZSBsaWJyYXJ5IHByb3ZpZGluZyBkZWNvcmF0b3JzIGFuZCB1dGlsaXRpZXMgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMsIG1vZGVsIGRlZmluaXRpb25zLCB2YWxpZGF0aW9uLCBhbmQgcmVwb3NpdG9yeSBwYXR0ZXJucyBpbiBUeXBlU2NyaXB0IGFwcGxpY2F0aW9uc1xuICogQG1vZHVsZSBkYi1kZWNvcmF0b3JzXG4gKi9cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIHJlZmxlY3Rpb24gcGFja2FnZVxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgcGFja2FnZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
|
package/lib/index.d.ts
CHANGED
|
@@ -87,11 +87,6 @@ class Context {
|
|
|
87
87
|
* @description Accumulates new values into the context.
|
|
88
88
|
* @summary Merges the provided value object with the existing context state,
|
|
89
89
|
* creating a new immutable cache state.
|
|
90
|
-
*
|
|
91
|
-
* @template F - current accumulator type
|
|
92
|
-
* @template V - Type extending object for the values to accumulate
|
|
93
|
-
* @param {V} value - The object containing values to accumulate
|
|
94
|
-
* @returns A new context instance with accumulated values
|
|
95
90
|
*/
|
|
96
91
|
accumulate(value) {
|
|
97
92
|
Object.defineProperty(this, "cache", {
|
|
@@ -107,64 +102,26 @@ class Context {
|
|
|
107
102
|
}
|
|
108
103
|
/**
|
|
109
104
|
* @description Retrieves a value from the context by key.
|
|
110
|
-
* @summary Attempts to get a value from the current context's cache.
|
|
111
|
-
* If not found, traverses up the parent context chain.
|
|
112
|
-
*
|
|
113
|
-
* @template K - Type extending keyof F for the key to retrieve
|
|
114
|
-
* @template F - Accumulator type
|
|
115
|
-
* @param {K} key - The key to retrieve from the context
|
|
116
|
-
* @returns The value associated with the key
|
|
117
|
-
* @throws {Error} If the key is not found in the context chain
|
|
118
105
|
*/
|
|
119
106
|
get(key) {
|
|
120
107
|
try {
|
|
121
108
|
return this.cache.get(key);
|
|
122
109
|
}
|
|
123
110
|
catch (e) {
|
|
124
|
-
|
|
125
|
-
|
|
111
|
+
const parent = this.cache.parentContext;
|
|
112
|
+
if (parent)
|
|
113
|
+
return parent.get(key);
|
|
126
114
|
throw e;
|
|
127
115
|
}
|
|
128
116
|
}
|
|
129
|
-
/**
|
|
130
|
-
* @description Creates a child context
|
|
131
|
-
* @summary Generates a new context instance with current context as parent
|
|
132
|
-
*
|
|
133
|
-
* @template M - Type extending Model
|
|
134
|
-
* @param {OperationKeys} operation - The operation type
|
|
135
|
-
* @param {Constructor<M>} [model] - Optional model constructor
|
|
136
|
-
* @returns {C} New child context instance
|
|
137
|
-
*/
|
|
138
|
-
child(operation, model) {
|
|
139
|
-
return Context.childFrom(this, {
|
|
140
|
-
operation: operation,
|
|
141
|
-
affectedTables: model ? [model] : [],
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
117
|
/**
|
|
145
118
|
* @description Creates a child context from another context
|
|
146
|
-
* @summary Generates a new context instance with parent reference
|
|
147
|
-
*
|
|
148
|
-
* @template F - Type extending Repository Flags
|
|
149
|
-
* @template C - Type extending Context<F>
|
|
150
|
-
* @param {C} context - The parent context
|
|
151
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
152
|
-
* @returns {C} New child context instance
|
|
153
119
|
*/
|
|
154
120
|
static childFrom(context, overrides) {
|
|
155
121
|
return Context.factory(Object.assign({}, context.cache, overrides || {}));
|
|
156
122
|
}
|
|
157
123
|
/**
|
|
158
124
|
* @description Creates a new context from operation parameters
|
|
159
|
-
* @summary Generates a context instance for specific operation
|
|
160
|
-
*
|
|
161
|
-
* @template F - Type extending Repository Flags
|
|
162
|
-
* @template M - Type extending Model
|
|
163
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
164
|
-
* @param {Partial<F>} overrides - Flag overrides
|
|
165
|
-
* @param {Constructor<M>} model - The model constructor
|
|
166
|
-
* @param {any} args - Operation arguments
|
|
167
|
-
* @returns {Promise<C>} Promise resolving to new context
|
|
168
125
|
*/
|
|
169
126
|
static async from(operation, overrides, model,
|
|
170
127
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -176,30 +133,6 @@ class Context {
|
|
|
176
133
|
}
|
|
177
134
|
/**
|
|
178
135
|
* @description Prepares arguments for context operations
|
|
179
|
-
* @summary Creates a context args object with the specified operation parameters
|
|
180
|
-
*
|
|
181
|
-
* @template F - Type extending {@link RepositoryFlags}
|
|
182
|
-
* @template M - Type extending {@link Model}
|
|
183
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
184
|
-
* @param {Constructor<M>} model - The model constructor
|
|
185
|
-
* @param {any[]} args - Operation arguments
|
|
186
|
-
* @param {Contextual<F>} [contextual] - Optional contextual object
|
|
187
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
188
|
-
* @returns {Promise<ContextArgs>} Promise resolving to context arguments
|
|
189
|
-
*
|
|
190
|
-
* @mermaid
|
|
191
|
-
* sequenceDiagram
|
|
192
|
-
* participant C as Context
|
|
193
|
-
* participant M as Model
|
|
194
|
-
* participant A as Args
|
|
195
|
-
*
|
|
196
|
-
* C->>C: Receive operation request
|
|
197
|
-
* C->>M: Validate model constructor
|
|
198
|
-
* C->>C: Create child context
|
|
199
|
-
* C->>A: Process operation args
|
|
200
|
-
* A->>C: Return context args
|
|
201
|
-
* C->>C: Apply overrides
|
|
202
|
-
* C->>C: Return final context
|
|
203
136
|
*/
|
|
204
137
|
static async args(operation, model, args, contextual, overrides) {
|
|
205
138
|
const last = args.pop();
|
|
@@ -228,4 +161,4 @@ class Context {
|
|
|
228
161
|
}
|
|
229
162
|
}
|
|
230
163
|
exports.Context = Context;
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L0NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsK0NBQXFEO0FBQ3JELHVFQUE2RDtBQWM3RDs7Ozs7O0dBTUc7QUFDSSxNQUFNLHFCQUFxQixHQUF3QixDQUl4RCxHQUF5QixFQUN6QixFQUFFO0lBQ0YsT0FBTyxJQUFJLE9BQU8sRUFBSyxDQUFDLFVBQVUsQ0FDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBTSxDQUNsRCxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBVFcsUUFBQSxxQkFBcUIseUJBU2hDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlERztBQUNILE1BQWEsT0FBTztJQUNsQjtRQVdpQixVQUFLLEdBQ3BCLElBQUksNENBQWlCLEVBQThCLENBQUM7UUFYcEQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRSxJQUFJLDRDQUFpQixFQUFLO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzthQUVNLFlBQU8sR0FBd0IsNkJBQXFCLEFBQTdDLENBQThDO0lBSzVEOzs7Ozs7Ozs7T0FTRztJQUNILFVBQVUsQ0FBbUIsS0FBUTtRQUNuQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNuQyxRQUFRLEVBQUUsS0FBSztZQUNmLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlB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QUFNLENBQUM7WUFDTixDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsRUFBRSxDQUFNLENBQUM7WUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDcEMsQ0FBQzs7QUF6TUgsMEJBME1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGV4dEFyZ3MgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgQ29udGV4dHVhbCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0NvbnRleHR1YWxcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IERlZmF1bHRSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9iamVjdEFjY3VtdWxhdG9yIH0gZnJvbSBcInR5cGVkLW9iamVjdC1hY2N1bXVsYXRvclwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSB0eXBlIGZvciBjcmVhdGluZyBjb250ZXh0IGluc3RhbmNlcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBmdW5jdGlvbiB0eXBlIHRoYXQgY3JlYXRlcyBjb250ZXh0IGluc3RhbmNlcyB3aXRoIHNwZWNpZmljIHJlcG9zaXRvcnkgZmxhZ3MuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUgZXh0ZW5kaW5nIFJlcG9zaXRvcnlGbGFnc1xuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDb250ZXh0RmFjdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRGYWN0b3J5PEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3M+ID0gPEMgZXh0ZW5kcyBDb250ZXh0PEY+PihcbiAgYXJnOiBPbWl0PEYsIFwidGltZXN0YW1wXCI+XG4pID0+IEM7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgZmFjdG9yeSBmb3IgY3JlYXRpbmcgY29udGV4dCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIG5ldyBDb250ZXh0IGluc3RhbmNlcyB3aXRoIHRoZSBwcm92aWRlZCByZXBvc2l0b3J5IGZsYWdzLlxuICogSXQgYXV0b21hdGljYWxseSBhZGRzIGEgdGltZXN0YW1wIHRvIHRoZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgcHJvcGVybHkgdHlwZWQgY29udGV4dCBpbnN0YW5jZS5cbiAqIEBjb25zdCBEZWZhdWx0Q29udGV4dEZhY3RvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbnRleHRGYWN0b3J5OiBDb250ZXh0RmFjdG9yeTxhbnk+ID0gPFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4oXG4gIGFyZzogT21pdDxGLCBcInRpbWVzdGFtcFwiPlxuKSA9PiB7XG4gIHJldHVybiBuZXcgQ29udGV4dDxGPigpLmFjY3VtdWxhdGUoXG4gICAgT2JqZWN0LmFzc2lnbih7fSwgYXJnLCB7IHRpbWVzdGFtcDogbmV3IERhdGUoKSB9KSBhcyBGXG4gICkgYXMgQztcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgY29udGV4dCBtYW5hZ2VtZW50IGNsYXNzIGZvciBoYW5kbGluZyByZXBvc2l0b3J5IG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgQ29udGV4dCBjbGFzcyBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgcmVwb3NpdG9yeSBvcGVyYXRpb25zIHdpdGggZmxhZ3MsXG4gKiBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcywgYW5kIHN0YXRlIGFjY3VtdWxhdGlvbi4gSXQgYWxsb3dzIGZvciBoaWVyYXJjaGljYWwgY29udGV4dCBjaGFpbnNcbiAqIGFuZCBtYWludGFpbnMgb3BlcmF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdoaWxlIHN1cHBvcnRpbmcgdHlwZSBzYWZldHkgdGhyb3VnaCBnZW5lcmljcy5cbiAqXG4gKiBAdGVtcGxhdGUgRiAtIFR5cGUgZXh0ZW5kaW5nIFJlcG9zaXRvcnlGbGFncyB0aGF0IGRlZmluZXMgdGhlIGNvbnRleHQgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0QWNjdW11bGF0b3I8Rj59IGNhY2hlIC0gVGhlIGludGVybmFsIGNhY2hlIHN0b3JpbmcgYWNjdW11bGF0ZWQgdmFsdWVzXG4gKlxuICogQGNsYXNzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0aW5nIGEgbmV3IGNvbnRleHQgd2l0aCByZXBvc2l0b3J5IGZsYWdzXG4gKiBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQ8UmVwb3NpdG9yeUZsYWdzPigpO1xuICpcbiAqIC8vIEFjY3VtdWxhdGluZyB2YWx1ZXNcbiAqIGNvbnN0IGVucmljaGVkQ29udGV4dCA9IGNvbnRleHQuYWNjdW11bGF0ZSh7XG4gKiAgIHdyaXRlT3BlcmF0aW9uOiB0cnVlLFxuICogICBhZmZlY3RlZFRhYmxlczogWyd1c2VycyddLFxuICogICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gKiB9KTtcbiAqXG4gKiAvLyBBY2Nlc3NpbmcgdmFsdWVzXG4gKiBjb25zdCBpc1dyaXRlID0gZW5yaWNoZWRDb250ZXh0LmdldCgnd3JpdGVPcGVyYXRpb24nKTsgLy8gdHJ1ZVxuICogY29uc3QgdGFibGVzID0gZW5yaWNoZWRDb250ZXh0LmdldCgnYWZmZWN0ZWRUYWJsZXMnKTsgLy8gWyd1c2VycyddXG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEN0eCBhcyBDb250ZXh0XG4gKiAgIHBhcnRpY2lwYW50IENhY2hlIGFzIE9iamVjdEFjY3VtdWxhdG9yXG4gKlxuICogICBDLT4+Q3R4OiBuZXcgQ29udGV4dCgpXG4gKiAgIEN0eC0+PkNhY2hlOiBjcmVhdGUgY2FjaGVcbiAqXG4gKiAgIEMtPj5DdHg6IGFjY3VtdWxhdGUodmFsdWUpXG4gKiAgIEN0eC0+PkNhY2hlOiBhY2N1bXVsYXRlKHZhbHVlKVxuICogICBDYWNoZS0tPj5DdHg6IHVwZGF0ZWQgY2FjaGVcbiAqICAgQ3R4LS0+PkM6IHVwZGF0ZWQgY29udGV4dFxuICpcbiAqICAgQy0+PkN0eDogZ2V0KGtleSlcbiAqICAgQ3R4LT4+Q2FjaGU6IGdldChrZXkpXG4gKiAgIGFsdCBLZXkgZXhpc3RzIGluIGNhY2hlXG4gKiAgICAgQ2FjaGUtLT4+Q3R4OiB2YWx1ZVxuICogICBlbHNlIEtleSBub3QgZm91bmRcbiAqICAgICBDdHgtPj5DdHg6IGNoZWNrIHBhcmVudCBjb250ZXh0XG4gKiAgICAgYWx0IFBhcmVudCBleGlzdHNcbiAqICAgICAgIEN0eC0+PlBhcmVudDogZ2V0KGtleSlcbiAqICAgICAgIFBhcmVudC0tPj5DdHg6IHZhbHVlXG4gKiAgICAgZWxzZSBObyBwYXJlbnRcbiAqICAgICAgIEN0eC0tPj5DOiB0aHJvdyBlcnJvclxuICogICAgIGVuZFxuICogICBlbmRcbiAqICAgQ3R4LS0+PkM6IHJlcXVlc3RlZCB2YWx1ZVxuICovXG5leHBvcnQgY2xhc3MgQ29udGV4dDxGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhY2hlXCIsIHtcbiAgICAgIHZhbHVlOiBuZXcgT2JqZWN0QWNjdW11bGF0b3I8Rj4oKSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZhY3Rvcnk6IENvbnRleHRGYWN0b3J5PGFueT4gPSBEZWZhdWx0Q29udGV4dEZhY3Rvcnk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogRiAmIE9iamVjdEFjY3VtdWxhdG9yPEY+ID1cbiAgICBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKSBhcyBGICYgT2JqZWN0QWNjdW11bGF0b3I8Rj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyBuZXcgdmFsdWVzIGludG8gdGhlIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IE1lcmdlcyB0aGUgcHJvdmlkZWQgdmFsdWUgb2JqZWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvbnRleHQgc3RhdGUsXG4gICAqIGNyZWF0aW5nIGEgbmV3IGltbXV0YWJsZSBjYWNoZSBzdGF0ZS5cbiAgICpcbiAgICogQHRlbXBsYXRlIEYgLSBjdXJyZW50IGFjY3VtdWxhdG9yIHR5cGVcbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIGV4dGVuZGluZyBvYmplY3QgZm9yIHRoZSB2YWx1ZXMgdG8gYWNjdW11bGF0ZVxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHZhbHVlcyB0byBhY2N1bXVsYXRlXG4gICAqIEByZXR1cm5zIEEgbmV3IGNvbnRleHQgaW5zdGFuY2Ugd2l0aCBhY2N1bXVsYXRlZCB2YWx1ZXNcbiAgICovXG4gIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjYWNoZVwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5jYWNoZS5hY2N1bXVsYXRlKHZhbHVlKSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgQ29udGV4dDxGICYgVj47XG4gIH1cblxuICBnZXQgdGltZXN0YW1wKCkge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnRpbWVzdGFtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgY29udGV4dCBieSBrZXkuXG4gICAqIEBzdW1tYXJ5IEF0dGVtcHRzIHRvIGdldCBhIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCdzIGNhY2hlLlxuICAgKiBJZiBub3QgZm91bmQsIHRyYXZlcnNlcyB1cCB0aGUgcGFyZW50IGNvbnRleHQgY2hhaW4uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBLIC0gVHlwZSBleHRlbmRpbmcga2V5b2YgRiBmb3IgdGhlIGtleSB0byByZXRyaWV2ZVxuICAgKiBAdGVtcGxhdGUgRiAtIEFjY3VtdWxhdG9yIHR5cGVcbiAgICogQHBhcmFtIHtLfSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlIGZyb20gdGhlIGNvbnRleHRcbiAgICogQHJldHVybnMgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5XG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZCBpbiB0aGUgY29udGV4dCBjaGFpblxuICAgKi9cbiAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBGPihrZXk6IEspOiBGW0tdIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KGtleSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKHRoaXMuY2FjaGUucGFyZW50Q29udGV4dCkgcmV0dXJuIHRoaXMuY2FjaGUucGFyZW50Q29udGV4dC5nZXQoa2V5KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgY2hpbGQgY29udGV4dFxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBuZXcgY29udGV4dCBpbnN0YW5jZSB3aXRoIGN1cnJlbnQgY29udGV4dCBhcyBwYXJlbnRcbiAgICpcbiAgICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge09wZXJhdGlvbktleXN9IG9wZXJhdGlvbiAtIFRoZSBvcGVyYXRpb24gdHlwZVxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBbbW9kZWxdIC0gT3B0aW9uYWwgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHJldHVybnMge0N9IE5ldyBjaGlsZCBjb250ZXh0IGluc3RhbmNlXG4gICAqL1xuICBjaGlsZDxNIGV4dGVuZHMgTW9kZWwsIEMgZXh0ZW5kcyBDb250ZXh0PEY+PihcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMsXG4gICAgbW9kZWw/OiBDb25zdHJ1Y3RvcjxNPlxuICApOiBDIHtcbiAgICByZXR1cm4gQ29udGV4dC5jaGlsZEZyb208RiwgQz4oXG4gICAgICB0aGlzIGFzIHVua25vd24gYXMgQyxcbiAgICAgIHtcbiAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb24sXG4gICAgICAgIGFmZmVjdGVkVGFibGVzOiBtb2RlbCA/IFttb2RlbF0gOiBbXSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJ0aWFsPEY+XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGNoaWxkIGNvbnRleHQgZnJvbSBhbm90aGVyIGNvbnRleHRcbiAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgbmV3IGNvbnRleHQgaW5zdGFuY2Ugd2l0aCBwYXJlbnQgcmVmZXJlbmNlXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBGIC0gVHlwZSBleHRlbmRpbmcgUmVwb3NpdG9yeSBGbGFnc1xuICAgKiBAdGVtcGxhdGUgQyAtIFR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAgICogQHBhcmFtIHtDfSBjb250ZXh0IC0gVGhlIHBhcmVudCBjb250ZXh0XG4gICAqIEBwYXJhbSB7UGFydGlhbDxGPn0gW292ZXJyaWRlc10gLSBPcHRpb25hbCBmbGFnIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyB7Q30gTmV3IGNoaWxkIGNvbnRleHQgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBjaGlsZEZyb208RiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncywgQyBleHRlbmRzIENvbnRleHQ8Rj4+KFxuICAgIGNvbnRleHQ6IEMsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGPlxuICApOiBDIHtcbiAgICByZXR1cm4gQ29udGV4dC5mYWN0b3J5KFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgY29udGV4dC5jYWNoZSwgb3ZlcnJpZGVzIHx8IHt9KVxuICAgICkgYXMgdW5rbm93biBhcyBDO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGNvbnRleHQgZnJvbSBvcGVyYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBjb250ZXh0IGluc3RhbmNlIGZvciBzcGVjaWZpYyBvcGVyYXRpb25cbiAgICpcbiAgICogQHRlbXBsYXRlIEYgLSBUeXBlIGV4dGVuZGluZyBSZXBvc2l0b3J5IEZsYWdzXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzLkRFTEVURX0gb3BlcmF0aW9uIC0gVGhlIG9wZXJhdGlvbiB0eXBlXG4gICAqIEBwYXJhbSB7UGFydGlhbDxGPn0gb3ZlcnJpZGVzIC0gRmxhZyBvdmVycmlkZXNcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHthbnl9IGFyZ3MgLSBPcGVyYXRpb24gYXJndW1lbnRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPEM+fSBQcm9taXNlIHJlc29sdmluZyB0byBuZXcgY29udGV4dFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGZyb208XG4gICAgTSBleHRlbmRzIE1vZGVsLFxuICAgIEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3MsXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4gID4oXG4gICAgb3BlcmF0aW9uOlxuICAgICAgfCBPcGVyYXRpb25LZXlzLkNSRUFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLlJFQURcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5VUERBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEY+LFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxDPiB7XG4gICAgcmV0dXJuIENvbnRleHQuZmFjdG9yeShcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRSZXBvc2l0b3J5RmxhZ3MsIG92ZXJyaWRlcywge1xuICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgfSlcbiAgICApIGFzIEM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGFyZ3VtZW50cyBmb3IgY29udGV4dCBvcGVyYXRpb25zXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBjb250ZXh0IGFyZ3Mgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBvcGVyYXRpb24gcGFyYW1ldGVyc1xuICAgKlxuICAgKiBAdGVtcGxhdGUgRiAtIFR5cGUgZXh0ZW5kaW5nIHtAbGluayBSZXBvc2l0b3J5RmxhZ3N9XG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcge0BsaW5rIE1vZGVsfVxuICAgKiBAcGFyYW0ge09wZXJhdGlvbktleXMuREVMRVRFfSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHR5cGVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHthbnlbXX0gYXJncyAtIE9wZXJhdGlvbiBhcmd1bWVudHNcbiAgICogQHBhcmFtIHtDb250ZXh0dWFsPEY+fSBbY29udGV4dHVhbF0gLSBPcHRpb25hbCBjb250ZXh0dWFsIG9iamVjdFxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IFtvdmVycmlkZXNdIC0gT3B0aW9uYWwgZmxhZyBvdmVycmlkZXNcbiAgICogQHJldHVybnMge1Byb21pc2U8Q29udGV4dEFyZ3M+fSBQcm9taXNlIHJlc29sdmluZyB0byBjb250ZXh0IGFyZ3VtZW50c1xuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENvbnRleHRcbiAgICogICBwYXJ0aWNpcGFudCBNIGFzIE1vZGVsXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBBcmdzXG4gICAqXG4gICAqICAgQy0+PkM6IFJlY2VpdmUgb3BlcmF0aW9uIHJlcXVlc3RcbiAgICogICBDLT4+TTogVmFsaWRhdGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogICBDLT4+QzogQ3JlYXRlIGNoaWxkIGNvbnRleHRcbiAgICogICBDLT4+QTogUHJvY2VzcyBvcGVyYXRpb24gYXJnc1xuICAgKiAgIEEtPj5DOiBSZXR1cm4gY29udGV4dCBhcmdzXG4gICAqICAgQy0+PkM6IEFwcGx5IG92ZXJyaWRlc1xuICAgKiAgIEMtPj5DOiBSZXR1cm4gZmluYWwgY29udGV4dFxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFyZ3M8XG4gICAgTSBleHRlbmRzIE1vZGVsPGFueT4sXG4gICAgQyBleHRlbmRzIENvbnRleHQ8Rj4sXG4gICAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgPihcbiAgICBvcGVyYXRpb246XG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgYXJnczogYW55W10sXG4gICAgY29udGV4dHVhbD86IENvbnRleHR1YWw8Rj4sXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGPlxuICApOiBQcm9taXNlPENvbnRleHRBcmdzPEYsIEM+PiB7XG4gICAgY29uc3QgbGFzdCA9IGFyZ3MucG9wKCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRDb250ZXh0KCkge1xuICAgICAgaWYgKGNvbnRleHR1YWwpXG4gICAgICAgIHJldHVybiBjb250ZXh0dWFsLmNvbnRleHQob3BlcmF0aW9uLCBvdmVycmlkZXMgfHwge30sIG1vZGVsLCAuLi5hcmdzKTtcbiAgICAgIHJldHVybiBDb250ZXh0LmZyb20ob3BlcmF0aW9uLCBvdmVycmlkZXMgfHwge30sIG1vZGVsLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBsZXQgYzogQztcbiAgICBpZiAobGFzdCkge1xuICAgICAgaWYgKGxhc3QgaW5zdGFuY2VvZiBDb250ZXh0KSB7XG4gICAgICAgIGMgPSBsYXN0IGFzIEM7XG4gICAgICAgIGFyZ3MucHVzaChsYXN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaChsYXN0KTtcbiAgICAgICAgYyA9IChhd2FpdCBnZXRDb250ZXh0KCkpIGFzIEM7XG4gICAgICAgIGFyZ3MucHVzaChjKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYyA9IChhd2FpdCBnZXRDb250ZXh0KCkpIGFzIEM7XG4gICAgICBhcmdzLnB1c2goYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29udGV4dDogYywgYXJnczogYXJncyB9O1xuICB9XG59XG4iXX0=
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L0NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsK0NBQXFEO0FBQ3JELHVFQUE2RDtBQWM3RDs7Ozs7O0dBTUc7QUFDSSxNQUFNLHFCQUFxQixHQUF3QixDQUl4RCxHQUF5QixFQUN6QixFQUFFO0lBQ0YsT0FBTyxJQUFJLE9BQU8sRUFBSyxDQUFDLFVBQVUsQ0FDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBTSxDQUNsRCxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBVFcsUUFBQSxxQkFBcUIseUJBU2hDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlERztBQUNILE1BQWEsT0FBTztJQUNsQjtRQVdTLFVBQUssR0FDWixJQUFJLDRDQUFpQixFQUNHLENBQUM7UUFaekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRSxJQUFJLDRDQUFpQixFQUFLO1lBQ2pDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzthQUVNLFlBQU8sR0FBd0IsNkJBQXFCLEFBQTdDLENBQThDO0lBTTVEOzs7O09BSUc7SUFDSCxVQUFVLENBQW1CLEtBQVE7UUFDbkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO1lBQ25DLEtBQUssRUFBRyxJQUFJLENBQUMsS0FBZ0MsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQy9ELFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFF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aW1wb3J0IHsgQ29udGV4dHVhbCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL0NvbnRleHR1YWxcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiLi4vb3BlcmF0aW9ucy9jb25zdGFudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IERlZmF1bHRSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9iamVjdEFjY3VtdWxhdG9yIH0gZnJvbSBcInR5cGVkLW9iamVjdC1hY2N1bXVsYXRvclwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeUZsYWdzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSB0eXBlIGZvciBjcmVhdGluZyBjb250ZXh0IGluc3RhbmNlcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgYSBmdW5jdGlvbiB0eXBlIHRoYXQgY3JlYXRlcyBjb250ZXh0IGluc3RhbmNlcyB3aXRoIHNwZWNpZmljIHJlcG9zaXRvcnkgZmxhZ3MuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUgZXh0ZW5kaW5nIFJlcG9zaXRvcnlGbGFnc1xuICogQHR5cGVkZWYge0Z1bmN0aW9ufSBDb250ZXh0RmFjdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpkYi1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIENvbnRleHRGYWN0b3J5PEYgZXh0ZW5kcyBSZXBvc2l0b3J5RmxhZ3M+ID0gPEMgZXh0ZW5kcyBDb250ZXh0PEY+PihcbiAgYXJnOiBPbWl0PEYsIFwidGltZXN0YW1wXCI+XG4pID0+IEM7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgZmFjdG9yeSBmb3IgY3JlYXRpbmcgY29udGV4dCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBBIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIG5ldyBDb250ZXh0IGluc3RhbmNlcyB3aXRoIHRoZSBwcm92aWRlZCByZXBvc2l0b3J5IGZsYWdzLlxuICogSXQgYXV0b21hdGljYWxseSBhZGRzIGEgdGltZXN0YW1wIHRvIHRoZSBjb250ZXh0IGFuZCByZXR1cm5zIGEgcHJvcGVybHkgdHlwZWQgY29udGV4dCBpbnN0YW5jZS5cbiAqIEBjb25zdCBEZWZhdWx0Q29udGV4dEZhY3RvcnlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZGItZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbnRleHRGYWN0b3J5OiBDb250ZXh0RmFjdG9yeTxhbnk+ID0gPFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbj4oXG4gIGFyZzogT21pdDxGLCBcInRpbWVzdGFtcFwiPlxuKSA9PiB7XG4gIHJldHVybiBuZXcgQ29udGV4dDxGPigpLmFjY3VtdWxhdGUoXG4gICAgT2JqZWN0LmFzc2lnbih7fSwgYXJnLCB7IHRpbWVzdGFtcDogbmV3IERhdGUoKSB9KSBhcyBGXG4gICkgYXMgQztcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgY29udGV4dCBtYW5hZ2VtZW50IGNsYXNzIGZvciBoYW5kbGluZyByZXBvc2l0b3J5IG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgQ29udGV4dCBjbGFzcyBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3IgbWFuYWdpbmcgcmVwb3NpdG9yeSBvcGVyYXRpb25zIHdpdGggZmxhZ3MsXG4gKiBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwcywgYW5kIHN0YXRlIGFjY3VtdWxhdGlvbi4gSXQgYWxsb3dzIGZvciBoaWVyYXJjaGljYWwgY29udGV4dCBjaGFpbnNcbiAqIGFuZCBtYWludGFpbnMgb3BlcmF0aW9uLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdoaWxlIHN1cHBvcnRpbmcgdHlwZSBzYWZldHkgdGhyb3VnaCBnZW5lcmljcy5cbiAqXG4gKiBAdGVtcGxhdGUgRiAtIFR5cGUgZXh0ZW5kaW5nIFJlcG9zaXRvcnlGbGFncyB0aGF0IGRlZmluZXMgdGhlIGNvbnRleHQgY29uZmlndXJhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0QWNjdW11bGF0b3I8Rj59IGNhY2hlIC0gVGhlIGludGVybmFsIGNhY2hlIHN0b3JpbmcgYWNjdW11bGF0ZWQgdmFsdWVzXG4gKlxuICogQGNsYXNzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0aW5nIGEgbmV3IGNvbnRleHQgd2l0aCByZXBvc2l0b3J5IGZsYWdzXG4gKiBjb25zdCBjb250ZXh0ID0gbmV3IENvbnRleHQ8UmVwb3NpdG9yeUZsYWdzPigpO1xuICpcbiAqIC8vIEFjY3VtdWxhdGluZyB2YWx1ZXNcbiAqIGNvbnN0IGVucmljaGVkQ29udGV4dCA9IGNvbnRleHQuYWNjdW11bGF0ZSh7XG4gKiAgIHdyaXRlT3BlcmF0aW9uOiB0cnVlLFxuICogICBhZmZlY3RlZFRhYmxlczogWyd1c2VycyddLFxuICogICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gKiB9KTtcbiAqXG4gKiAvLyBBY2Nlc3NpbmcgdmFsdWVzXG4gKiBjb25zdCBpc1dyaXRlID0gZW5yaWNoZWRDb250ZXh0LmdldCgnd3JpdGVPcGVyYXRpb24nKTsgLy8gdHJ1ZVxuICogY29uc3QgdGFibGVzID0gZW5yaWNoZWRDb250ZXh0LmdldCgnYWZmZWN0ZWRUYWJsZXMnKTsgLy8gWyd1c2VycyddXG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEN0eCBhcyBDb250ZXh0XG4gKiAgIHBhcnRpY2lwYW50IENhY2hlIGFzIE9iamVjdEFjY3VtdWxhdG9yXG4gKlxuICogICBDLT4+Q3R4OiBuZXcgQ29udGV4dCgpXG4gKiAgIEN0eC0+PkNhY2hlOiBjcmVhdGUgY2FjaGVcbiAqXG4gKiAgIEMtPj5DdHg6IGFjY3VtdWxhdGUodmFsdWUpXG4gKiAgIEN0eC0+PkNhY2hlOiBhY2N1bXVsYXRlKHZhbHVlKVxuICogICBDYWNoZS0tPj5DdHg6IHVwZGF0ZWQgY2FjaGVcbiAqICAgQ3R4LS0+PkM6IHVwZGF0ZWQgY29udGV4dFxuICpcbiAqICAgQy0+PkN0eDogZ2V0KGtleSlcbiAqICAgQ3R4LT4+Q2FjaGU6IGdldChrZXkpXG4gKiAgIGFsdCBLZXkgZXhpc3RzIGluIGNhY2hlXG4gKiAgICAgQ2FjaGUtLT4+Q3R4OiB2YWx1ZVxuICogICBlbHNlIEtleSBub3QgZm91bmRcbiAqICAgICBDdHgtPj5DdHg6IGNoZWNrIHBhcmVudCBjb250ZXh0XG4gKiAgICAgYWx0IFBhcmVudCBleGlzdHNcbiAqICAgICAgIEN0eC0+PlBhcmVudDogZ2V0KGtleSlcbiAqICAgICAgIFBhcmVudC0tPj5DdHg6IHZhbHVlXG4gKiAgICAgZWxzZSBObyBwYXJlbnRcbiAqICAgICAgIEN0eC0tPj5DOiB0aHJvdyBlcnJvclxuICogICAgIGVuZFxuICogICBlbmRcbiAqICAgQ3R4LS0+PkM6IHJlcXVlc3RlZCB2YWx1ZVxuICovXG5leHBvcnQgY2xhc3MgQ29udGV4dDxGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzPiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhY2hlXCIsIHtcbiAgICAgIHZhbHVlOiBuZXcgT2JqZWN0QWNjdW11bGF0b3I8Rj4oKSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZhY3Rvcnk6IENvbnRleHRGYWN0b3J5PGFueT4gPSBEZWZhdWx0Q29udGV4dEZhY3Rvcnk7XG5cbiAgcmVhZG9ubHkgY2FjaGU6IFJlcG9zaXRvcnlGbGFncyAmIE9iamVjdEFjY3VtdWxhdG9yPGFueT4gPVxuICAgIG5ldyBPYmplY3RBY2N1bXVsYXRvcigpIGFzIHVua25vd24gYXMgUmVwb3NpdG9yeUZsYWdzICZcbiAgICAgIE9iamVjdEFjY3VtdWxhdG9yPGFueT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyBuZXcgdmFsdWVzIGludG8gdGhlIGNvbnRleHQuXG4gICAqIEBzdW1tYXJ5IE1lcmdlcyB0aGUgcHJvdmlkZWQgdmFsdWUgb2JqZWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvbnRleHQgc3RhdGUsXG4gICAqIGNyZWF0aW5nIGEgbmV3IGltbXV0YWJsZSBjYWNoZSBzdGF0ZS5cbiAgICovXG4gIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJjYWNoZVwiLCB7XG4gICAgICB2YWx1ZTogKHRoaXMuY2FjaGUgYXMgT2JqZWN0QWNjdW11bGF0b3I8YW55PikuYWNjdW11bGF0ZSh2YWx1ZSksXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIENvbnRleHQ8RiAmIFY+O1xuICB9XG5cbiAgZ2V0IHRpbWVzdGFtcCgpIHtcbiAgICByZXR1cm4gKHRoaXMuY2FjaGUgYXMgYW55KS50aW1lc3RhbXAgYXMgRltcInRpbWVzdGFtcFwiXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgY29udGV4dCBieSBrZXkuXG4gICAqL1xuICBnZXQ8SyBleHRlbmRzIGtleW9mIEY+KGtleTogSyk6IEZbS10ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKHRoaXMuY2FjaGUgYXMgT2JqZWN0QWNjdW11bGF0b3I8YW55PikuZ2V0KFxuICAgICAgICBrZXkgYXMgdW5rbm93biBhcyBzdHJpbmdcbiAgICAgICkgYXMgRltLXTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSAodGhpcy5jYWNoZSBhcyBhbnkpLnBhcmVudENvbnRleHQgYXNcbiAgICAgICAgfCBDb250ZXh0PEY+XG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHBhcmVudCkgcmV0dXJuIHBhcmVudC5nZXQoa2V5KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgY2hpbGQgY29udGV4dCBmcm9tIGFub3RoZXIgY29udGV4dFxuICAgKi9cbiAgc3RhdGljIGNoaWxkRnJvbTxGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLCBDIGV4dGVuZHMgQ29udGV4dDxGPj4oXG4gICAgY29udGV4dDogQyxcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEY+XG4gICk6IEMge1xuICAgIHJldHVybiBDb250ZXh0LmZhY3RvcnkoXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCAoY29udGV4dCBhcyBhbnkpLmNhY2hlLCBvdmVycmlkZXMgfHwge30pXG4gICAgKSBhcyB1bmtub3duIGFzIEM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgY29udGV4dCBmcm9tIG9wZXJhdGlvbiBwYXJhbWV0ZXJzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZnJvbTxcbiAgICBNIGV4dGVuZHMgTW9kZWwsXG4gICAgRiBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyxcbiAgICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbiAgPihcbiAgICBvcGVyYXRpb246XG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBvdmVycmlkZXM6IFBhcnRpYWw8Rj4sXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPEM+IHtcbiAgICByZXR1cm4gQ29udGV4dC5mYWN0b3J5KFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFJlcG9zaXRvcnlGbGFncyBhcyBSZXBvc2l0b3J5RmxhZ3MsIG92ZXJyaWRlcywge1xuICAgICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgfSlcbiAgICApIGFzIEM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGFyZ3VtZW50cyBmb3IgY29udGV4dCBvcGVyYXRpb25zXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXJnczxcbiAgICBNIGV4dGVuZHMgTW9kZWw8YW55PixcbiAgICBDIGV4dGVuZHMgQ29udGV4dDxGPixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzLFxuICA+KFxuICAgIG9wZXJhdGlvbjpcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5DUkVBVEVcbiAgICAgIHwgT3BlcmF0aW9uS2V5cy5SRUFEXG4gICAgICB8IE9wZXJhdGlvbktleXMuVVBEQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBhcmdzOiBhbnlbXSxcbiAgICBjb250ZXh0dWFsPzogQ29udGV4dHVhbDxGPixcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEY+XG4gICk6IFByb21pc2U8Q29udGV4dEFyZ3M8RiwgQz4+IHtcbiAgICBjb25zdCBsYXN0ID0gYXJncy5wb3AoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHQoKSB7XG4gICAgICBpZiAoY29udGV4dHVhbClcbiAgICAgICAgcmV0dXJuIGNvbnRleHR1YWwuY29udGV4dChvcGVyYXRpb24sIG92ZXJyaWRlcyB8fCB7fSwgbW9kZWwsIC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuIENvbnRleHQuZnJvbShvcGVyYXRpb24sIG92ZXJyaWRlcyB8fCB7fSwgbW9kZWwsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIGxldCBjOiBDO1xuICAgIGlmIChsYXN0KSB7XG4gICAgICBpZiAobGFzdCBpbnN0YW5jZW9mIENvbnRleHQpIHtcbiAgICAgICAgYyA9IGxhc3QgYXMgQztcbiAgICAgICAgYXJncy5wdXNoKGxhc3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJncy5wdXNoKGxhc3QpO1xuICAgICAgICBjID0gKGF3YWl0IGdldENvbnRleHQoKSkgYXMgQztcbiAgICAgICAgYXJncy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjID0gKGF3YWl0IGdldENvbnRleHQoKSkgYXMgQztcbiAgICAgIGFyZ3MucHVzaChjKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb250ZXh0OiBjLCBhcmdzOiBhcmdzIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,6 +2,7 @@ import { ContextArgs } from "./utils";
|
|
|
2
2
|
import { Contextual } from "../interfaces/Contextual";
|
|
3
3
|
import { OperationKeys } from "../operations/constants";
|
|
4
4
|
import { Constructor, Model } from "@decaf-ts/decorator-validation";
|
|
5
|
+
import { ObjectAccumulator } from "typed-object-accumulator";
|
|
5
6
|
import { RepositoryFlags } from "./types";
|
|
6
7
|
/**
|
|
7
8
|
* @description Factory type for creating context instances.
|
|
@@ -80,91 +81,28 @@ export declare const DefaultContextFactory: ContextFactory<any>;
|
|
|
80
81
|
export declare class Context<F extends RepositoryFlags> {
|
|
81
82
|
constructor();
|
|
82
83
|
static factory: ContextFactory<any>;
|
|
83
|
-
|
|
84
|
+
readonly cache: RepositoryFlags & ObjectAccumulator<any>;
|
|
84
85
|
/**
|
|
85
86
|
* @description Accumulates new values into the context.
|
|
86
87
|
* @summary Merges the provided value object with the existing context state,
|
|
87
88
|
* creating a new immutable cache state.
|
|
88
|
-
*
|
|
89
|
-
* @template F - current accumulator type
|
|
90
|
-
* @template V - Type extending object for the values to accumulate
|
|
91
|
-
* @param {V} value - The object containing values to accumulate
|
|
92
|
-
* @returns A new context instance with accumulated values
|
|
93
89
|
*/
|
|
94
90
|
accumulate<V extends object>(value: V): Context<F & V>;
|
|
95
|
-
get timestamp():
|
|
91
|
+
get timestamp(): F["timestamp"];
|
|
96
92
|
/**
|
|
97
93
|
* @description Retrieves a value from the context by key.
|
|
98
|
-
* @summary Attempts to get a value from the current context's cache.
|
|
99
|
-
* If not found, traverses up the parent context chain.
|
|
100
|
-
*
|
|
101
|
-
* @template K - Type extending keyof F for the key to retrieve
|
|
102
|
-
* @template F - Accumulator type
|
|
103
|
-
* @param {K} key - The key to retrieve from the context
|
|
104
|
-
* @returns The value associated with the key
|
|
105
|
-
* @throws {Error} If the key is not found in the context chain
|
|
106
94
|
*/
|
|
107
95
|
get<K extends keyof F>(key: K): F[K];
|
|
108
|
-
/**
|
|
109
|
-
* @description Creates a child context
|
|
110
|
-
* @summary Generates a new context instance with current context as parent
|
|
111
|
-
*
|
|
112
|
-
* @template M - Type extending Model
|
|
113
|
-
* @param {OperationKeys} operation - The operation type
|
|
114
|
-
* @param {Constructor<M>} [model] - Optional model constructor
|
|
115
|
-
* @returns {C} New child context instance
|
|
116
|
-
*/
|
|
117
|
-
child<M extends Model, C extends Context<F>>(operation: OperationKeys, model?: Constructor<M>): C;
|
|
118
96
|
/**
|
|
119
97
|
* @description Creates a child context from another context
|
|
120
|
-
* @summary Generates a new context instance with parent reference
|
|
121
|
-
*
|
|
122
|
-
* @template F - Type extending Repository Flags
|
|
123
|
-
* @template C - Type extending Context<F>
|
|
124
|
-
* @param {C} context - The parent context
|
|
125
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
126
|
-
* @returns {C} New child context instance
|
|
127
98
|
*/
|
|
128
99
|
static childFrom<F extends RepositoryFlags, C extends Context<F>>(context: C, overrides?: Partial<F>): C;
|
|
129
100
|
/**
|
|
130
101
|
* @description Creates a new context from operation parameters
|
|
131
|
-
* @summary Generates a context instance for specific operation
|
|
132
|
-
*
|
|
133
|
-
* @template F - Type extending Repository Flags
|
|
134
|
-
* @template M - Type extending Model
|
|
135
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
136
|
-
* @param {Partial<F>} overrides - Flag overrides
|
|
137
|
-
* @param {Constructor<M>} model - The model constructor
|
|
138
|
-
* @param {any} args - Operation arguments
|
|
139
|
-
* @returns {Promise<C>} Promise resolving to new context
|
|
140
102
|
*/
|
|
141
103
|
static from<M extends Model, F extends RepositoryFlags, C extends Context<F>>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, overrides: Partial<F>, model: Constructor<M>, ...args: any[]): Promise<C>;
|
|
142
104
|
/**
|
|
143
105
|
* @description Prepares arguments for context operations
|
|
144
|
-
* @summary Creates a context args object with the specified operation parameters
|
|
145
|
-
*
|
|
146
|
-
* @template F - Type extending {@link RepositoryFlags}
|
|
147
|
-
* @template M - Type extending {@link Model}
|
|
148
|
-
* @param {OperationKeys.DELETE} operation - The operation type
|
|
149
|
-
* @param {Constructor<M>} model - The model constructor
|
|
150
|
-
* @param {any[]} args - Operation arguments
|
|
151
|
-
* @param {Contextual<F>} [contextual] - Optional contextual object
|
|
152
|
-
* @param {Partial<F>} [overrides] - Optional flag overrides
|
|
153
|
-
* @returns {Promise<ContextArgs>} Promise resolving to context arguments
|
|
154
|
-
*
|
|
155
|
-
* @mermaid
|
|
156
|
-
* sequenceDiagram
|
|
157
|
-
* participant C as Context
|
|
158
|
-
* participant M as Model
|
|
159
|
-
* participant A as Args
|
|
160
|
-
*
|
|
161
|
-
* C->>C: Receive operation request
|
|
162
|
-
* C->>M: Validate model constructor
|
|
163
|
-
* C->>C: Create child context
|
|
164
|
-
* C->>A: Process operation args
|
|
165
|
-
* A->>C: Return context args
|
|
166
|
-
* C->>C: Apply overrides
|
|
167
|
-
* C->>C: Return final context
|
|
168
106
|
*/
|
|
169
107
|
static args<M extends Model<any>, C extends Context<F>, F extends RepositoryFlags>(operation: OperationKeys.CREATE | OperationKeys.READ | OperationKeys.UPDATE | OperationKeys.DELETE, model: Constructor<M>, args: any[], contextual?: Contextual<F>, overrides?: Partial<F>): Promise<ContextArgs<F, C>>;
|
|
170
108
|
}
|