@decaf-ts/for-http 0.2.7 → 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.
@@ -59,6 +59,32 @@ export declare abstract class HttpAdapter<Y extends HttpConfig, CON, Q, F extend
59
59
  * @return {Constructor<Repository<M, Q, HttpAdapter<Y, Q, F, C>, F, C>>} The repository constructor
60
60
  */
61
61
  repository<M extends Model>(): Constructor<Repository<M, Q, HttpAdapter<Y, CON, Q, F, C>, F, C>>;
62
+ /**
63
+ * @description Prepares a model for persistence
64
+ * @summary Converts a model instance into a format suitable for database storage,
65
+ * handling column mapping and separating transient properties
66
+ * @template M - The model type
67
+ * @param {M} model - The model instance to prepare
68
+ * @param pk - The primary key property name
69
+ * @return The prepared data
70
+ */
71
+ prepare<M extends Model>(model: M, pk: keyof M): {
72
+ record: Record<string, any>;
73
+ id: string;
74
+ transient?: Record<string, any>;
75
+ };
76
+ /**
77
+ * @description Converts database data back into a model instance
78
+ * @summary Reconstructs a model instance from database data, handling column mapping
79
+ * and reattaching transient properties
80
+ * @template M - The model type
81
+ * @param obj - The database record
82
+ * @param {string|Constructor<M>} clazz - The model class or name
83
+ * @param pk - The primary key property name
84
+ * @param {string|number|bigint} id - The primary key value
85
+ * @return {M} The reconstructed model instance
86
+ */
87
+ revert<M extends Model>(obj: Record<string, any>, clazz: string | Constructor<M>, pk: keyof M, id: string | number | bigint): M;
62
88
  /**
63
89
  * @description Constructs a URL for API requests
64
90
  * @summary Builds a complete URL for API requests using the configured protocol and host,
@@ -1,4 +1,6 @@
1
- import { Adapter, UnsupportedError, } from "@decaf-ts/core";
1
+ import { Adapter, PersistenceKeys, UnsupportedError, } from "@decaf-ts/core";
2
+ import { InternalError, } from "@decaf-ts/db-decorators";
3
+ import { Model } from "@decaf-ts/decorator-validation";
2
4
  import { RestService } from "./RestService.js";
3
5
  /**
4
6
  * @description Abstract HTTP adapter for REST API interactions
@@ -62,6 +64,64 @@ export class HttpAdapter extends Adapter {
62
64
  repository() {
63
65
  return RestService;
64
66
  }
67
+ /**
68
+ * @description Prepares a model for persistence
69
+ * @summary Converts a model instance into a format suitable for database storage,
70
+ * handling column mapping and separating transient properties
71
+ * @template M - The model type
72
+ * @param {M} model - The model instance to prepare
73
+ * @param pk - The primary key property name
74
+ * @return The prepared data
75
+ */
76
+ prepare(model, pk) {
77
+ const log = this.log.for(this.prepare);
78
+ const result = Object.assign({}, model);
79
+ if (model[PersistenceKeys.METADATA]) {
80
+ log.silly(`Passing along persistence metadata for ${model[PersistenceKeys.METADATA]}`);
81
+ Object.defineProperty(result, PersistenceKeys.METADATA, {
82
+ enumerable: false,
83
+ writable: false,
84
+ configurable: true,
85
+ value: model[PersistenceKeys.METADATA],
86
+ });
87
+ }
88
+ return {
89
+ record: model,
90
+ id: model[pk],
91
+ };
92
+ }
93
+ /**
94
+ * @description Converts database data back into a model instance
95
+ * @summary Reconstructs a model instance from database data, handling column mapping
96
+ * and reattaching transient properties
97
+ * @template M - The model type
98
+ * @param obj - The database record
99
+ * @param {string|Constructor<M>} clazz - The model class or name
100
+ * @param pk - The primary key property name
101
+ * @param {string|number|bigint} id - The primary key value
102
+ * @return {M} The reconstructed model instance
103
+ */
104
+ revert(obj, clazz, pk, id) {
105
+ const log = this.log.for(this.revert);
106
+ const ob = {};
107
+ const m = (typeof clazz === "string" ? Model.build(ob, clazz) : new clazz(ob));
108
+ log.silly(`Rebuilding model ${m.constructor.name} id ${id}`);
109
+ const constr = typeof clazz === "string" ? Model.get(clazz) : clazz;
110
+ if (!constr)
111
+ throw new InternalError(`Failed to retrieve model constructor for ${clazz}`);
112
+ const result = new constr(obj);
113
+ const metadata = obj[PersistenceKeys.METADATA];
114
+ if (metadata) {
115
+ log.silly(`Passing along ${this.flavour} persistence metadata for ${m.constructor.name} id ${id}: ${metadata}`);
116
+ Object.defineProperty(result, PersistenceKeys.METADATA, {
117
+ enumerable: false,
118
+ configurable: false,
119
+ writable: false,
120
+ value: metadata,
121
+ });
122
+ }
123
+ return result;
124
+ }
65
125
  /**
66
126
  * @description Constructs a URL for API requests
67
127
  * @summary Builds a complete URL for API requests using the configured protocol and host,
@@ -148,4 +208,4 @@ export class HttpAdapter extends Adapter {
148
208
  throw new UnsupportedError("Api is not natively available for HttpAdapters. If required, please extends this class");
149
209
  }
150
210
  }
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBS1AsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUFFLFdBQVcsRUFBRSx5QkFBc0I7QUFHNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLE9BQWdCLFdBTXBCLFNBQVEsT0FBd0I7SUFDaEMsWUFBc0IsTUFBUyxFQUFFLE9BQWUsRUFBRSxLQUFjO1FBQzlELEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ00sS0FBSyxDQUNaLFNBSXdCLEVBQ3hCLEtBQXFCLEVBQ3JCLFNBQXFCO1FBRXJCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDaEUsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sVUFBVTtRQUdqQixPQUFPLFdBRU4sQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sR0FBRyxDQUNYLFNBQWlCLEVBQ2pCLFdBQTZDO1FBRTdDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUNqQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUM3RCxDQUFDO1FBQ0YsSUFBSSxXQUFXO1lBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQ25ELEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVKLG1FQUFtRTtRQUNuRSxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsVUFBVSxDQUFDLEdBQVU7UUFDbkIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUN4QixRQUFRLE9BQU8sRUFBRSxDQUFDO1lBQ2hCO2dCQUNFLE9BQU8sR0FBZ0IsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQTRFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILDZEQUE2RDtJQUM3RCxHQUFHLENBQUksUUFBVyxFQUFFLE9BQWdCLEVBQUUsR0FBRyxJQUFXO1FBQ2xELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsSUFBSSxnQkFBZ0IsQ0FDbEIsd0ZBQXdGLENBQ3pGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILDZEQUE2RDtJQUM3RCxRQUFRLENBQUMsT0FBd0I7UUFDL0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixJQUFJLGdCQUFnQixDQUNsQix3RkFBd0YsQ0FDekYsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNNLFNBQVM7UUFDaEIsTUFBTSxJQUFJLGdCQUFnQixDQUN4Qix3RkFBd0YsQ0FDekYsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILDZEQUE2RDtJQUM3RCxjQUFjLENBQUMsU0FBeUI7UUFDdEMsTUFBTSxJQUFJLGdCQUFnQixDQUN4Qix3RkFBd0YsQ0FDekYsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFkYXB0ZXIsXG4gIENvbmRpdGlvbixcbiAgUmVwb3NpdG9yeSxcbiAgU2VxdWVuY2UsXG4gIFNlcXVlbmNlT3B0aW9ucyxcbiAgVW5zdXBwb3J0ZWRFcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBCYXNlRXJyb3IsIENvbnRleHQsIE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEh0dHBDb25maWcsIEh0dHBGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gXCIuL1Jlc3RTZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgSFRUUCBhZGFwdGVyIGZvciBSRVNUIEFQSSBpbnRlcmFjdGlvbnNcbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgSFRUUCBhZGFwdGVycyB3aXRoIG1ldGhvZHMgZm9yIENSVUQgb3BlcmF0aW9ucyxcbiAqIFVSTCBjb25zdHJ1Y3Rpb24sIGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBjb3JlIEFkYXB0ZXIgY2xhc3MgYW5kXG4gKiBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgbWV0aG9kcyBmb3IgSFRUUCBjb21tdW5pY2F0aW9uLiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnNcbiAqIG11c3QgcHJvdmlkZSBzcGVjaWZpYyBIVFRQIGNsaWVudCBmdW5jdGlvbmFsaXR5LlxuICogQHRlbXBsYXRlIFkgLSBUaGUgbmF0aXZlIEhUVFAgY2xpZW50IHR5cGVcbiAqIEB0ZW1wbGF0ZSBRIC0gVGhlIHF1ZXJ5IHR5cGUgdXNlZCBieSB0aGUgYWRhcHRlclxuICogQHRlbXBsYXRlIEYgLSBUaGUgSFRUUCBmbGFncyB0eXBlLCBleHRlbmRpbmcgSHR0cEZsYWdzXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUsIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1l9IG5hdGl2ZSAtIFRoZSBuYXRpdmUgSFRUUCBjbGllbnQgaW5zdGFuY2VcbiAqIEBwYXJhbSB7SHR0cENvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIEhUVFAgYWRhcHRlclxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgLSBUaGUgYWRhcHRlciBmbGF2b3IgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXJcbiAqIEBjbGFzcyBIdHRwQWRhcHRlclxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gd2l0aCBBeGlvc1xuICogY2xhc3MgQXhpb3NBZGFwdGVyIGV4dGVuZHMgSHR0cEFkYXB0ZXI8QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnPiB7XG4gKiAgIGNvbnN0cnVjdG9yKGNvbmZpZzogSHR0cENvbmZpZykge1xuICogICAgIHN1cGVyKGF4aW9zLmNyZWF0ZSgpLCBjb25maWcsICdheGlvcycpO1xuICogICB9XG4gKlxuICogICBhc3luYyByZXF1ZXN0PFY+KGRldGFpbHM6IEF4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8Vj4ge1xuICogICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUucmVxdWVzdChkZXRhaWxzKTtcbiAqICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAqICAgfVxuICpcbiAqICAgLy8gSW1wbGVtZW50IG90aGVyIGFic3RyYWN0IG1ldGhvZHMuLi5cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSHR0cEFkYXB0ZXI8XG4gIFkgZXh0ZW5kcyBIdHRwQ29uZmlnLFxuICBDT04sXG4gIFEsXG4gIEYgZXh0ZW5kcyBIdHRwRmxhZ3MgPSBIdHRwRmxhZ3MsXG4gIEMgZXh0ZW5kcyBDb250ZXh0PEY+ID0gQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBBZGFwdGVyPFksIENPTiwgUSwgRiwgQz4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoY29uZmlnOiBZLCBmbGF2b3VyOiBzdHJpbmcsIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoY29uZmlnLCBmbGF2b3VyLCBhbGlhcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBvcGVyYXRpb24gZmxhZ3Mgd2l0aCBIVFRQIGhlYWRlcnNcbiAgICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzZSBmbGFncyBtZXRob2QgdG8gaW5jbHVkZSBIVFRQLXNwZWNpZmljIGhlYWRlcnMgZm9yIG9wZXJhdGlvbnMuXG4gICAqIFRoaXMgbWV0aG9kIGFkZHMgYW4gZW1wdHkgaGVhZGVycyBvYmplY3QgdG8gdGhlIGZsYWdzIHJldHVybmVkIGJ5IHRoZSBwYXJlbnQgY2xhc3MuXG4gICAqIEB0ZW1wbGF0ZSBGIC0gVGhlIFJlcG9zaXRvcnkgRmxhZ3MgdHlwZVxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5cy5DUkVBVEV8T3BlcmF0aW9uS2V5cy5SRUFEfE9wZXJhdGlvbktleXMuVVBEQVRFfE9wZXJhdGlvbktleXMuREVMRVRFfSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHR5cGVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEY+fSBvdmVycmlkZXMgLSBPcHRpb25hbCBmbGFnIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJuIHtGfSBUaGUgZmxhZ3Mgb2JqZWN0IHdpdGggaGVhZGVyc1xuICAgKi9cbiAgb3ZlcnJpZGUgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvcGVyYXRpb246XG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEY+XG4gICkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmZsYWdzPE0+KG9wZXJhdGlvbiwgbW9kZWwsIG92ZXJyaWRlcyksIHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIGZvciB0aGlzIGFkYXB0ZXJcbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgdGhlIFJlc3RTZXJ2aWNlIGNsYXNzIGFzIHRoZSByZXBvc2l0b3J5IGltcGxlbWVudGF0aW9uIGZvciB0aGlzIEhUVFAgYWRhcHRlci5cbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSBpbnN0YW5jZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBhZGFwdGVyIHR5cGUuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHJldHVybiB7Q29uc3RydWN0b3I8UmVwb3NpdG9yeTxNLCBRLCBIdHRwQWRhcHRlcjxZLCBRLCBGLCBDPiwgRiwgQz4+fSBUaGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgb3ZlcnJpZGUgcmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+KCk6IENvbnN0cnVjdG9yPFxuICAgIFJlcG9zaXRvcnk8TSwgUSwgSHR0cEFkYXB0ZXI8WSwgQ09OLCBRLCBGLCBDPiwgRiwgQz5cbiAgPiB7XG4gICAgcmV0dXJuIFJlc3RTZXJ2aWNlIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8XG4gICAgICBSZXBvc2l0b3J5PE0sIFEsIEh0dHBBZGFwdGVyPFksIENPTiwgUSwgRiwgQz4sIEYsIEM+XG4gICAgPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29uc3RydWN0cyBhIFVSTCBmb3IgQVBJIHJlcXVlc3RzXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyBhIGNvbXBsZXRlIFVSTCBmb3IgQVBJIHJlcXVlc3RzIHVzaW5nIHRoZSBjb25maWd1cmVkIHByb3RvY29sIGFuZCBob3N0LFxuICAgKiB0aGUgc3BlY2lmaWVkIHRhYmxlIG5hbWUsIGFuZCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLiBUaGUgbWV0aG9kIGhhbmRsZXMgVVJMIGVuY29kaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIGVuZHBvaW50XG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPn0gW3F1ZXJ5UGFyYW1zXSAtIE9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZW5jb2RlZCBVUkwgc3RyaW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgdXJsKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxuICApIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKFxuICAgICAgYCR7dGhpcy5jb25maWcucHJvdG9jb2x9Oi8vJHt0aGlzLmNvbmZpZy5ob3N0fS8ke3RhYmxlTmFtZX1gXG4gICAgKTtcbiAgICBpZiAocXVlcnlQYXJhbXMpXG4gICAgICBPYmplY3QuZW50cmllcyhxdWVyeVBhcmFtcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCkpXG4gICAgICApO1xuXG4gICAgLy8gZW5zdXJlIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAlMjAgKG5vdCAnKycpIHRvIG1hdGNoIGV4cGVjdGF0aW9uc1xuICAgIHJldHVybiBlbmNvZGVVUkkodXJsLnRvU3RyaW5nKCkpLnJlcGxhY2UoL1xcKy9nLCBcIiUyMFwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuZCBjb252ZXJ0cyBlcnJvcnMgdG8gQmFzZUVycm9yIHR5cGVcbiAgICogQHN1bW1hcnkgUHJvY2Vzc2VzIGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyBIVFRQIG9wZXJhdGlvbnMgYW5kIGNvbnZlcnRzIHRoZW0gdG9cbiAgICogdGhlIGFwcHJvcHJpYXRlIEJhc2VFcnJvciB0eXBlLiBDdXJyZW50bHkgcmV0dXJucyB0aGUgZXJyb3IgYXMtaXMsIGJ1dCBjYW4gYmVcbiAgICogZXh0ZW5kZWQgdG8gaGFuZGxlIHNwZWNpZmljIGVycm9yIG1lc3NhZ2VzIGRpZmZlcmVudGx5LlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgLSBUaGUgZXJyb3IgdG8gcGFyc2VcbiAgICogQHJldHVybiB7QmFzZUVycm9yfSBUaGUgcGFyc2VkIGVycm9yIGFzIGEgQmFzZUVycm9yXG4gICAqL1xuICBwYXJzZUVycm9yKGVycjogRXJyb3IpOiBCYXNlRXJyb3Ige1xuICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gZXJyO1xuICAgIHN3aXRjaCAobWVzc2FnZSkge1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGVyciBhcyBCYXNlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZW5kcyBhbiBIVFRQIHJlcXVlc3RcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIHNlbmQgSFRUUCByZXF1ZXN0c1xuICAgKiB1c2luZyB0aGUgbmF0aXZlIEhUVFAgY2xpZW50LiBUaGlzIGlzIHRoZSBjb3JlIG1ldGhvZCBmb3IgbWFraW5nIEFQSSBjYWxscy5cbiAgICogQHRlbXBsYXRlIFYgLSBUaGUgcmVzcG9uc2UgdmFsdWUgdHlwZVxuICAgKiBAcGFyYW0ge1F9IGRldGFpbHMgLSBUaGUgcmVxdWVzdCBkZXRhaWxzIHNwZWNpZmljIHRvIHRoZSBIVFRQIGNsaWVudFxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFY+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXNwb25zZSBkYXRhXG4gICAqL1xuICBhYnN0cmFjdCByZXF1ZXN0PFY+KGRldGFpbHM6IFEpOiBQcm9taXNlPFY+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyByZXNvdXJjZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gY3JlYXRlIGEgbmV3IHJlc291cmNlXG4gICAqIHZpYSBIVFRQLiBUaGlzIHR5cGljYWxseSBjb3JyZXNwb25kcyB0byBhIFBPU1QgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvciBlbmRwb2ludFxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIGRhdGEgbW9kZWwgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjcmVhdGVkIHJlc291cmNlXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgcmVzb3VyY2UgYnkgSURcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIHJldHJpZXZlIGEgcmVzb3VyY2VcbiAgICogdmlhIEhUVFAuIFRoaXMgdHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGEgR0VUIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgb3IgZW5kcG9pbnRcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfGJpZ2ludH0gaWQgLSBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXRyaWV2ZWQgcmVzb3VyY2VcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHJlYWQoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhbiBleGlzdGluZyByZXNvdXJjZVxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gdXBkYXRlIGEgcmVzb3VyY2VcbiAgICogdmlhIEhUVFAuIFRoaXMgdHlwaWNhbGx5IGNvcnJlc3BvbmRzIHRvIGEgUFVUIG9yIFBBVENIIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgb3IgZW5kcG9pbnRcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSB1cGRhdGVkIGRhdGEgbW9kZWxcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHVwZGF0ZWQgcmVzb3VyY2VcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIHVwZGF0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIGEgcmVzb3VyY2UgYnkgSURcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGRlbGV0ZSBhIHJlc291cmNlXG4gICAqIHZpYSBIVFRQLiBUaGlzIHR5cGljYWxseSBjb3JyZXNwb25kcyB0byBhIERFTEVURSByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIGVuZHBvaW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZSB0byBkZWxldGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRlbGV0aW9uIHJlc3VsdFxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcmF3IHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IE1ldGhvZCBmb3IgZXhlY3V0aW5nIHJhdyBxdWVyaWVzIGRpcmVjdGx5IHdpdGggdGhlIEhUVFAgY2xpZW50LlxuICAgKiBUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgaW4gSFRUUCBhZGFwdGVycyBhbmQgdGhyb3dzIGFuIFVuc3VwcG9ydGVkRXJyb3IuXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgaW1wbGVtZW50YXRpb24uXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlc3VsdCB0eXBlXG4gICAqIEBwYXJhbSB7UX0gcmF3SW5wdXQgLSBUaGUgcmF3IHF1ZXJ5IGlucHV0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvY2VzcyAtIFdoZXRoZXIgdG8gcHJvY2VzcyB0aGUgcmVzdWx0XG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFI+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBxdWVyeSByZXN1bHRcbiAgICogQHRocm93cyB7VW5zdXBwb3J0ZWRFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcmF3PFI+KHJhd0lucHV0OiBRLCBwcm9jZXNzOiBib29sZWFuLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8Uj4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc2VxdWVuY2VcbiAgICogQHN1bW1hcnkgTWV0aG9kIGZvciBjcmVhdGluZyBhIHNlcXVlbmNlIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBpZGVudGlmaWVycy5cbiAgICogVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0IGluIEhUVFAgYWRhcHRlcnMgYW5kIHRocm93cyBhbiBVbnN1cHBvcnRlZEVycm9yLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcGFyYW0ge1NlcXVlbmNlT3B0aW9uc30gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBzZXF1ZW5jZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFNlcXVlbmNlPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY3JlYXRlZCBzZXF1ZW5jZVxuICAgKiBAdGhyb3dzIHtVbnN1cHBvcnRlZEVycm9yfSBBbHdheXMgdGhyb3dzIGFzIHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVmYXVsdFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICAgIFwiQXBpIGlzIG5vdCBuYXRpdmVseSBhdmFpbGFibGUgZm9yIEh0dHBBZGFwdGVycy4gSWYgcmVxdWlyZWQsIHBsZWFzZSBleHRlbmRzIHRoaXMgY2xhc3NcIlxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzdGF0ZW1lbnQgZm9yIHF1ZXJ5aW5nXG4gICAqIEBzdW1tYXJ5IE1ldGhvZCBmb3IgY3JlYXRpbmcgYSBzdGF0ZW1lbnQgZm9yIGJ1aWxkaW5nIGFuZCBleGVjdXRpbmcgcXVlcmllcy5cbiAgICogVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0IGluIEhUVFAgYWRhcHRlcnMgYW5kIHRocm93cyBhbiBVbnN1cHBvcnRlZEVycm9yLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGltcGxlbWVudGF0aW9uLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEB0ZW1wbGF0ZSAhIC0gVGhlIHJhdyBxdWVyeSB0eXBlXG4gICAqIEByZXR1cm4ge1N0YXRlbWVudDxRLCBNLCBhbnk+fSBBIHN0YXRlbWVudCBvYmplY3QgZm9yIGJ1aWxkaW5nIHF1ZXJpZXNcbiAgICogQHRocm93cyB7VW5zdXBwb3J0ZWRFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIG92ZXJyaWRlIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw+KCk6IFN0YXRlbWVudDxRLCBNLCBhbnk+IHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgIFwiQXBpIGlzIG5vdCBuYXRpdmVseSBhdmFpbGFibGUgZm9yIEh0dHBBZGFwdGVycy4gSWYgcmVxdWlyZWQsIHBsZWFzZSBleHRlbmRzIHRoaXMgY2xhc3NcIlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhIGNvbmRpdGlvbiBpbnRvIGEgcXVlcnlcbiAgICogQHN1bW1hcnkgTWV0aG9kIGZvciBwYXJzaW5nIGEgY29uZGl0aW9uIG9iamVjdCBpbnRvIGEgcXVlcnkgZm9ybWF0IHVuZGVyc3Rvb2QgYnkgdGhlIEhUVFAgY2xpZW50LlxuICAgKiBUaGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHQgaW4gSFRUUCBhZGFwdGVycyBhbmQgdGhyb3dzIGFuIFVuc3VwcG9ydGVkRXJyb3IuXG4gICAqIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHByb3ZpZGUgaW1wbGVtZW50YXRpb24uXG4gICAqIEBwYXJhbSB7Q29uZGl0aW9uPGFueT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gcGFyc2VcbiAgICogQHJldHVybiB7UX0gVGhlIHBhcnNlZCBxdWVyeVxuICAgKiBAdGhyb3dzIHtVbnN1cHBvcnRlZEVycm9yfSBBbHdheXMgdGhyb3dzIGFzIHRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVmYXVsdFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwYXJzZUNvbmRpdGlvbihjb25kaXRpb246IENvbmRpdGlvbjxhbnk+KTogUSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG59XG4iXX0=
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBRVAsZUFBZSxFQUlmLGdCQUFnQixHQUNqQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFHTCxhQUFhLEdBRWQsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQWUsS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSx5QkFBc0I7QUFHNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLE9BQWdCLFdBTXBCLFNBQVEsT0FBd0I7SUFDaEMsWUFBc0IsTUFBUyxFQUFFLE9BQWUsRUFBRSxLQUFjO1FBQzlELEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ00sS0FBSyxDQUNaLFNBSXdCLEVBQ3hCLEtBQXFCLEVBQ3JCLFNBQXFCO1FBRXJCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFJLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDaEUsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sVUFBVTtRQUdqQixPQUFPLFdBRU4sQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNNLE9BQU8sQ0FDZCxLQUFRLEVBQ1IsRUFBVztRQU1YLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMs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LEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRUosbUVBQW1FO1FBQ25FLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxVQUFVLENBQUMsR0FBVTtRQUNuQixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLFFBQVEsT0FBTyxFQUFFLENBQUM7WUFDaEI7Z0JBQ0UsT0FBTyxHQUFnQixDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBNEVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsNkRBQTZEO0lBQzdELEdBQUcsQ0FBSSxRQUFXLEVBQUUsT0FBZ0IsRUFBRSxHQUFHLElBQVc7UUFDbEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixJQUFJLGdCQUFnQixDQUNsQix3RkFBd0YsQ0FDekYsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsNkRBQTZEO0lBQzdELFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQ25CLElBQUksZ0JBQWdCLENBQ2xCLHdGQUF3RixDQUN6RixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ00sU0FBUztRQUNoQixNQUFNLElBQUksZ0JBQWdCLENBQ3hCLHdGQUF3RixDQUN6RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsNkRBQTZEO0lBQzdELGNBQWMsQ0FBQyxTQUF5QjtRQUN0QyxNQUFNLElBQUksZ0JBQWdCLENBQ3hCLHdGQUF3RixDQUN6RixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWRhcHRlcixcbiAgQ29uZGl0aW9uLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFJlcG9zaXRvcnksXG4gIFNlcXVlbmNlLFxuICBTZXF1ZW5jZU9wdGlvbnMsXG4gIFVuc3VwcG9ydGVkRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb250ZXh0LFxuICBJbnRlcm5hbEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IEh0dHBDb25maWcsIEh0dHBGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciwgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gXCIuL1Jlc3RTZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdGF0ZW1lbnQgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgSFRUUCBhZGFwdGVyIGZvciBSRVNUIEFQSSBpbnRlcmFjdGlvbnNcbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgSFRUUCBhZGFwdGVycyB3aXRoIG1ldGhvZHMgZm9yIENSVUQgb3BlcmF0aW9ucyxcbiAqIFVSTCBjb25zdHJ1Y3Rpb24sIGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBjb3JlIEFkYXB0ZXIgY2xhc3MgYW5kXG4gKiBpbXBsZW1lbnRzIHRoZSBuZWNlc3NhcnkgbWV0aG9kcyBmb3IgSFRUUCBjb21tdW5pY2F0aW9uLiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnNcbiAqIG11c3QgcHJvdmlkZSBzcGVjaWZpYyBIVFRQIGNsaWVudCBmdW5jdGlvbmFsaXR5LlxuICogQHRlbXBsYXRlIFkgLSBUaGUgbmF0aXZlIEhUVFAgY2xpZW50IHR5cGVcbiAqIEB0ZW1wbGF0ZSBRIC0gVGhlIHF1ZXJ5IHR5cGUgdXNlZCBieSB0aGUgYWRhcHRlclxuICogQHRlbXBsYXRlIEYgLSBUaGUgSFRUUCBmbGFncyB0eXBlLCBleHRlbmRpbmcgSHR0cEZsYWdzXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUsIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1l9IG5hdGl2ZSAtIFRoZSBuYXRpdmUgSFRUUCBjbGllbnQgaW5zdGFuY2VcbiAqIEBwYXJhbSB7SHR0cENvbmZpZ30gY29uZmlnIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIEhUVFAgYWRhcHRlclxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgLSBUaGUgYWRhcHRlciBmbGF2b3IgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBhbGlhcyBmb3IgdGhlIGFkYXB0ZXJcbiAqIEBjbGFzcyBIdHRwQWRhcHRlclxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEV4YW1wbGUgaW1wbGVtZW50YXRpb24gd2l0aCBBeGlvc1xuICogY2xhc3MgQXhpb3NBZGFwdGVyIGV4dGVuZHMgSHR0cEFkYXB0ZXI8QXhpb3NJbnN0YW5jZSwgQXhpb3NSZXF1ZXN0Q29uZmlnPiB7XG4gKiAgIGNvbnN0cnVjdG9yKGNvbmZpZzogSHR0cENvbmZpZykge1xuICogICAgIHN1cGVyKGF4aW9zLmNyZWF0ZSgpLCBjb25maWcsICdheGlvcycpO1xuICogICB9XG4gKlxuICogICBhc3luYyByZXF1ZXN0PFY+KGRldGFpbHM6IEF4aW9zUmVxdWVzdENvbmZpZyk6IFByb21pc2U8Vj4ge1xuICogICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5uYXRpdmUucmVxdWVzdChkZXRhaWxzKTtcbiAqICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAqICAgfVxuICpcbiAqICAgLy8gSW1wbGVtZW50IG90aGVyIGFic3RyYWN0IG1ldGhvZHMuLi5cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSHR0cEFkYXB0ZXI8XG4gIFkgZXh0ZW5kcyBIdHRwQ29uZmlnLFxuICBDT04sXG4gIFEsXG4gIEYgZXh0ZW5kcyBIdHRwRmxhZ3MgPSBIdHRwRmxhZ3MsXG4gIEMgZXh0ZW5kcyBDb250ZXh0PEY+ID0gQ29udGV4dDxGPixcbj4gZXh0ZW5kcyBBZGFwdGVyPFksIENPTiwgUSwgRiwgQz4ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoY29uZmlnOiBZLCBmbGF2b3VyOiBzdHJpbmcsIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoY29uZmlnLCBmbGF2b3VyLCBhbGlhcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBvcGVyYXRpb24gZmxhZ3Mgd2l0aCBIVFRQIGhlYWRlcnNcbiAgICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzZSBmbGFncyBtZXRob2QgdG8gaW5jbHVkZSBIVFRQLXNwZWNpZmljIGhlYWRlcnMgZm9yIG9wZXJhdGlvbnMuXG4gICAqIFRoaXMgbWV0aG9kIGFkZHMgYW4gZW1wdHkgaGVhZGVycyBvYmplY3QgdG8gdGhlIGZsYWdzIHJldHVybmVkIGJ5IHRoZSBwYXJlbnQgY2xhc3MuXG4gICAqIEB0ZW1wbGF0ZSBGIC0gVGhlIFJlcG9zaXRvcnkgRmxhZ3MgdHlwZVxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5cy5DUkVBVEV8T3BlcmF0aW9uS2V5cy5SRUFEfE9wZXJhdGlvbktleXMuVVBEQVRFfE9wZXJhdGlvbktleXMuREVMRVRFfSBvcGVyYXRpb24gLSBUaGUgb3BlcmF0aW9uIHR5cGVcbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEY+fSBvdmVycmlkZXMgLSBPcHRpb25hbCBmbGFnIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJuIHtGfSBUaGUgZmxhZ3Mgb2JqZWN0IHdpdGggaGVhZGVyc1xuICAgKi9cbiAgb3ZlcnJpZGUgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvcGVyYXRpb246XG4gICAgICB8IE9wZXJhdGlvbktleXMuQ1JFQVRFXG4gICAgICB8IE9wZXJhdGlvbktleXMuUkVBRFxuICAgICAgfCBPcGVyYXRpb25LZXlzLlVQREFURVxuICAgICAgfCBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBtb2RlbDogQ29uc3RydWN0b3I8TT4sXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPEY+XG4gICkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN1cGVyLmZsYWdzPE0+KG9wZXJhdGlvbiwgbW9kZWwsIG92ZXJyaWRlcyksIHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXR1cm5zIHRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIGZvciB0aGlzIGFkYXB0ZXJcbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgdGhlIFJlc3RTZXJ2aWNlIGNsYXNzIGFzIHRoZSByZXBvc2l0b3J5IGltcGxlbWVudGF0aW9uIGZvciB0aGlzIEhUVFAgYWRhcHRlci5cbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSBpbnN0YW5jZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBhZGFwdGVyIHR5cGUuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGVcbiAgICogQHJldHVybiB7Q29uc3RydWN0b3I8UmVwb3NpdG9yeTxNLCBRLCBIdHRwQWRhcHRlcjxZLCBRLCBGLCBDPiwgRiwgQz4+fSBUaGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvclxuICAgKi9cbiAgb3ZlcnJpZGUgcmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+KCk6IENvbnN0cnVjdG9yPFxuICAgIFJlcG9zaXRvcnk8TSwgUSwgSHR0cEFkYXB0ZXI8WSwgQ09OLCBRLCBGLCBDPiwgRiwgQz5cbiAgPiB7XG4gICAgcmV0dXJuIFJlc3RTZXJ2aWNlIGFzIHVua25vd24gYXMgQ29uc3RydWN0b3I8XG4gICAgICBSZXBvc2l0b3J5PE0sIFEsIEh0dHBBZGFwdGVyPFksIENPTiwgUSwgRiwgQz4sIEYsIEM+XG4gICAgPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgYSBtb2RlbCBmb3IgcGVyc2lzdGVuY2VcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBtb2RlbCBpbnN0YW5jZSBpbnRvIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBkYXRhYmFzZSBzdG9yYWdlLFxuICAgKiBoYW5kbGluZyBjb2x1bW4gbWFwcGluZyBhbmQgc2VwYXJhdGluZyB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gcHJlcGFyZVxuICAgKiBAcGFyYW0gcGsgLSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBkYXRhXG4gICAqL1xuICBvdmVycmlkZSBwcmVwYXJlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgcGs6IGtleW9mIE1cbiAgKToge1xuICAgIHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIH0ge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnByZXBhcmUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGVsKTtcbiAgICBpZiAoKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXSkge1xuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyBwZXJzaXN0ZW5jZSBtZXRhZGF0YSBmb3IgJHsobW9kZWwgYXMgYW55KVtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdfWBcbiAgICAgICk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEEsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZWNvcmQ6IG1vZGVsLFxuICAgICAgaWQ6IG1vZGVsW3BrXSBhcyBzdHJpbmcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgZGF0YWJhc2UgZGF0YSBiYWNrIGludG8gYSBtb2RlbCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBSZWNvbnN0cnVjdHMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIGRhdGFiYXNlIGRhdGEsIGhhbmRsaW5nIGNvbHVtbiBtYXBwaW5nXG4gICAqIGFuZCByZWF0dGFjaGluZyB0cmFuc2llbnQgcHJvcGVydGllc1xuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlXG4gICAqIEBwYXJhbSBvYmogLSBUaGUgZGF0YWJhc2UgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfENvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBtb2RlbCBjbGFzcyBvciBuYW1lXG4gICAqIEBwYXJhbSBwayAtIFRoZSBwcmltYXJ5IGtleSBwcm9wZXJ0eSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIHByaW1hcnkga2V5IHZhbHVlXG4gICAqIEByZXR1cm4ge019IFRoZSByZWNvbnN0cnVjdGVkIG1vZGVsIGluc3RhbmNlXG4gICAqL1xuICBvdmVycmlkZSByZXZlcnQ8TSBleHRlbmRzIE1vZGVsPihcbiAgICBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgY2xheno6IHN0cmluZyB8IENvbnN0cnVjdG9yPE0+LFxuICAgIHBrOiBrZXlvZiBNLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgKTogTSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMucmV2ZXJ0KTtcbiAgICBjb25zdCBvYjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGNvbnN0IG0gPSAoXG4gICAgICB0eXBlb2YgY2xhenogPT09IFwic3RyaW5nXCIgPyBNb2RlbC5idWlsZChvYiwgY2xhenopIDogbmV3IGNsYXp6KG9iKVxuICAgICkgYXMgTTtcbiAgICBsb2cuc2lsbHkoYFJlYnVpbGRpbmcgbW9kZWwgJHttLmNvbnN0cnVjdG9yLm5hbWV9IGlkICR7aWR9YCk7XG4gICAgY29uc3QgY29uc3RyID0gdHlwZW9mIGNsYXp6ID09PSBcInN0cmluZ1wiID8gTW9kZWwuZ2V0KGNsYXp6KSA6IGNsYXp6O1xuICAgIGlmICghY29uc3RyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmV0cmlldmUgbW9kZWwgY29uc3RydWN0b3IgZm9yICR7Y2xhenp9YFxuICAgICAgKTtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgKGNvbnN0ciBhcyBDb25zdHJ1Y3RvcjxNPikob2JqKTtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG9ialtQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFdO1xuICAgIGlmIChtZXRhZGF0YSkge1xuICAgICAgbG9nLnNpbGx5KFxuICAgICAgICBgUGFzc2luZyBhbG9uZyAke3RoaXMuZmxhdm91cn0gcGVyc2lzdGVuY2UgbWV0YWRhdGEgZm9yICR7bS5jb25zdHJ1Y3Rvci5uYW1lfSBpZCAke2lkfTogJHttZXRhZGF0YX1gXG4gICAgICApO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnN0cnVjdHMgYSBVUkwgZm9yIEFQSSByZXF1ZXN0c1xuICAgKiBAc3VtbWFyeSBCdWlsZHMgYSBjb21wbGV0ZSBVUkwgZm9yIEFQSSByZXF1ZXN0cyB1c2luZyB0aGUgY29uZmlndXJlZCBwcm90b2NvbCBhbmQgaG9zdCxcbiAgICogdGhlIHNwZWNpZmllZCB0YWJsZSBuYW1lLCBhbmQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy4gVGhlIG1ldGhvZCBoYW5kbGVzIFVSTCBlbmNvZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvciBlbmRwb2ludFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj59IFtxdWVyeVBhcmFtc10gLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVuY29kZWQgVVJMIHN0cmluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIHVybChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj5cbiAgKSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChcbiAgICAgIGAke3RoaXMuY29uZmlnLnByb3RvY29sfTovLyR7dGhpcy5jb25maWcuaG9zdH0vJHt0YWJsZU5hbWV9YFxuICAgICk7XG4gICAgaWYgKHF1ZXJ5UGFyYW1zKVxuICAgICAgT2JqZWN0LmVudHJpZXMocXVlcnlQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT5cbiAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygpKVxuICAgICAgKTtcblxuICAgIC8vIGVuc3VyZSBzcGFjZXMgYXJlIGVuY29kZWQgYXMgJTIwIChub3QgJysnKSB0byBtYXRjaCBleHBlY3RhdGlvbnNcbiAgICByZXR1cm4gZW5jb2RlVVJJKHVybC50b1N0cmluZygpKS5yZXBsYWNlKC9cXCsvZywgXCIlMjBcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhbmQgY29udmVydHMgZXJyb3JzIHRvIEJhc2VFcnJvciB0eXBlXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgSFRUUCBvcGVyYXRpb25zIGFuZCBjb252ZXJ0cyB0aGVtIHRvXG4gICAqIHRoZSBhcHByb3ByaWF0ZSBCYXNlRXJyb3IgdHlwZS4gQ3VycmVudGx5IHJldHVybnMgdGhlIGVycm9yIGFzLWlzLCBidXQgY2FuIGJlXG4gICAqIGV4dGVuZGVkIHRvIGhhbmRsZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlcyBkaWZmZXJlbnRseS5cbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEByZXR1cm4ge0Jhc2VFcnJvcn0gVGhlIHBhcnNlZCBlcnJvciBhcyBhIEJhc2VFcnJvclxuICAgKi9cbiAgcGFyc2VFcnJvcihlcnI6IEVycm9yKTogQmFzZUVycm9yIHtcbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IGVycjtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UpIHtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlcnIgYXMgQmFzZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2VuZHMgYW4gSFRUUCByZXF1ZXN0XG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBzZW5kIEhUVFAgcmVxdWVzdHNcbiAgICogdXNpbmcgdGhlIG5hdGl2ZSBIVFRQIGNsaWVudC4gVGhpcyBpcyB0aGUgY29yZSBtZXRob2QgZm9yIG1ha2luZyBBUEkgY2FsbHMuXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJlc3BvbnNlIHZhbHVlIHR5cGVcbiAgICogQHBhcmFtIHtRfSBkZXRhaWxzIC0gVGhlIHJlcXVlc3QgZGV0YWlscyBzcGVjaWZpYyB0byB0aGUgSFRUUCBjbGllbnRcbiAgICogQHJldHVybiB7UHJvbWlzZTxWPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YVxuICAgKi9cbiAgYWJzdHJhY3QgcmVxdWVzdDxWPihkZXRhaWxzOiBRKTogUHJvbWlzZTxWPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgcmVzb3VyY2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGNyZWF0ZSBhIG5ldyByZXNvdXJjZVxuICAgKiB2aWEgSFRUUC4gVGhpcyB0eXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBQT1NUIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgb3IgZW5kcG9pbnRcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb2RlbCAtIFRoZSBkYXRhIG1vZGVsIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY3JlYXRlZCByZXNvdXJjZVxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGUgY3JlYXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHJlc291cmNlIGJ5IElEXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byByZXRyaWV2ZSBhIHJlc291cmNlXG4gICAqIHZpYSBIVFRQLiBUaGlzIHR5cGljYWxseSBjb3JyZXNwb25kcyB0byBhIEdFVCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIGVuZHBvaW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIGlkZW50aWZpZXIgZm9yIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmV0cmlldmVkIHJlc291cmNlXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSByZWFkKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcmVzb3VyY2VcbiAgICogQHN1bW1hcnkgQWJzdHJhY3QgbWV0aG9kIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIHVwZGF0ZSBhIHJlc291cmNlXG4gICAqIHZpYSBIVFRQLiBUaGlzIHR5cGljYWxseSBjb3JyZXNwb25kcyB0byBhIFBVVCBvciBQQVRDSCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIGVuZHBvaW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgLSBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gbW9kZWwgLSBUaGUgdXBkYXRlZCBkYXRhIG1vZGVsXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB1cGRhdGVkIHJlc291cmNlXG4gICAqL1xuICBhYnN0cmFjdCBvdmVycmlkZSB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHJlc291cmNlIGJ5IElEXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0aGF0IG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBkZWxldGUgYSByZXNvdXJjZVxuICAgKiB2aWEgSFRUUC4gVGhpcyB0eXBpY2FsbHkgY29ycmVzcG9uZHMgdG8gYSBERUxFVEUgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBvciBlbmRwb2ludFxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8YmlnaW50fSBpZCAtIFRoZSBpZGVudGlmaWVyIGZvciB0aGUgcmVzb3VyY2UgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50c1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkZWxldGlvbiByZXN1bHRcbiAgICovXG4gIGFic3RyYWN0IG92ZXJyaWRlIGRlbGV0ZShcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIHJhdyBxdWVyeVxuICAgKiBAc3VtbWFyeSBNZXRob2QgZm9yIGV4ZWN1dGluZyByYXcgcXVlcmllcyBkaXJlY3RseSB3aXRoIHRoZSBIVFRQIGNsaWVudC5cbiAgICogVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0IGluIEhUVFAgYWRhcHRlcnMgYW5kIHRocm93cyBhbiBVbnN1cHBvcnRlZEVycm9yLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGltcGxlbWVudGF0aW9uLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSByZXN1bHQgdHlwZVxuICAgKiBAcGFyYW0ge1F9IHJhd0lucHV0IC0gVGhlIHJhdyBxdWVyeSBpbnB1dFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByb2Nlc3MgLSBXaGV0aGVyIHRvIHByb2Nlc3MgdGhlIHJlc3VsdFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcXVlcnkgcmVzdWx0XG4gICAqIEB0aHJvd3Mge1Vuc3VwcG9ydGVkRXJyb3J9IEFsd2F5cyB0aHJvd3MgYXMgdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHJhdzxSPihyYXdJbnB1dDogUSwgcHJvY2VzczogYm9vbGVhbiwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPFI+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcihcbiAgICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IE1ldGhvZCBmb3IgY3JlYXRpbmcgYSBzZXF1ZW5jZSBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaWRlbnRpZmllcnMuXG4gICAqIFRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpbiBIVFRQIGFkYXB0ZXJzIGFuZCB0aHJvd3MgYW4gVW5zdXBwb3J0ZWRFcnJvci5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHBhcmFtIHtTZXF1ZW5jZU9wdGlvbnN9IG9wdGlvbnMgLSBPcHRpb25zIGZvciBjcmVhdGluZyB0aGUgc2VxdWVuY2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTZXF1ZW5jZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNyZWF0ZWQgc2VxdWVuY2VcbiAgICogQHRocm93cyB7VW5zdXBwb3J0ZWRFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgU2VxdWVuY2Uob3B0aW9uczogU2VxdWVuY2VPcHRpb25zKTogUHJvbWlzZTxTZXF1ZW5jZT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcbiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc3RhdGVtZW50IGZvciBxdWVyeWluZ1xuICAgKiBAc3VtbWFyeSBNZXRob2QgZm9yIGNyZWF0aW5nIGEgc3RhdGVtZW50IGZvciBidWlsZGluZyBhbmQgZXhlY3V0aW5nIHF1ZXJpZXMuXG4gICAqIFRoaXMgbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVmYXVsdCBpbiBIVFRQIGFkYXB0ZXJzIGFuZCB0aHJvd3MgYW4gVW5zdXBwb3J0ZWRFcnJvci5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gcHJvdmlkZSBpbXBsZW1lbnRhdGlvbi5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZVxuICAgKiBAdGVtcGxhdGUgISAtIFRoZSByYXcgcXVlcnkgdHlwZVxuICAgKiBAcmV0dXJuIHtTdGF0ZW1lbnQ8USwgTSwgYW55Pn0gQSBzdGF0ZW1lbnQgb2JqZWN0IGZvciBidWlsZGluZyBxdWVyaWVzXG4gICAqIEB0aHJvd3Mge1Vuc3VwcG9ydGVkRXJyb3J9IEFsd2F5cyB0aHJvd3MgYXMgdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0XG4gICAqL1xuICBvdmVycmlkZSBTdGF0ZW1lbnQ8TSBleHRlbmRzIE1vZGVsPigpOiBTdGF0ZW1lbnQ8USwgTSwgYW55PiB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICBcIkFwaSBpcyBub3QgbmF0aXZlbHkgYXZhaWxhYmxlIGZvciBIdHRwQWRhcHRlcnMuIElmIHJlcXVpcmVkLCBwbGVhc2UgZXh0ZW5kcyB0aGlzIGNsYXNzXCJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb25kaXRpb24gaW50byBhIHF1ZXJ5XG4gICAqIEBzdW1tYXJ5IE1ldGhvZCBmb3IgcGFyc2luZyBhIGNvbmRpdGlvbiBvYmplY3QgaW50byBhIHF1ZXJ5IGZvcm1hdCB1bmRlcnN0b29kIGJ5IHRoZSBIVFRQIGNsaWVudC5cbiAgICogVGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSBkZWZhdWx0IGluIEhUVFAgYWRhcHRlcnMgYW5kIHRocm93cyBhbiBVbnN1cHBvcnRlZEVycm9yLlxuICAgKiBTdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBwcm92aWRlIGltcGxlbWVudGF0aW9uLlxuICAgKiBAcGFyYW0ge0NvbmRpdGlvbjxhbnk+fSBjb25kaXRpb24gLSBUaGUgY29uZGl0aW9uIHRvIHBhcnNlXG4gICAqIEByZXR1cm4ge1F9IFRoZSBwYXJzZWQgcXVlcnlcbiAgICogQHRocm93cyB7VW5zdXBwb3J0ZWRFcnJvcn0gQWx3YXlzIHRocm93cyBhcyB0aGlzIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlZmF1bHRcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcGFyc2VDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb248YW55Pik6IFEge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKFxuICAgICAgXCJBcGkgaXMgbm90IG5hdGl2ZWx5IGF2YWlsYWJsZSBmb3IgSHR0cEFkYXB0ZXJzLiBJZiByZXF1aXJlZCwgcGxlYXNlIGV4dGVuZHMgdGhpcyBjbGFzc1wiXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import "@decaf-ts/core";
1
2
  /**
2
3
  * @description HTTP client module for REST API interactions
3
4
  * @summary This module provides classes and utilities for interacting with REST APIs.
@@ -6,6 +7,7 @@
6
7
  * {@link RestRepository} and {@link RestService} for API interactions.
7
8
  * @module for-http
8
9
  */
10
+ export * from "./axios";
9
11
  export * from "./adapter";
10
12
  export * from "./RestRepository";
11
13
  export * from "./RestService";
@@ -15,4 +17,4 @@ export * from "./types";
15
17
  * @summary Version identifier for the module
16
18
  * @const VERSION
17
19
  */
18
- export declare const VERSION = "0.2.6";
20
+ export declare const VERSION = "0.2.7";
package/lib/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import "@decaf-ts/core";
1
2
  /**
2
3
  * @description HTTP client module for REST API interactions
3
4
  * @summary This module provides classes and utilities for interacting with REST APIs.
@@ -6,6 +7,7 @@
6
7
  * {@link RestRepository} and {@link RestService} for API interactions.
7
8
  * @module for-http
8
9
  */
10
+ export * from "./axios/index.js";
9
11
  export * from "./adapter.js";
10
12
  export * from "./RestRepository.js";
11
13
  export * from "./RestService.js";
@@ -15,5 +17,5 @@ export * from "./types.js";
15
17
  * @summary Version identifier for the module
16
18
  * @const VERSION
17
19
  */
18
- export const VERSION = "0.2.6";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUNILDZCQUEwQjtBQUMxQixvQ0FBaUM7QUFDakMsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUV4Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEhUVFAgY2xpZW50IG1vZHVsZSBmb3IgUkVTVCBBUEkgaW50ZXJhY3Rpb25zXG4gKiBAc3VtbWFyeSBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgZm9yIGludGVyYWN0aW5nIHdpdGggUkVTVCBBUElzLlxuICogSXQgZXhwb3NlcyByZXBvc2l0b3J5IGFuZCBzZXJ2aWNlIGNsYXNzZXMgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLCBhbG9uZyB3aXRoXG4gKiB0eXBlIGRlZmluaXRpb25zIGFuZCBhZGFwdGVycyBmb3IgZGlmZmVyZW50IEhUVFAgY2xpZW50cy4gVGhlIG1vZHVsZSBpbmNsdWRlc1xuICoge0BsaW5rIFJlc3RSZXBvc2l0b3J5fSBhbmQge0BsaW5rIFJlc3RTZXJ2aWNlfSBmb3IgQVBJIGludGVyYWN0aW9ucy5cbiAqIEBtb2R1bGUgZm9yLWh0dHBcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVzdFJlcG9zaXRvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RTZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZlcnNpb24gb2YgdGhlIGZvci1odHRwIG1vZHVsZVxuICogQHN1bW1hcnkgVmVyc2lvbiBpZGVudGlmaWVyIGZvciB0aGUgbW9kdWxlXG4gKiBAY29uc3QgVkVSU0lPTlxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
20
+ export const VERSION = "0.2.7";
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsQ0FBQztBQUV4Qjs7Ozs7OztHQU9HO0FBQ0gsaUNBQXdCO0FBQ3hCLDZCQUEwQjtBQUMxQixvQ0FBaUM7QUFDakMsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUV4Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhUVFAgY2xpZW50IG1vZHVsZSBmb3IgUkVTVCBBUEkgaW50ZXJhY3Rpb25zXG4gKiBAc3VtbWFyeSBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgZm9yIGludGVyYWN0aW5nIHdpdGggUkVTVCBBUElzLlxuICogSXQgZXhwb3NlcyByZXBvc2l0b3J5IGFuZCBzZXJ2aWNlIGNsYXNzZXMgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLCBhbG9uZyB3aXRoXG4gKiB0eXBlIGRlZmluaXRpb25zIGFuZCBhZGFwdGVycyBmb3IgZGlmZmVyZW50IEhUVFAgY2xpZW50cy4gVGhlIG1vZHVsZSBpbmNsdWRlc1xuICoge0BsaW5rIFJlc3RSZXBvc2l0b3J5fSBhbmQge0BsaW5rIFJlc3RTZXJ2aWNlfSBmb3IgQVBJIGludGVyYWN0aW9ucy5cbiAqIEBtb2R1bGUgZm9yLWh0dHBcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vYXhpb3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RSZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXN0U2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBmb3ItaHR0cCBtb2R1bGVcbiAqIEBzdW1tYXJ5IFZlcnNpb24gaWRlbnRpZmllciBmb3IgdGhlIG1vZHVsZVxuICogQGNvbnN0IFZFUlNJT05cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
package/lib/index.cjs CHANGED
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.VERSION = void 0;
18
+ require("@decaf-ts/core");
18
19
  /**
19
20
  * @description HTTP client module for REST API interactions
20
21
  * @summary This module provides classes and utilities for interacting with REST APIs.
@@ -23,6 +24,7 @@ exports.VERSION = void 0;
23
24
  * {@link RestRepository} and {@link RestService} for API interactions.
24
25
  * @module for-http
25
26
  */
27
+ __exportStar(require("./axios/index.cjs"), exports);
26
28
  __exportStar(require("./adapter.cjs"), exports);
27
29
  __exportStar(require("./RestRepository.cjs"), exports);
28
30
  __exportStar(require("./RestService.cjs"), exports);
@@ -32,5 +34,5 @@ __exportStar(require("./types.cjs"), exports);
32
34
  * @summary Version identifier for the module
33
35
  * @const VERSION
34
36
  */
35
- exports.VERSION = "0.2.6";
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7OztHQU9HO0FBQ0gsZ0RBQTBCO0FBQzFCLHVEQUFpQztBQUNqQyxvREFBOEI7QUFDOUIsOENBQXdCO0FBRXhCOzs7O0dBSUc7QUFDVSxRQUFBLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBIVFRQIGNsaWVudCBtb2R1bGUgZm9yIFJFU1QgQVBJIGludGVyYWN0aW9uc1xuICogQHN1bW1hcnkgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgdXRpbGl0aWVzIGZvciBpbnRlcmFjdGluZyB3aXRoIFJFU1QgQVBJcy5cbiAqIEl0IGV4cG9zZXMgcmVwb3NpdG9yeSBhbmQgc2VydmljZSBjbGFzc2VzIGZvciBtYWtpbmcgSFRUUCByZXF1ZXN0cywgYWxvbmcgd2l0aFxuICogdHlwZSBkZWZpbml0aW9ucyBhbmQgYWRhcHRlcnMgZm9yIGRpZmZlcmVudCBIVFRQIGNsaWVudHMuIFRoZSBtb2R1bGUgaW5jbHVkZXNcbiAqIHtAbGluayBSZXN0UmVwb3NpdG9yeX0gYW5kIHtAbGluayBSZXN0U2VydmljZX0gZm9yIEFQSSBpbnRlcmFjdGlvbnMuXG4gKiBAbW9kdWxlIGZvci1odHRwXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RSZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXN0U2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBmb3ItaHR0cCBtb2R1bGVcbiAqIEBzdW1tYXJ5IFZlcnNpb24gaWRlbnRpZmllciBmb3IgdGhlIG1vZHVsZVxuICogQGNvbnN0IFZFUlNJT05cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
37
+ exports.VERSION = "0.2.7";
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQkFBd0I7QUFFeEI7Ozs7Ozs7R0FPRztBQUNILG9EQUF3QjtBQUN4QixnREFBMEI7QUFDMUIsdURBQWlDO0FBQ2pDLG9EQUE4QjtBQUM5Qiw4Q0FBd0I7QUFFeEI7Ozs7R0FJRztBQUNVLFFBQUEsT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIkBkZWNhZi10cy9jb3JlXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhUVFAgY2xpZW50IG1vZHVsZSBmb3IgUkVTVCBBUEkgaW50ZXJhY3Rpb25zXG4gKiBAc3VtbWFyeSBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGFzc2VzIGFuZCB1dGlsaXRpZXMgZm9yIGludGVyYWN0aW5nIHdpdGggUkVTVCBBUElzLlxuICogSXQgZXhwb3NlcyByZXBvc2l0b3J5IGFuZCBzZXJ2aWNlIGNsYXNzZXMgZm9yIG1ha2luZyBIVFRQIHJlcXVlc3RzLCBhbG9uZyB3aXRoXG4gKiB0eXBlIGRlZmluaXRpb25zIGFuZCBhZGFwdGVycyBmb3IgZGlmZmVyZW50IEhUVFAgY2xpZW50cy4gVGhlIG1vZHVsZSBpbmNsdWRlc1xuICoge0BsaW5rIFJlc3RSZXBvc2l0b3J5fSBhbmQge0BsaW5rIFJlc3RTZXJ2aWNlfSBmb3IgQVBJIGludGVyYWN0aW9ucy5cbiAqIEBtb2R1bGUgZm9yLWh0dHBcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vYXhpb3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1Jlc3RSZXBvc2l0b3J5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXN0U2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBmb3ItaHR0cCBtb2R1bGVcbiAqIEBzdW1tYXJ5IFZlcnNpb24gaWRlbnRpZmllciBmb3IgdGhlIG1vZHVsZVxuICogQGNvbnN0IFZFUlNJT05cbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
package/lib/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import "@decaf-ts/core";
1
2
  /**
2
3
  * @description HTTP client module for REST API interactions
3
4
  * @summary This module provides classes and utilities for interacting with REST APIs.
@@ -6,6 +7,7 @@
6
7
  * {@link RestRepository} and {@link RestService} for API interactions.
7
8
  * @module for-http
8
9
  */
10
+ export * from "./axios";
9
11
  export * from "./adapter";
10
12
  export * from "./RestRepository";
11
13
  export * from "./RestService";
@@ -15,4 +17,4 @@ export * from "./types";
15
17
  * @summary Version identifier for the module
16
18
  * @const VERSION
17
19
  */
18
- export declare const VERSION = "0.2.6";
20
+ export declare const VERSION = "0.2.7";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/for-http",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "http wrappers for decaf-ts",
5
5
  "type": "module",
6
6
  "exports": {