UNPKG

19.3 kBJavaScriptView Raw
1import { Injectable, Optional, Inject, NgZone } from '@angular/core';
2import { ApolloClient, } from '@apollo/client/core';
3import { from } from 'rxjs';
4import { QueryRef } from './query-ref';
5import { APOLLO_OPTIONS, APOLLO_NAMED_OPTIONS, APOLLO_FLAGS } from './tokens';
6import { fromPromise, wrapWithZone, fixObservable, pickFlag } from './utils';
7import * as i0 from "@angular/core";
8import * as i1 from "./tokens";
9export class ApolloBase {
10 constructor(ngZone, flags, _client) {
11 this.ngZone = ngZone;
12 this.flags = flags;
13 this._client = _client;
14 this.useInitialLoading = pickFlag(flags, 'useInitialLoading', false);
15 }
16 watchQuery(options) {
17 return new QueryRef(this.ensureClient().watchQuery(Object.assign({}, options)), this.ngZone, Object.assign({ useInitialLoading: this.useInitialLoading }, options));
18 }
19 query(options) {
20 return fromPromise(() => this.ensureClient().query(Object.assign({}, options)));
21 }
22 mutate(options) {
23 return fromPromise(() => this.ensureClient().mutate(Object.assign({}, options)));
24 }
25 subscribe(options, extra) {
26 const obs = from(fixObservable(this.ensureClient().subscribe(Object.assign({}, options))));
27 return extra && extra.useZone !== true
28 ? obs
29 : wrapWithZone(obs, this.ngZone);
30 }
31 /**
32 * Get an access to an instance of ApolloClient
33 * @deprecated use `apollo.client` instead
34 */
35 getClient() {
36 return this.client;
37 }
38 /**
39 * Set a new instance of ApolloClient
40 * Remember to clean up the store before setting a new client.
41 * @deprecated use `apollo.client = client` instead
42 *
43 * @param client ApolloClient instance
44 */
45 setClient(client) {
46 this.client = client;
47 }
48 /**
49 * Get an access to an instance of ApolloClient
50 */
51 get client() {
52 return this._client;
53 }
54 /**
55 * Set a new instance of ApolloClient
56 * Remember to clean up the store before setting a new client.
57 *
58 * @param client ApolloClient instance
59 */
60 set client(client) {
61 if (this._client) {
62 throw new Error('Client has been already defined');
63 }
64 this._client = client;
65 }
66 ensureClient() {
67 this.checkInstance();
68 return this._client;
69 }
70 checkInstance() {
71 if (!this._client) {
72 throw new Error('Client has not been defined yet');
73 }
74 }
75}
76export class Apollo extends ApolloBase {
77 constructor(_ngZone, apolloOptions, apolloNamedOptions, flags) {
78 super(_ngZone, flags);
79 this._ngZone = _ngZone;
80 this.map = new Map();
81 if (apolloOptions) {
82 this.createDefault(apolloOptions);
83 }
84 if (apolloNamedOptions && typeof apolloNamedOptions === 'object') {
85 for (const name in apolloNamedOptions) {
86 if (apolloNamedOptions.hasOwnProperty(name)) {
87 const options = apolloNamedOptions[name];
88 this.createNamed(name, options);
89 }
90 }
91 }
92 }
93 /**
94 * Create an instance of ApolloClient
95 * @param options Options required to create ApolloClient
96 * @param name client's name
97 */
98 create(options, name) {
99 if (isDefault(name)) {
100 this.createDefault(options);
101 }
102 else {
103 this.createNamed(name, options);
104 }
105 }
106 /**
107 * Use a default ApolloClient
108 */
109 default() {
110 return this;
111 }
112 /**
113 * Use a named ApolloClient
114 * @param name client's name
115 */
116 use(name) {
117 if (isDefault(name)) {
118 return this.default();
119 }
120 return this.map.get(name);
121 }
122 /**
123 * Create a default ApolloClient, same as `apollo.create(options)`
124 * @param options ApolloClient's options
125 */
126 createDefault(options) {
127 if (this.getClient()) {
128 throw new Error('Apollo has been already created.');
129 }
130 return this.setClient(new ApolloClient(options));
131 }
132 /**
133 * Create a named ApolloClient, same as `apollo.create(options, name)`
134 * @param name client's name
135 * @param options ApolloClient's options
136 */
137 createNamed(name, options) {
138 if (this.map.has(name)) {
139 throw new Error(`Client ${name} has been already created`);
140 }
141 this.map.set(name, new ApolloBase(this._ngZone, this.flags, new ApolloClient(options)));
142 }
143 /**
144 * Remember to clean up the store before removing a client
145 * @param name client's name
146 */
147 removeClient(name) {
148 if (isDefault(name)) {
149 this._client = undefined;
150 }
151 else {
152 this.map.delete(name);
153 }
154 }
155}
156Apollo.ɵprov = i0.ɵɵdefineInjectable({ factory: function Apollo_Factory() { return new Apollo(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i1.APOLLO_OPTIONS, 8), i0.ɵɵinject(i1.APOLLO_NAMED_OPTIONS, 8), i0.ɵɵinject(i1.APOLLO_FLAGS, 8)); }, token: Apollo, providedIn: "root" });
157Apollo.decorators = [
158 { type: Injectable, args: [{
159 providedIn: 'root',
160 },] }
161];
162Apollo.ctorParameters = () => [
163 { type: NgZone },
164 { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APOLLO_OPTIONS,] }] },
165 { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APOLLO_NAMED_OPTIONS,] }] },
166 { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APOLLO_FLAGS,] }] }
167];
168function isDefault(name) {
169 return !name || name === 'default';
170}
171//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBvbGxvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fwb2xsby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFDTCxZQUFZLEdBUWIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFRckMsT0FBTyxFQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7O0FBRTNFLE1BQU0sT0FBTyxVQUFVO0lBR3JCLFlBQ1ksTUFBYyxFQUNkLEtBQWEsRUFDYixPQUFtQztRQUZuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBRTdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxVQUFVLENBQ2YsT0FBc0M7UUFFdEMsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsbUJBQ3pCLE9BQU8sRUFDNEIsRUFDeEMsSUFBSSxDQUFDLE1BQU0sa0JBRVQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUN0QyxPQUFPLEVBRWIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQ1YsT0FBd0I7UUFFeEIsT0FBTyxXQUFXLENBQXVCLEdBQUcsRUFBRSxDQUM1QyxJ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TUFBTTthQUNuQjs7O1lBeElxQyxNQUFNOzRDQWlKdkMsUUFBUSxZQUNSLE1BQU0sU0FBQyxjQUFjOzRDQUVyQixRQUFRLFlBQ1IsTUFBTSxTQUFDLG9CQUFvQjs0Q0FFM0IsUUFBUSxZQUFJLE1BQU0sU0FBQyxZQUFZOztBQXFHcEMsU0FBUyxTQUFTLENBQUMsSUFBYTtJQUM5QixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwb2xsb0NsaWVudCxcbiAgUXVlcnlPcHRpb25zLFxuICBNdXRhdGlvbk9wdGlvbnMsXG4gIEFwb2xsb1F1ZXJ5UmVzdWx0LFxuICBTdWJzY3JpcHRpb25PcHRpb25zLFxuICBBcG9sbG9DbGllbnRPcHRpb25zLFxuICBPYnNlcnZhYmxlUXVlcnksXG4gIEZldGNoUmVzdWx0LFxufSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7UXVlcnlSZWZ9IGZyb20gJy4vcXVlcnktcmVmJztcbmltcG9ydCB7XG4gIFdhdGNoUXVlcnlPcHRpb25zLFxuICBFeHRyYVN1YnNjcmlwdGlvbk9wdGlvbnMsXG4gIEVtcHR5T2JqZWN0LFxuICBOYW1lZE9wdGlvbnMsXG4gIEZsYWdzLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7QVBPTExPX09QVElPTlMsIEFQT0xMT19OQU1FRF9PUFRJT05TLCBBUE9MTE9fRkxBR1N9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7ZnJvbVByb21pc2UsIHdyYXBXaXRoWm9uZSwgZml4T2JzZXJ2YWJsZSwgcGlja0ZsYWd9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQXBvbGxvQmFzZTxUQ2FjaGVTaGFwZSA9IGFueT4ge1xuICBwcml2YXRlIHVzZUluaXRpYWxMb2FkaW5nOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcm90ZWN0ZWQgZmxhZ3M/OiBGbGFncyxcbiAgICBwcm90ZWN0ZWQgX2NsaWVudD86IEFwb2xsb0NsaWVudDxUQ2FjaGVTaGFwZT4sXG4gICkge1xuICAgIHRoaXMudXNlSW5pdGlhbExvYWRpbmcgPSBwaWNrRmxhZyhmbGFncywgJ3VzZUluaXRpYWxMb2FkaW5nJywgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHdhdGNoUXVlcnk8VERhdGEsIFRWYXJpYWJsZXMgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogV2F0Y2hRdWVyeU9wdGlvbnM8VFZhcmlhYmxlcz4sXG4gICk6IFF1ZXJ5UmVmPFREYXRhLCBUVmFyaWFibGVzPiB7XG4gICAgcmV0dXJuIG5ldyBRdWVyeVJlZjxURGF0YSwgVFZhcmlhYmxlcz4oXG4gICAgICB0aGlzLmVuc3VyZUNsaWVudCgpLndhdGNoUXVlcnk8VERhdGEsIFRWYXJpYWJsZXM+KHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0pIGFzIE9ic2VydmFibGVRdWVyeTxURGF0YSwgVFZhcmlhYmxlcz4sXG4gICAgICB0aGlzLm5nWm9uZSxcbiAgICAgIHtcbiAgICAgICAgdXNlSW5pdGlhbExvYWRpbmc6IHRoaXMudXNlSW5pdGlhbExvYWRpbmcsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnk8VCwgViA9IEVtcHR5T2JqZWN0PihcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnM8Vj4sXG4gICk6IE9ic2VydmFibGU8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2U8QXBvbGxvUXVlcnlSZXN1bHQ8VD4+KCgpID0+XG4gICAgICB0aGlzLmVuc3VyZUNsaWVudCgpLnF1ZXJ5PFQsIFY+KHsuLi5vcHRpb25zfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtdXRhdGU8VCwgViA9IEVtcHR5T2JqZWN0PihcbiAgICBvcHRpb25zOiBNdXRhdGlvbk9wdGlvbnM8VCwgVj4sXG4gICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8VD4+IHtcbiAgICByZXR1cm4gZnJvbVByb21pc2U8RmV0Y2hSZXN1bHQ8VD4+KCgpID0+XG4gICAgICB0aGlzLmVuc3VyZUNsaWVudCgpLm11dGF0ZTxULCBWPih7Li4ub3B0aW9uc30pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3Vic2NyaWJlPFQsIFYgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogU3Vic2NyaXB0aW9uT3B0aW9uczxWPixcbiAgICBleHRyYT86IEV4dHJhU3Vic2NyaXB0aW9uT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IG9icyA9IGZyb20oXG4gICAgICBmaXhPYnNlcnZhYmxlKFxuICAgICAgICB0aGlzLmVuc3VyZUNsaWVudCgpLnN1YnNjcmliZTxULCBWPih7Li4ub3B0aW9uc30pLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4dHJhICYmIGV4dHJhLnVzZVpvbmUgIT09IHRydWVcbiAgICAgID8gb2JzXG4gICAgICA6IHdyYXBXaXRoWm9uZShvYnMsIHRoaXMubmdab25lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYWNjZXNzIHRvIGFuIGluc3RhbmNlIG9mIEFwb2xsb0NsaWVudFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYGFwb2xsby5jbGllbnRgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBnZXRDbGllbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBpbnN0YW5jZSBvZiBBcG9sbG9DbGllbnRcbiAgICogUmVtZW1iZXIgdG8gY2xlYW4gdXAgdGhlIHN0b3JlIGJlZm9yZSBzZXR0aW5nIGEgbmV3IGNsaWVudC5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBhcG9sbG8uY2xpZW50ID0gY2xpZW50YCBpbnN0ZWFkXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQXBvbGxvQ2xpZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc2V0Q2xpZW50KGNsaWVudDogQXBvbGxvQ2xpZW50PFRDYWNoZVNoYXBlPikge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhY2Nlc3MgdG8gYW4gaW5zdGFuY2Ugb2YgQXBvbGxvQ2xpZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNsaWVudCgpOiBBcG9sbG9DbGllbnQ8VENhY2hlU2hhcGU+IHtcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIG5ldyBpbnN0YW5jZSBvZiBBcG9sbG9DbGllbnRcbiAgICogUmVtZW1iZXIgdG8gY2xlYW4gdXAgdGhlIHN0b3JlIGJlZm9yZSBzZXR0aW5nIGEgbmV3IGNsaWVudC5cbiAgICpcbiAgICogQHBhcmFtIGNsaWVudCBBcG9sbG9DbGllbnQgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBzZXQgY2xpZW50KGNsaWVudDogQXBvbGxvQ2xpZW50PFRDYWNoZVNoYXBlPikge1xuICAgIGlmICh0aGlzLl9jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50IGhhcyBiZWVuIGFscmVhZHkgZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIHRoaXMuX2NsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlQ2xpZW50KCkge1xuICAgIHRoaXMuY2hlY2tJbnN0YW5jZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJbnN0YW5jZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2NsaWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDbGllbnQgaGFzIG5vdCBiZWVuIGRlZmluZWQgeWV0Jyk7XG4gICAgfVxuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBcG9sbG8gZXh0ZW5kcyBBcG9sbG9CYXNlPGFueT4ge1xuICBwcml2YXRlIG1hcDogTWFwPHN0cmluZywgQXBvbGxvQmFzZTxhbnk+PiA9IG5ldyBNYXA8XG4gICAgc3RyaW5nLFxuICAgIEFwb2xsb0Jhc2U8YW55PlxuICA+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEFQT0xMT19PUFRJT05TKVxuICAgIGFwb2xsb09wdGlvbnM/OiBBcG9sbG9DbGllbnRPcHRpb25zPGFueT4sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KEFQT0xMT19OQU1FRF9PUFRJT05TKVxuICAgIGFwb2xsb05hbWVkT3B0aW9ucz86IE5hbWVkT3B0aW9ucyxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQT0xMT19GTEFHUykgZmxhZ3M/OiBGbGFncyxcbiAgKSB7XG4gICAgc3VwZXIoX25nWm9uZSwgZmxhZ3MpO1xuXG4gICAgaWYgKGFwb2xsb09wdGlvbnMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdChhcG9sbG9PcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoYXBvbGxvTmFtZWRPcHRpb25zICYmIHR5cGVvZiBhcG9sbG9OYW1lZE9wdGlvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gYXBvbGxvTmFtZWRPcHRpb25zKSB7XG4gICAgICAgIGlmIChhcG9sbG9OYW1lZE9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gYXBvbGxvTmFtZWRPcHRpb25zW25hbWVdO1xuICAgICAgICAgIHRoaXMuY3JlYXRlTmFtZWQobmFtZSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEFwb2xsb0NsaWVudFxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHJlcXVpcmVkIHRvIGNyZWF0ZSBBcG9sbG9DbGllbnRcbiAgICogQHBhcmFtIG5hbWUgY2xpZW50J3MgbmFtZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZTxUQ2FjaGVTaGFwZT4oXG4gICAgb3B0aW9uczogQXBvbGxvQ2xpZW50T3B0aW9uczxUQ2FjaGVTaGFwZT4sXG4gICAgbmFtZT86IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgaWYgKGlzRGVmYXVsdChuYW1lKSkge1xuICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0PFRDYWNoZVNoYXBlPihvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVOYW1lZDxUQ2FjaGVTaGFwZT4obmFtZSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIGRlZmF1bHQgQXBvbGxvQ2xpZW50XG4gICAqL1xuICBwdWJsaWMgZGVmYXVsdCgpOiBBcG9sbG9CYXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIG5hbWVkIEFwb2xsb0NsaWVudFxuICAgKiBAcGFyYW0gbmFtZSBjbGllbnQncyBuYW1lXG4gICAqL1xuICBwdWJsaWMgdXNlKG5hbWU6IHN0cmluZyk6IEFwb2xsb0Jhc2U8YW55PiB7XG4gICAgaWYgKGlzRGVmYXVsdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tYXAuZ2V0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZmF1bHQgQXBvbGxvQ2xpZW50LCBzYW1lIGFzIGBhcG9sbG8uY3JlYXRlKG9wdGlvbnMpYFxuICAgKiBAcGFyYW0gb3B0aW9ucyBBcG9sbG9DbGllbnQncyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRGVmYXVsdDxUQ2FjaGVTaGFwZT4oXG4gICAgb3B0aW9uczogQXBvbGxvQ2xpZW50T3B0aW9uczxUQ2FjaGVTaGFwZT4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdldENsaWVudCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fwb2xsbyBoYXMgYmVlbiBhbHJlYWR5IGNyZWF0ZWQuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0Q2xpZW50KG5ldyBBcG9sbG9DbGllbnQ8VENhY2hlU2hhcGU+KG9wdGlvbnMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuYW1lZCBBcG9sbG9DbGllbnQsIHNhbWUgYXMgYGFwb2xsby5jcmVhdGUob3B0aW9ucywgbmFtZSlgXG4gICAqIEBwYXJhbSBuYW1lIGNsaWVudCdzIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQXBvbGxvQ2xpZW50J3Mgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZU5hbWVkPFRDYWNoZVNoYXBlPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQXBvbGxvQ2xpZW50T3B0aW9uczxUQ2FjaGVTaGFwZT4sXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcC5oYXMobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2xpZW50ICR7bmFtZX0gaGFzIGJlZW4gYWxyZWFkeSBjcmVhdGVkYCk7XG4gICAgfVxuICAgIHRoaXMubWFwLnNldChcbiAgICAgIG5hbWUsXG4gICAgICBuZXcgQXBvbGxvQmFzZShcbiAgICAgICAgdGhpcy5fbmdab25lLFxuICAgICAgICB0aGlzLmZsYWdzLFxuICAgICAgICBuZXcgQXBvbGxvQ2xpZW50PFRDYWNoZVNoYXBlPihvcHRpb25zKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1lbWJlciB0byBjbGVhbiB1cCB0aGUgc3RvcmUgYmVmb3JlIHJlbW92aW5nIGEgY2xpZW50XG4gICAqIEBwYXJhbSBuYW1lIGNsaWVudCdzIG5hbWVcbiAgICovXG4gIHB1YmxpYyByZW1vdmVDbGllbnQobmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc0RlZmF1bHQobmFtZSkpIHtcbiAgICAgIHRoaXMuX2NsaWVudCA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXAuZGVsZXRlKG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0RlZmF1bHQobmFtZT86IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUgfHwgbmFtZSA9PT0gJ2RlZmF1bHQnO1xufVxuIl19
\No newline at end of file