1 | import { Injectable, Optional, Inject, NgZone } from '@angular/core';
|
2 | import { ApolloClient, } from '@apollo/client/core';
|
3 | import { from } from 'rxjs';
|
4 | import { QueryRef } from './query-ref';
|
5 | import { APOLLO_OPTIONS, APOLLO_NAMED_OPTIONS, APOLLO_FLAGS } from './tokens';
|
6 | import { fromPromise, wrapWithZone, fixObservable, pickFlag } from './utils';
|
7 | import * as i0 from "@angular/core";
|
8 | import * as i1 from "./tokens";
|
9 | export 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 | }
|
76 | export 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 | }
|
156 | Apollo.ɵ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" });
|
157 | Apollo.decorators = [
|
158 | { type: Injectable, args: [{
|
159 | providedIn: 'root',
|
160 | },] }
|
161 | ];
|
162 | Apollo.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 | ];
|
168 | function 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 |