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 (let 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBvbGxvLmpzIiwic291cmNlUm9vdCI6Ii93b3Jrc3BhY2VzL2Fwb2xsby1hbmd1bGFyL3BhY2thZ2VzL2Fwb2xsby1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImFwb2xsby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFDTCxZQUFZLEdBUWIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQWEsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFRckMsT0FBTyxFQUFDLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQzs7O0FBRTNFLE1BQU0sT0FBTyxVQUFVO0lBR3JCLFlBQ1ksTUFBYyxFQUNkLEtBQWEsRUFDYixPQUFtQztRQUZuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQTRCO1FBRTdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxVQUFVLENBQ2YsT0FBNkM7UUFFN0MsT0FBTyxJQUFJLFFBQVEsQ0FDakIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFVBQVUsbUJBQ3pCLE9BQU8sRUFDNEIsRUFDeEMsSUFBSSxDQUFDLE1BQU0sa0JBRVQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixJQUN0QyxPQUFPLEVBRWIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQ1Ys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SUFDSCxDQUFDOzs7O1lBbkhGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBeElxQyxNQUFNOzRDQWlKdkMsUUFBUSxZQUNSLE1BQU0sU0FBQyxjQUFjOzRDQUVyQixRQUFRLFlBQ1IsTUFBTSxTQUFDLG9CQUFvQjs0Q0FFM0IsUUFBUSxZQUFJLE1BQU0sU0FBQyxZQUFZOztBQXFHcEMsU0FBUyxTQUFTLENBQUMsSUFBYTtJQUM5QixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFwb2xsb0NsaWVudCxcbiAgUXVlcnlPcHRpb25zLFxuICBNdXRhdGlvbk9wdGlvbnMsXG4gIEFwb2xsb1F1ZXJ5UmVzdWx0LFxuICBTdWJzY3JpcHRpb25PcHRpb25zLFxuICBBcG9sbG9DbGllbnRPcHRpb25zLFxuICBPYnNlcnZhYmxlUXVlcnksXG4gIEZldGNoUmVzdWx0LFxufSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7UXVlcnlSZWZ9IGZyb20gJy4vcXVlcnktcmVmJztcbmltcG9ydCB7XG4gIFdhdGNoUXVlcnlPcHRpb25zLFxuICBFeHRyYVN1YnNjcmlwdGlvbk9wdGlvbnMsXG4gIEVtcHR5T2JqZWN0LFxuICBOYW1lZE9wdGlvbnMsXG4gIEZsYWdzLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7QVBPTExPX09QVElPTlMsIEFQT0xMT19OQU1FRF9PUFRJT05TLCBBUE9MTE9fRkxBR1N9IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7ZnJvbVByb21pc2UsIHdyYXBXaXRoWm9uZSwgZml4T2JzZXJ2YWJsZSwgcGlja0ZsYWd9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQXBvbGxvQmFzZTxUQ2FjaGVTaGFwZSA9IGFueT4ge1xuICBwcml2YXRlIHVzZUluaXRpYWxMb2FkaW5nOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcm90ZWN0ZWQgZmxhZ3M/OiBGbGFncyxcbiAgICBwcm90ZWN0ZWQgX2NsaWVudD86IEFwb2xsb0NsaWVudDxUQ2FjaGVTaGFwZT4sXG4gICkge1xuICAgIHRoaXMudXNlSW5pdGlhbExvYWRpbmcgPSBwaWNrRmxhZyhmbGFncywgJ3VzZUluaXRpYWxMb2FkaW5nJywgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHdhdGNoUXVlcnk8VERhdGEsIFRWYXJpYWJsZXMgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogV2F0Y2hRdWVyeU9wdGlvbnM8VFZhcmlhYmxlcywgVERhdGE+LFxuICApOiBRdWVyeVJlZjxURGF0YSwgVFZhcmlhYmxlcz4ge1xuICAgIHJldHVybiBuZXcgUXVlcnlSZWY8VERhdGEsIFRWYXJpYWJsZXM+KFxuICAgICAgdGhpcy5lbnN1cmVDbGllbnQoKS53YXRjaFF1ZXJ5PFREYXRhLCBUVmFyaWFibGVzPih7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KSBhcyBPYnNlcnZhYmxlUXVlcnk8VERhdGEsIFRWYXJpYWJsZXM+LFxuICAgICAgdGhpcy5uZ1pvbmUsXG4gICAgICB7XG4gICAgICAgIHVzZUluaXRpYWxMb2FkaW5nOiB0aGlzLnVzZUluaXRpYWxMb2FkaW5nLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5PFQsIFYgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zPFYsIFQ+LFxuICApOiBPYnNlcnZhYmxlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlPEFwb2xsb1F1ZXJ5UmVzdWx0PFQ+PigoKSA9PlxuICAgICAgdGhpcy5lbnN1cmVDbGllbnQoKS5xdWVyeTxULCBWPih7Li4ub3B0aW9uc30pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbXV0YXRlPFQsIFYgPSBFbXB0eU9iamVjdD4oXG4gICAgb3B0aW9uczogTXV0YXRpb25PcHRpb25zPFQsIFY+LFxuICApOiBPYnNlcnZhYmxlPEZldGNoUmVzdWx0PFQ+PiB7XG4gICAgcmV0dXJuIGZyb21Qcm9taXNlPEZldGNoUmVzdWx0PFQ+PigoKSA9PlxuICAgICAgdGhpcy5lbnN1cmVDbGllbnQoKS5tdXRhdGU8VCwgVj4oey4uLm9wdGlvbnN9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHN1YnNjcmliZTxULCBWID0gRW1wdHlPYmplY3Q+KFxuICAgIG9wdGlvbnM6IFN1YnNjcmlwdGlvbk9wdGlvbnM8ViwgVD4sXG4gICAgZXh0cmE/OiBFeHRyYVN1YnNjcmlwdGlvbk9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBvYnMgPSBmcm9tKFxuICAgICAgZml4T2JzZXJ2YWJsZShcbiAgICAgICAgdGhpcy5lbnN1cmVDbGllbnQoKS5zdWJzY3JpYmU8VCwgVj4oey4uLm9wdGlvbnN9KSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIHJldHVybiBleHRyYSAmJiBleHRyYS51c2Vab25lICE9PSB0cnVlXG4gICAgICA/IG9ic1xuICAgICAgOiB3cmFwV2l0aFpvbmUob2JzLCB0aGlzLm5nWm9uZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFjY2VzcyB0byBhbiBpbnN0YW5jZSBvZiBBcG9sbG9DbGllbnRcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBhcG9sbG8uY2xpZW50YCBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2xpZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgaW5zdGFuY2Ugb2YgQXBvbGxvQ2xpZW50XG4gICAqIFJlbWVtYmVyIHRvIGNsZWFuIHVwIHRoZSBzdG9yZSBiZWZvcmUgc2V0dGluZyBhIG5ldyBjbGllbnQuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgYXBvbGxvLmNsaWVudCA9IGNsaWVudGAgaW5zdGVhZFxuICAgKlxuICAgKiBAcGFyYW0gY2xpZW50IEFwb2xsb0NsaWVudCBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIHNldENsaWVudChjbGllbnQ6IEFwb2xsb0NsaWVudDxUQ2FjaGVTaGFwZT4pIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYWNjZXNzIHRvIGFuIGluc3RhbmNlIG9mIEFwb2xsb0NsaWVudFxuICAgKi9cbiAgcHVibGljIGdldCBjbGllbnQoKTogQXBvbGxvQ2xpZW50PFRDYWNoZVNoYXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBuZXcgaW5zdGFuY2Ugb2YgQXBvbGxvQ2xpZW50XG4gICAqIFJlbWVtYmVyIHRvIGNsZWFuIHVwIHRoZSBzdG9yZSBiZWZvcmUgc2V0dGluZyBhIG5ldyBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgQXBvbGxvQ2xpZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgc2V0IGNsaWVudChjbGllbnQ6IEFwb2xsb0NsaWVudDxUQ2FjaGVTaGFwZT4pIHtcbiAgICBpZiAodGhpcy5fY2xpZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NsaWVudCBoYXMgYmVlbiBhbHJlYWR5IGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbGllbnQgPSBjbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZUNsaWVudCgpIHtcbiAgICB0aGlzLmNoZWNrSW5zdGFuY2UoKTtcblxuICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSW5zdGFuY2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2xpZW50IGhhcyBub3QgYmVlbiBkZWZpbmVkIHlldCcpO1xuICAgIH1cbiAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQXBvbGxvIGV4dGVuZHMgQXBvbGxvQmFzZTxhbnk+IHtcbiAgcHJpdmF0ZSBtYXA6IE1hcDxzdHJpbmcsIEFwb2xsb0Jhc2U8YW55Pj4gPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICBBcG9sbG9CYXNlPGFueT5cbiAgPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChBUE9MTE9fT1BUSU9OUylcbiAgICBhcG9sbG9PcHRpb25zPzogQXBvbGxvQ2xpZW50T3B0aW9uczxhbnk+LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChBUE9MTE9fTkFNRURfT1BUSU9OUylcbiAgICBhcG9sbG9OYW1lZE9wdGlvbnM/OiBOYW1lZE9wdGlvbnMsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUE9MTE9fRkxBR1MpIGZsYWdzPzogRmxhZ3MsXG4gICkge1xuICAgIHN1cGVyKF9uZ1pvbmUsIGZsYWdzKTtcblxuICAgIGlmIChhcG9sbG9PcHRpb25zKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHQoYXBvbGxvT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGFwb2xsb05hbWVkT3B0aW9ucyAmJiB0eXBlb2YgYXBvbGxvTmFtZWRPcHRpb25zID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChsZXQgbmFtZSBpbiBhcG9sbG9OYW1lZE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGFwb2xsb05hbWVkT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhcG9sbG9OYW1lZE9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgdGhpcy5jcmVhdGVOYW1lZChuYW1lLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXBvbGxvQ2xpZW50XG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgcmVxdWlyZWQgdG8gY3JlYXRlIEFwb2xsb0NsaWVudFxuICAgKiBAcGFyYW0gbmFtZSBjbGllbnQncyBuYW1lXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlPFRDYWNoZVNoYXBlPihcbiAgICBvcHRpb25zOiBBcG9sbG9DbGllbnRPcHRpb25zPFRDYWNoZVNoYXBlPixcbiAgICBuYW1lPzogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBpZiAoaXNEZWZhdWx0KG5hbWUpKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlZmF1bHQ8VENhY2hlU2hhcGU+KG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZU5hbWVkPFRDYWNoZVNoYXBlPihuYW1lLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlIGEgZGVmYXVsdCBBcG9sbG9DbGllbnRcbiAgICovXG4gIHB1YmxpYyBkZWZhdWx0KCk6IEFwb2xsb0Jhc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGEgbmFtZWQgQXBvbGxvQ2xpZW50XG4gICAqIEBwYXJhbSBuYW1lIGNsaWVudCdzIG5hbWVcbiAgICovXG4gIHB1YmxpYyB1c2UobmFtZTogc3RyaW5nKTogQXBvbGxvQmFzZTxhbnk+IHtcbiAgICBpZiAoaXNEZWZhdWx0KG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hcC5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGVmYXVsdCBBcG9sbG9DbGllbnQsIHNhbWUgYXMgYGFwb2xsby5jcmVhdGUob3B0aW9ucylgXG4gICAqIEBwYXJhbSBvcHRpb25zIEFwb2xsb0NsaWVudCdzIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVEZWZhdWx0PFRDYWNoZVNoYXBlPihcbiAgICBvcHRpb25zOiBBcG9sbG9DbGllbnRPcHRpb25zPFRDYWNoZVNoYXBlPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2V0Q2xpZW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXBvbGxvIGhhcyBiZWVuIGFscmVhZHkgY3JlYXRlZC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXRDbGllbnQobmV3IEFwb2xsb0NsaWVudDxUQ2FjaGVTaGFwZT4ob3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5hbWVkIEFwb2xsb0NsaWVudCwgc2FtZSBhcyBgYXBvbGxvLmNyZWF0ZShvcHRpb25zLCBuYW1lKWBcbiAgICogQHBhcmFtIG5hbWUgY2xpZW50J3MgbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBBcG9sbG9DbGllbnQncyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlTmFtZWQ8VENhY2hlU2hhcGU+KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zOiBBcG9sbG9DbGllbnRPcHRpb25zPFRDYWNoZVNoYXBlPixcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWFwLmhhcyhuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbGllbnQgJHtuYW1lfSBoYXMgYmVlbiBhbHJlYWR5IGNyZWF0ZWRgKTtcbiAgICB9XG4gICAgdGhpcy5tYXAuc2V0KFxuICAgICAgbmFtZSxcbiAgICAgIG5ldyBBcG9sbG9CYXNlKFxuICAgICAgICB0aGlzLl9uZ1pvbmUsXG4gICAgICAgIHRoaXMuZmxhZ3MsXG4gICAgICAgIG5ldyBBcG9sbG9DbGllbnQ8VENhY2hlU2hhcGU+KG9wdGlvbnMpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbWVtYmVyIHRvIGNsZWFuIHVwIHRoZSBzdG9yZSBiZWZvcmUgcmVtb3ZpbmcgYSBjbGllbnRcbiAgICogQHBhcmFtIG5hbWUgY2xpZW50J3MgbmFtZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNsaWVudChuYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzRGVmYXVsdChuYW1lKSkge1xuICAgICAgdGhpcy5fY2xpZW50ID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcC5kZWxldGUobmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRGVmYXVsdChuYW1lPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnZGVmYXVsdCc7XG59XG4iXX0= |
\ | No newline at end of file |