angular-in-memory-web-api
Version:
An in-memory web api for Angular demos and tests
85 lines • 20 kB
JavaScript
import { Injectable } from '@angular/core';
import * as i0 from "@angular/core";
/**
* Interface for a class that creates an in-memory database
*
* Its `createDb` method creates a hash of named collections that represents the database
*
* For maximum flexibility, the service may define HTTP method overrides.
* Such methods must match the spelling of an HTTP method in lower case (e.g, "get").
* If a request has a matching method, it will be called as in
* `get(info: requestInfo, db: {})` where `db` is the database object described above.
*/
export class InMemoryDbService {
}
/**
* Interface for InMemoryBackend configuration options
*/
export class InMemoryBackendConfigArgs {
}
/////////////////////////////////
/**
* InMemoryBackendService configuration options
* Usage:
* InMemoryWebApiModule.forRoot(InMemHeroService, {delay: 600})
*
* or if providing separately:
* provide(InMemoryBackendConfig, {useValue: {delay: 600}}),
*/
export class InMemoryBackendConfig {
constructor(config = {}) {
Object.assign(this, {
// default config:
caseSensitiveSearch: false,
dataEncapsulation: false, // do NOT wrap content within an object with a `data` property
delay: 500, // simulate latency by delaying response
delete404: false, // don't complain if can't find entity to delete
passThruUnknownUrl: false, // 404 if can't process URL
post204: true, // don't return the item after a POST
post409: false, // don't update existing item with that ID
put204: true, // don't return the item after a PUT
put404: false, // create new item if PUT item with that ID not found
apiBase: undefined, // assumed to be the first path segment
host: undefined, // default value is actually set in InMemoryBackendService ctor
rootPath: undefined, // default value is actually set in InMemoryBackendService ctor
}, config);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "0.0.0", ngImport: i0, type: InMemoryBackendConfig, deps: [{ token: InMemoryBackendConfigArgs }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "0.0.0", ngImport: i0, type: InMemoryBackendConfig }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "0.0.0", ngImport: i0, type: InMemoryBackendConfig, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: InMemoryBackendConfigArgs }] });
/** Return information (UriInfo) about a URI */
export function parseUri(str) {
// Adapted from parseuri package - http://blog.stevenlevithan.com/archives/parseuri
// tslint:disable-next-line:max-line-length
const URL_REGEX = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
const m = URL_REGEX.exec(str);
const uri = {
source: '',
protocol: '',
authority: '',
userInfo: '',
user: '',
password: '',
host: '',
port: '',
relative: '',
path: '',
directory: '',
file: '',
query: '',
anchor: '',
};
const keys = Object.keys(uri);
let i = keys.length;
while (i--) {
uri[keys[i]] = (m && m[i]) || '';
}
return uri;
}
export function removeTrailingSlash(path) {
return path.replace(/\/$/, '');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pc2MvYW5ndWxhci1pbi1tZW1vcnktd2ViLWFwaS9zcmMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOztBQUd6Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQWdCLGlCQUFpQjtDQWlCdEM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBZ0IseUJBQXlCO0NBbUQ5QztBQUVELGlDQUFpQztBQUNqQzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxZQUFZLFNBQW9DLEVBQUU7UUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUFJLEVBQ0o7WUFDRSxrQkFBa0I7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSztZQUMxQixpQkFBaUIsRUFBRSxLQUFLLEVBQUUsOERBQThEO1lBQ3hGLEtBQUssRUFBRSxHQUFHLEVBQUUsd0NBQXdDO1lBQ3BELFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0RBQWdEO1lBQ2xFLGtCQUFrQixFQUFFLEtBQUssRUFBRSwyQkFBMkI7WUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxxQ0FBcUM7WUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSwwQ0FBMEM7WUFDMUQsTUFBTSxFQUFFLElBQUksRUFBRSxvQ0FBb0M7WUFDbEQsTUFBTSxFQUFFLEtBQUssRUFBRSxxREFBcUQ7WUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSx1Q0FBdUM7WUFDM0QsSUFBSSxFQUFFLFNBQVMsRUFBRSwrREFBK0Q7WUFDaEYsUUFBUSxFQUFFLFNBQVMsRUFBRSwrREFBK0Q7U0FDckYsRUFDRCxNQUFNLENBQ1AsQ0FBQztJQUNKLENBQUM7eUhBckJVLHFCQUFxQjs2SEFBckIscUJBQXFCOztzR0FBckIscUJBQXFCO2tCQURqQyxVQUFVOztBQXlCWCxnREFBZ0Q7QUFDaEQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFXO0lBQ2xDLG1GQUFtRjtJQUNuRiwyQ0FBMkM7SUFDM0MsTUFBTSxTQUFTLEdBQ2Isa01BQWtNLENBQUM7SUFDck0sTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLEdBQUcsR0FBc0M7UUFDN0MsTUFBTSxFQUFFLEVBQUU7UUFDVixRQUFRLEVBQUUsRUFBRTtRQUNaLFNBQVMsRUFBRSxFQUFFO1FBQ2IsUUFBUSxFQUFFLEVBQUU7UUFDWixJQUFJLEVBQUUsRUFBRTtRQUNSLFFBQVEsRUFBRSxFQUFFO1FBQ1osSUFBSSxFQUFFLEVBQUU7UUFDUixJQUFJLEVBQUUsRUFBRTtRQUNSLFFBQVEsRUFBRSxFQUFFO1FBQ1osSUFBSSxFQUFFLEVBQUU7UUFDUixTQUFTLEVBQUUsRUFBRTtRQUNiLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtLQUNYLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFFcEIsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBNEJELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0h0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGEgY2xhc3MgdGhhdCBjcmVhdGVzIGFuIGluLW1lbW9yeSBkYXRhYmFzZVxuICpcbiAqIEl0cyBgY3JlYXRlRGJgIG1ldGhvZCBjcmVhdGVzIGEgaGFzaCBvZiBuYW1lZCBjb2xsZWN0aW9ucyB0aGF0IHJlcHJlc2VudHMgdGhlIGRhdGFiYXNlXG4gKlxuICogRm9yIG1heGltdW0gZmxleGliaWxpdHksIHRoZSBzZXJ2aWNlIG1heSBkZWZpbmUgSFRUUCBtZXRob2Qgb3ZlcnJpZGVzLlxuICogU3VjaCBtZXRob2RzIG11c3QgbWF0Y2ggdGhlIHNwZWxsaW5nIG9mIGFuIEhUVFAgbWV0aG9kIGluIGxvd2VyIGNhc2UgKGUuZywgXCJnZXRcIikuXG4gKiBJZiBhIHJlcXVlc3QgaGFzIGEgbWF0Y2hpbmcgbWV0aG9kLCBpdCB3aWxsIGJlIGNhbGxlZCBhcyBpblxuICogYGdldChpbmZvOiByZXF1ZXN0SW5mbywgZGI6IHt9KWAgd2hlcmUgYGRiYCBpcyB0aGUgZGF0YWJhc2Ugb2JqZWN0IGRlc2NyaWJlZCBhYm92ZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEluTWVtb3J5RGJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW4tbWVtb3J5IFwiZGF0YWJhc2VcIiBoYXNoIHdob3NlIGtleXMgYXJlIGNvbGxlY3Rpb24gbmFtZXNcbiAgICogYW5kIHdob3NlIHZhbHVlcyBhcmUgYXJyYXlzIG9mIGNvbGxlY3Rpb24gb2JqZWN0cyB0byByZXR1cm4gb3IgdXBkYXRlLlxuICAgKlxuICAgKiByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIGRhdGFiYXNlIGJlY2F1c2UgY291bGQgaGF2ZSB0byBjcmVhdGUgaXQgYXN5bmNocm9ub3VzbHkuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgc2FmZSB0byBjYWxsIHJlcGVhdGVkbHkuXG4gICAqIEVhY2ggdGltZSBpdCBzaG91bGQgcmV0dXJuIGEgbmV3IG9iamVjdCB3aXRoIG5ldyBhcnJheXMgY29udGFpbmluZyBuZXcgaXRlbSBvYmplY3RzLlxuICAgKiBUaGlzIGNvbmRpdGlvbiBhbGxvd3MgdGhlIGluLW1lbW9yeSBiYWNrZW5kIHNlcnZpY2UgdG8gbXV0YXRlIHRoZSBjb2xsZWN0aW9uc1xuICAgKiBhbmQgdGhlaXIgaXRlbXMgd2l0aG91dCB0b3VjaGluZyB0aGUgb3JpZ2luYWwgc291cmNlIGRhdGEuXG4gICAqXG4gICAqIFRoZSBpbi1tZW0gYmFja2VuZCBzZXJ2aWNlIGNhbGxzIHRoaXMgbWV0aG9kIHdpdGhvdXQgYSB2YWx1ZSB0aGUgZmlyc3QgdGltZS5cbiAgICogVGhlIHNlcnZpY2UgY2FsbHMgaXQgd2l0aCB0aGUgYFJlcXVlc3RJbmZvYCB3aGVuIGl0IHJlY2VpdmVzIGEgUE9TVCBgY29tbWFuZHMvcmVzZXREYmAgcmVxdWVzdC5cbiAgICogWW91ciBJbk1lbW9yeURiU2VydmljZSBjYW4gYWRqdXN0IGl0cyBiZWhhdmlvciBhY2NvcmRpbmdseS5cbiAgICovXG4gIGFic3RyYWN0IGNyZWF0ZURiKHJlcUluZm8/OiBSZXF1ZXN0SW5mbyk6IHt9IHwgT2JzZXJ2YWJsZTx7fT4gfCBQcm9taXNlPHt9Pjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIEluTWVtb3J5QmFja2VuZCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEluTWVtb3J5QmFja2VuZENvbmZpZ0FyZ3Mge1xuICAvKipcbiAgICogVGhlIGJhc2UgcGF0aCB0byB0aGUgYXBpLCBlLmcsICdhcGkvJy5cbiAgICogSWYgbm90IHNwZWNpZmllZCB0aGFuIGBwYXJzZVJlcXVlc3RVcmxgIGFzc3VtZXMgaXQgaXMgdGhlIGZpcnN0IHBhdGggc2VnbWVudCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIGFwaUJhc2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBmYWxzZSAoZGVmYXVsdCkgaWYgc2VhcmNoIG1hdGNoIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlXG4gICAqL1xuICBjYXNlU2Vuc2l0aXZlU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGZhbHNlIChkZWZhdWx0KSBwdXQgY29udGVudCBkaXJlY3RseSBpbnNpZGUgdGhlIHJlc3BvbnNlIGJvZHkuXG4gICAqIHRydWU6IGVuY2Fwc3VsYXRlIGNvbnRlbnQgaW4gYSBgZGF0YWAgcHJvcGVydHkgaW5zaWRlIHRoZSByZXNwb25zZSBib2R5LCBgeyBkYXRhOiAuLi4gfWAuXG4gICAqL1xuICBkYXRhRW5jYXBzdWxhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBkZWxheSAoaW4gbXMpIHRvIHNpbXVsYXRlIGxhdGVuY3lcbiAgICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICAvKipcbiAgICogZmFsc2UgKGRlZmF1bHQpIHNob3VsZCAyMDQgd2hlbiBvYmplY3QtdG8tZGVsZXRlIG5vdCBmb3VuZDsgdHJ1ZTogNDA0XG4gICAqL1xuICBkZWxldGU0MDQ/OiBib29sZWFuO1xuICAvKipcbiAgICogaG9zdCBmb3IgdGhpcyBzZXJ2aWNlLCBlLmcuLCAnbG9jYWxob3N0J1xuICAgKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqXG4gICAqIHRydWUsIHNob3VsZCBwYXNzIHVucmVjb2duaXplZCByZXF1ZXN0IFVSTCB0aHJvdWdoIHRvIG9yaWdpbmFsIGJhY2tlbmQ7IGZhbHNlIChkZWZhdWx0KTogNDA0XG4gICAqL1xuICBwYXNzVGhydVVua25vd25Vcmw/OiBib29sZWFuO1xuICAvKipcbiAgICogdHJ1ZSAoZGVmYXVsdCkgc2hvdWxkIE5PVCByZXR1cm4gdGhlIGl0ZW0gKDIwNCkgYWZ0ZXIgYSBQT1NULiBmYWxzZTogcmV0dXJuIHRoZSBpdGVtICgyMDApLlxuICAgKi9cbiAgcG9zdDIwND86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBmYWxzZSAoZGVmYXVsdCkgc2hvdWxkIE5PVCB1cGRhdGUgZXhpc3RpbmcgaXRlbSB3aXRoIFBPU1QuIGZhbHNlOiBPSyB0byB1cGRhdGUuXG4gICAqL1xuICBwb3N0NDA5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIHRydWUgKGRlZmF1bHQpIHNob3VsZCBOT1QgcmV0dXJuIHRoZSBpdGVtICgyMDQpIGFmdGVyIGEgUE9TVC4gZmFsc2U6IHJldHVybiB0aGUgaXRlbSAoMjAwKS5cbiAgICovXG4gIHB1dDIwND86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBmYWxzZSAoZGVmYXVsdCkgaWYgaXRlbSBub3QgZm91bmQsIGNyZWF0ZSBhcyBuZXcgaXRlbTsgZmFsc2U6IHNob3VsZCA0MDQuXG4gICAqL1xuICBwdXQ0MDQ/OiBib29sZWFuO1xuICAvKipcbiAgICogcm9vdCBwYXRoIF9iZWZvcmVfIGFueSBBUEkgY2FsbCwgZS5nLiwgJydcbiAgICovXG4gIHJvb3RQYXRoPzogc3RyaW5nO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8qKlxuICogIEluTWVtb3J5QmFja2VuZFNlcnZpY2UgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gKiAgVXNhZ2U6XG4gKiAgICBJbk1lbW9yeVdlYkFwaU1vZHVsZS5mb3JSb290KEluTWVtSGVyb1NlcnZpY2UsIHtkZWxheTogNjAwfSlcbiAqXG4gKiAgb3IgaWYgcHJvdmlkaW5nIHNlcGFyYXRlbHk6XG4gKiAgICBwcm92aWRlKEluTWVtb3J5QmFja2VuZENvbmZpZywge3VzZVZhbHVlOiB7ZGVsYXk6IDYwMH19KSxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEluTWVtb3J5QmFja2VuZENvbmZpZyBpbXBsZW1lbnRzIEluTWVtb3J5QmFja2VuZENvbmZpZ0FyZ3Mge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IEluTWVtb3J5QmFja2VuZENvbmZpZ0FyZ3MgPSB7fSkge1xuICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICB0aGlzLFxuICAgICAge1xuICAgICAgICAvLyBkZWZhdWx0IGNvbmZpZzpcbiAgICAgICAgY2FzZVNlbnNpdGl2ZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIGRhdGFFbmNhcHN1bGF0aW9uOiBmYWxzZSwgLy8gZG8gTk9UIHdyYXAgY29udGVudCB3aXRoaW4gYW4gb2JqZWN0IHdpdGggYSBgZGF0YWAgcHJvcGVydHlcbiAgICAgICAgZGVsYXk6IDUwMCwgLy8gc2ltdWxhdGUgbGF0ZW5jeSBieSBkZWxheWluZyByZXNwb25zZVxuICAgICAgICBkZWxldGU0MDQ6IGZhbHNlLCAvLyBkb24ndCBjb21wbGFpbiBpZiBjYW4ndCBmaW5kIGVudGl0eSB0byBkZWxldGVcbiAgICAgICAgcGFzc1RocnVVbmtub3duVXJsOiBmYWxzZSwgLy8gNDA0IGlmIGNhbid0IHByb2Nlc3MgVVJMXG4gICAgICAgIHBvc3QyMDQ6IHRydWUsIC8vIGRvbid0IHJldHVybiB0aGUgaXRlbSBhZnRlciBhIFBPU1RcbiAgICAgICAgcG9zdDQwOTogZmFsc2UsIC8vIGRvbid0IHVwZGF0ZSBleGlzdGluZyBpdGVtIHdpdGggdGhhdCBJRFxuICAgICAgICBwdXQyMDQ6IHRydWUsIC8vIGRvbid0IHJldHVybiB0aGUgaXRlbSBhZnRlciBhIFBVVFxuICAgICAgICBwdXQ0MDQ6IGZhbHNlLCAvLyBjcmVhdGUgbmV3IGl0ZW0gaWYgUFVUIGl0ZW0gd2l0aCB0aGF0IElEIG5vdCBmb3VuZFxuICAgICAgICBhcGlCYXNlOiB1bmRlZmluZWQsIC8vIGFzc3VtZWQgdG8gYmUgdGhlIGZpcnN0IHBhdGggc2VnbWVudFxuICAgICAgICBob3N0OiB1bmRlZmluZWQsIC8vIGRlZmF1bHQgdmFsdWUgaXMgYWN0dWFsbHkgc2V0IGluIEluTWVtb3J5QmFja2VuZFNlcnZpY2UgY3RvclxuICAgICAgICByb290UGF0aDogdW5kZWZpbmVkLCAvLyBkZWZhdWx0IHZhbHVlIGlzIGFjdHVhbGx5IHNldCBpbiBJbk1lbW9yeUJhY2tlbmRTZXJ2aWNlIGN0b3JcbiAgICAgIH0sXG4gICAgICBjb25maWcsXG4gICAgKTtcbiAgfVxufVxuXG4vKiogUmV0dXJuIGluZm9ybWF0aW9uIChVcmlJbmZvKSBhYm91dCBhIFVSSSAgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVyaShzdHI6IHN0cmluZyk6IFVyaUluZm8ge1xuICAvLyBBZGFwdGVkIGZyb20gcGFyc2V1cmkgcGFja2FnZSAtIGh0dHA6Ly9ibG9nLnN0ZXZlbmxldml0aGFuLmNvbS9hcmNoaXZlcy9wYXJzZXVyaVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gIGNvbnN0IFVSTF9SRUdFWCA9XG4gICAgL14oPzooPyFbXjpAXSs6W146QFxcL10qQCkoW146XFwvPyMuXSspOik/KD86XFwvXFwvKT8oKD86KChbXjpAXSopKD86OihbXjpAXSopKT8pP0ApPyhbXjpcXC8/I10qKSg/OjooXFxkKikpPykoKChcXC8oPzpbXj8jXSg/IVtePyNcXC9dKlxcLltePyNcXC8uXSsoPzpbPyNdfCQpKSkqXFwvPyk/KFtePyNcXC9dKikpKD86XFw/KFteI10qKSk/KD86IyguKikpPykvO1xuICBjb25zdCBtID0gVVJMX1JFR0VYLmV4ZWMoc3RyKTtcbiAgY29uc3QgdXJpOiBVcmlJbmZvICYge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7XG4gICAgc291cmNlOiAnJyxcbiAgICBwcm90b2NvbDogJycsXG4gICAgYXV0aG9yaXR5OiAnJyxcbiAgICB1c2VySW5mbzogJycsXG4gICAgdXNlcjogJycsXG4gICAgcGFzc3dvcmQ6ICcnLFxuICAgIGhvc3Q6ICcnLFxuICAgIHBvcnQ6ICcnLFxuICAgIHJlbGF0aXZlOiAnJyxcbiAgICBwYXRoOiAnJyxcbiAgICBkaXJlY3Rvcnk6ICcnLFxuICAgIGZpbGU6ICcnLFxuICAgIHF1ZXJ5OiAnJyxcbiAgICBhbmNob3I6ICcnLFxuICB9O1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModXJpKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgdXJpW2tleXNbaV1dID0gKG0gJiYgbVtpXSkgfHwgJyc7XG4gIH1cbiAgcmV0dXJuIHVyaTtcbn1cblxuLyoqXG4gKlxuICogSW50ZXJmYWNlIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBgcGFyc2VSZXF1ZXN0VXJsYCBtZXRob2Q6XG4gKiAgIEdpdmVuIFVSTCBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hcGkvY3VzdG9tZXJzLzQyP2Zvbz0xIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnNcbiAqICAgICBiYXNlOiAnYXBpLydcbiAqICAgICBjb2xsZWN0aW9uTmFtZTogJ2N1c3RvbWVycydcbiAqICAgICBpZDogJzQyJ1xuICogICAgIHF1ZXJ5OiB0aGlzLmNyZWF0ZVF1ZXJ5KCdmb289MScpXG4gKiAgICAgcmVzb3VyY2VVcmw6ICdodHRwOi8vbG9jYWxob3N0L2FwaS9jdXN0b21lcnMvJ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFJlcXVlc3RVcmwge1xuICBhcGlCYXNlOiBzdHJpbmc7IC8vIHRoZSBzbGFzaC10ZXJtaW5hdGVkIFwiYmFzZVwiIGZvciBhcGkgcmVxdWVzdHMgKGUuZy4gYGFwaS9gKVxuICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nOyAvLyB0aGUgbmFtZSBvZiB0aGUgY29sbGVjdGlvbiBvZiBkYXRhIGl0ZW1zIChlLmcuLGBjdXN0b21lcnNgKVxuICBpZDogc3RyaW5nOyAvLyB0aGUgKG9wdGlvbmFsKSBpZCBvZiB0aGUgaXRlbSBpbiB0aGUgY29sbGVjdGlvbiAoZS5nLiwgYDQyYClcbiAgcXVlcnk6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPjsgLy8gdGhlIHF1ZXJ5IHBhcmFtZXRlcnM7XG4gIHJlc291cmNlVXJsOiBzdHJpbmc7IC8vIHRoZSBlZmZlY3RpdmUgVVJMIGZvciB0aGUgcmVzb3VyY2UgKGUuZy4sICdodHRwOi8vbG9jYWxob3N0L2FwaS9jdXN0b21lcnMvJylcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXNzVGhydUJhY2tlbmQge1xuICAvKipcbiAgICogSGFuZGxlIGFuIEhUVFAgcmVxdWVzdCBhbmQgcmV0dXJuIGFuIE9ic2VydmFibGUgb2YgSFRUUCByZXNwb25zZVxuICAgKiBCb3RoIHRoZSByZXF1ZXN0IHR5cGUgYW5kIHRoZSByZXNwb25zZSB0eXBlIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBzdXBwb3J0aW5nIEhUVFAgbGlicmFyeS5cbiAgICovXG4gIGhhbmRsZShyZXE6IGFueSk6IE9ic2VydmFibGU8YW55Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyYWlsaW5nU2xhc2gocGF0aDogc3RyaW5nKSB7XG4gIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG59XG5cbi8qKlxuICogIE1pbmltdW0gZGVmaW5pdGlvbiBuZWVkZWQgYnkgYmFzZSBjbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RDb3JlIHtcbiAgdXJsOiBzdHJpbmc7IC8vIHJlcXVlc3QgVVJMXG4gIHVybFdpdGhQYXJhbXM/OiBzdHJpbmc7IC8vIHJlcXVlc3QgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycyBhZGRlZCBieSBgSHR0cFBhcmFtc2Bcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIG9iamVjdCB3LyBpbmZvIGFib3V0IHRoZSBjdXJyZW50IHJlcXVlc3QgdXJsXG4gKiBleHRyYWN0ZWQgZnJvbSBhbiBIdHRwIFJlcXVlc3QuXG4gKiBBbHNvIGhvbGRzIHV0aWxpdHkgbWV0aG9kcyBhbmQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhpcyBzZXJ2aWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEluZm8ge1xuICByZXE6IFJlcXVlc3RDb3JlOyAvLyBjb25jcmV0ZSB0eXBlIGRlcGVuZHMgdXBvbiB0aGUgSHR0cCBsaWJyYXJ5XG4gIGFwaUJhc2U6IHN0cmluZztcbiAgY29sbGVjdGlvbk5hbWU6IHN0cmluZztcbiAgY29sbGVjdGlvbjogYW55O1xuICBoZWFkZXJzOiBIdHRwSGVhZGVycztcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIGlkOiBhbnk7XG4gIHF1ZXJ5OiBNYXA8c3RyaW5nLCBzdHJpbmdbXT47XG4gIHJlc291cmNlVXJsOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nOyAvLyByZXF1ZXN0IFVSTFxuICB1dGlsczogUmVxdWVzdEluZm9VdGlsaXRpZXM7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciB1dGlsaXR5IG1ldGhvZHMgZnJvbSB0aGlzIHNlcnZpY2UgaW5zdGFuY2UuXG4gKiBVc2VmdWwgd2l0aGluIGFuIEhUVFAgbWV0aG9kIG92ZXJyaWRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEluZm9VdGlsaXRpZXMge1xuICAvKipcbiAgICogQ3JlYXRlIGEgY29sZCByZXNwb25zZSBPYnNlcnZhYmxlIGZyb20gYSBmYWN0b3J5IGZvciBSZXNwb25zZU9wdGlvbnNcbiAgICogdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGluLW1lbSBiYWNrZW5kIHNlcnZpY2UgZG9lcy5cbiAgICogQHBhcmFtIHJlc09wdGlvbnNGYWN0b3J5IC0gY3JlYXRlcyBSZXNwb25zZU9wdGlvbnMgd2hlbiBvYnNlcnZhYmxlIGlzIHN1YnNjcmliZWRcbiAgICogQHBhcmFtIHdpdGhEZWxheSAtIGlmIHRydWUgKGRlZmF1bHQpLCBhZGQgc2ltdWxhdGVkIGxhdGVuY3kgZGVsYXkgZnJvbSBjb25maWd1cmF0aW9uXG4gICAqL1xuICBjcmVhdGVSZXNwb25zZSQ6IChyZXNPcHRpb25zRmFjdG9yeTogKCkgPT4gUmVzcG9uc2VPcHRpb25zKSA9PiBPYnNlcnZhYmxlPGFueT47XG5cbiAgLyoqXG4gICAqIEZpbmQgZmlyc3QgaW5zdGFuY2Ugb2YgaXRlbSBpbiBjb2xsZWN0aW9uIGJ5IGBpdGVtLmlkYFxuICAgKiBAcGFyYW0gY29sbGVjdGlvblxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIGZpbmRCeUlkPFQgZXh0ZW5kcyB7aWQ6IGFueX0+KGNvbGxlY3Rpb246IFRbXSwgaWQ6IGFueSk6IFQgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIHJldHVybiB0aGUgY3VycmVudCwgYWN0aXZlIGNvbmZpZ3VyYXRpb24gd2hpY2ggaXMgYSBibGVuZCBvZiBkZWZhdWx0cyBhbmQgb3ZlcnJpZGVzICovXG4gIGdldENvbmZpZygpOiBJbk1lbW9yeUJhY2tlbmRDb25maWdBcmdzO1xuXG4gIC8qKiBHZXQgdGhlIGluLW1lbSBzZXJ2aWNlJ3MgY29weSBvZiB0aGUgXCJkYXRhYmFzZVwiICovXG4gIGdldERiKCk6IHt9O1xuXG4gIC8qKiBHZXQgSlNPTiBib2R5IGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0ICovXG4gIGdldEpzb25Cb2R5KHJlcTogYW55KTogYW55O1xuXG4gIC8qKiBHZXQgbG9jYXRpb24gaW5mbyBmcm9tIGEgdXJsLCBldmVuIG9uIHNlcnZlciB3aGVyZSBgZG9jdW1lbnRgIGlzIG5vdCBkZWZpbmVkICovXG4gIGdldExvY2F0aW9uKHVybDogc3RyaW5nKTogVXJpSW5mbztcblxuICAvKiogR2V0IChvciBjcmVhdGUpIHRoZSBcInJlYWxcIiBiYWNrZW5kICovXG4gIGdldFBhc3NUaHJ1QmFja2VuZCgpOiBQYXNzVGhydUJhY2tlbmQ7XG5cbiAgLyoqXG4gICAqIHJldHVybiB0cnVlIGlmIGNhbiBkZXRlcm1pbmUgdGhhdCB0aGUgY29sbGVjdGlvbidzIGBpdGVtLmlkYCBpcyBhIG51bWJlclxuICAgKiAqL1xuICBpc0NvbGxlY3Rpb25JZE51bWVyaWM8VCBleHRlbmRzIHtpZDogYW55fT4oY29sbGVjdGlvbjogVFtdLCBjb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGFyc2VzIHRoZSByZXF1ZXN0IFVSTCBpbnRvIGEgYFBhcnNlZFJlcXVlc3RVcmxgIG9iamVjdC5cbiAgICogUGFyc2luZyBkZXBlbmRzIHVwb24gY2VydGFpbiB2YWx1ZXMgb2YgYGNvbmZpZ2A6IGBhcGlCYXNlYCwgYGhvc3RgLCBhbmQgYHVybFJvb3RgLlxuICAgKi9cbiAgcGFyc2VSZXF1ZXN0VXJsKHVybDogc3RyaW5nKTogUGFyc2VkUmVxdWVzdFVybDtcbn1cblxuLyoqXG4gKiBQcm92aWRlIGEgYHJlc3BvbnNlSW50ZXJjZXB0b3JgIG1ldGhvZCBvZiB0aGlzIHR5cGUgaW4geW91ciBgaW5NZW1EYlNlcnZpY2VgIHRvXG4gKiBtb3JwaCB0aGUgcmVzcG9uc2Ugb3B0aW9ucyBjcmVhdGVkIGluIHRoZSBgY29sbGVjdGlvbkhhbmRsZXJgLlxuICovXG5leHBvcnQgdHlwZSBSZXNwb25zZUludGVyY2VwdG9yID0gKHJlczogUmVzcG9uc2VPcHRpb25zLCByaTogUmVxdWVzdEluZm8pID0+IFJlc3BvbnNlT3B0aW9ucztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZU9wdGlvbnMge1xuICAvKipcbiAgICogU3RyaW5nLCBPYmplY3QsIEFycmF5QnVmZmVyIG9yIEJsb2IgcmVwcmVzZW50aW5nIHRoZSBib2R5IG9mIHRoZSB7QGxpbmsgUmVzcG9uc2V9LlxuICAgKi9cbiAgYm9keT86IHN0cmluZyB8IE9iamVjdCB8IEFycmF5QnVmZmVyIHwgQmxvYjtcblxuICAvKipcbiAgICogUmVzcG9uc2UgaGVhZGVyc1xuICAgKi9cbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzO1xuXG4gIC8qKlxuICAgKiBIdHRwIHtAbGluayBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMxMC5odG1sIHN0YXR1cyBjb2RlfVxuICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3BvbnNlLlxuICAgKi9cbiAgc3RhdHVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTdGF0dXMgdGV4dCBmb3IgdGhlIHN0YXR1cyBjb2RlXG4gICAqL1xuICBzdGF0dXNUZXh0Pzogc3RyaW5nO1xuICAvKipcbiAgICogcmVxdWVzdCB1cmxcbiAgICovXG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqIEludGVyZmFjZSBvZiBpbmZvcm1hdGlvbiBhYm91dCBhIFVyaSAgKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXJpSW5mbyB7XG4gIHNvdXJjZTogc3RyaW5nO1xuICBwcm90b2NvbDogc3RyaW5nO1xuICBhdXRob3JpdHk6IHN0cmluZztcbiAgdXNlckluZm86IHN0cmluZztcbiAgdXNlcjogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBob3N0OiBzdHJpbmc7XG4gIHBvcnQ6IHN0cmluZztcbiAgcmVsYXRpdmU6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xuICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgZmlsZTogc3RyaW5nO1xuICBxdWVyeTogc3RyaW5nO1xuICBhbmNob3I6IHN0cmluZztcbn1cbiJdfQ==