@osovitny/anatoly 3.17.67 → 3.17.68

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.
@@ -0,0 +1,317 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 14 Jun 2024
12
+
13
+ Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from "@angular/core";
17
+ import { Subject } from "rxjs";
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "../services/paypal-script.service";
20
+ const _c0 = ["payPalButtonContainer"];
21
+ export class PayPalComponent {
22
+ set payPalButtonContainer(content) {
23
+ this.payPalButtonContainerElem = content;
24
+ }
25
+ constructor(paypalScriptService, cdr, ngZone) {
26
+ this.paypalScriptService = paypalScriptService;
27
+ this.cdr = cdr;
28
+ this.ngZone = ngZone;
29
+ /**
30
+ * If enabled, paypal SDK script will be loaded. Useful if you want to have multiple PayPal components on the same page
31
+ * sharing base configuration. In such a case only a single component may register script.
32
+ */
33
+ this.registerScript = true;
34
+ /**
35
+ * Emitted when paypal script is loaded
36
+ */
37
+ this.scriptLoaded = new EventEmitter();
38
+ this.ngUnsubscribe = new Subject();
39
+ /**
40
+ * Flag that indicates if paypal should be initialized (required for handling script load events and availability of DOM element)
41
+ */
42
+ this.initializePayPal = true;
43
+ }
44
+ ngOnChanges(changes) {
45
+ if (!this.payPalButtonContainerId) {
46
+ this.payPalButtonContainerId = this.generateElementId();
47
+ }
48
+ // first time config setup
49
+ const config = this.config;
50
+ const name = 'PayPalConfig';
51
+ if (changes[name].isFirstChange()) {
52
+ if (config && this.registerScript) {
53
+ this.initPayPalScript(config, (payPal) => {
54
+ // store reference to paypal global script
55
+ this.payPal = payPal;
56
+ this.doPayPalCheck();
57
+ });
58
+ }
59
+ }
60
+ // changes to config
61
+ if (!changes[name].isFirstChange()) {
62
+ this.reinitialize(config);
63
+ }
64
+ }
65
+ ngOnDestroy() {
66
+ this.paypalScriptService.destroyPayPalScript();
67
+ this.ngUnsubscribe.next();
68
+ this.ngUnsubscribe.complete();
69
+ }
70
+ ngAfterViewInit() {
71
+ this.doPayPalCheck();
72
+ }
73
+ customInit(payPal) {
74
+ this.payPal = payPal;
75
+ this.doPayPalCheck();
76
+ }
77
+ reinitialize(config) {
78
+ this.config = config;
79
+ this.payPal = undefined;
80
+ this.paypalScriptService.destroyPayPalScript();
81
+ this.payPalButtonContainerId = this.generateElementId();
82
+ this.initializePayPal = true;
83
+ if (this.payPalButtonContainerElem) {
84
+ try {
85
+ while (this.payPalButtonContainerElem.nativeElement.firstChild) {
86
+ this.payPalButtonContainerElem.nativeElement.removeChild(this.payPalButtonContainerElem.nativeElement.firstChild);
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error(error);
91
+ }
92
+ }
93
+ this.cdr.detectChanges();
94
+ if (this.config) {
95
+ if (!this.payPal) {
96
+ this.initPayPalScript(this.config, (payPal) => {
97
+ // store reference to paypal global script
98
+ this.payPal = payPal;
99
+ this.doPayPalCheck();
100
+ });
101
+ }
102
+ else {
103
+ this.doPayPalCheck();
104
+ }
105
+ }
106
+ }
107
+ doPayPalCheck() {
108
+ if (this.initializePayPal &&
109
+ this.config &&
110
+ this.payPal &&
111
+ this.payPalButtonContainerElem) {
112
+ // make sure that id is also set
113
+ if (this.payPalButtonContainerElem.nativeElement.id) {
114
+ this.initializePayPal = false;
115
+ this.initPayPal(this.config, this.payPal);
116
+ }
117
+ }
118
+ }
119
+ initPayPalScript(config, initPayPal) {
120
+ this.paypalScriptService.registerPayPalScript({
121
+ clientId: config.clientId,
122
+ locale: config.advanced?.locale,
123
+ commit: config.advanced && config.advanced.commit
124
+ ? config.advanced.commit
125
+ : undefined,
126
+ currency: config.currency,
127
+ vault: config.vault,
128
+ intent: config.intent,
129
+ funding: config.fundingSource != undefined || config.fundingSource != null ? true : false,
130
+ extraParams: config.advanced && config.advanced.extraQueryParams
131
+ ? config.advanced.extraQueryParams
132
+ : [],
133
+ }, (paypal) => {
134
+ this.scriptLoaded.next(paypal);
135
+ initPayPal(paypal);
136
+ });
137
+ }
138
+ generateElementId() {
139
+ return `ngx-captcha-id-${this.generateGuid()}`;
140
+ }
141
+ initPayPal(config, paypal) {
142
+ // Running outside angular zone prevents infinite ngDoCheck lifecycle calls
143
+ this.ngZone.runOutsideAngular(() => {
144
+ // https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page
145
+ const createOrder = (data, actions) => {
146
+ return this.ngZone.run(() => {
147
+ if (config.createOrderOnClient && config.createOrderOnServer) {
148
+ throw Error(`Both 'createOrderOnClient' and 'createOrderOnServer' are defined.
149
+ Please choose one or the other.`);
150
+ }
151
+ if (!config.createOrderOnClient && !config.createOrderOnServer) {
152
+ throw Error(`Neither 'createOrderOnClient' or 'createOrderOnServer' are defined.
153
+ Please define one of these to create order.`);
154
+ }
155
+ if (config.createOrderOnClient) {
156
+ return actions.order.create(config.createOrderOnClient(data));
157
+ }
158
+ if (config.createOrderOnServer) {
159
+ return config.createOrderOnServer(data);
160
+ }
161
+ throw Error(`Invalid state for 'createOrder'.`);
162
+ });
163
+ };
164
+ const createSubscription = (data, actions) => {
165
+ return this.ngZone.run(() => {
166
+ if (config.createSubscriptionOnClient) {
167
+ return actions.subscription.create(config.createSubscriptionOnClient(data));
168
+ }
169
+ return;
170
+ });
171
+ };
172
+ const onShippingChange = (data, actions) => {
173
+ return this.ngZone.run(() => {
174
+ if (config.onShippingChange) {
175
+ return config.onShippingChange(data, actions);
176
+ }
177
+ });
178
+ };
179
+ const buttonsConfig = {
180
+ style: config.style,
181
+ fundingSource: undefined,
182
+ onApprove: (data, actions) => {
183
+ return this.ngZone.run(() => {
184
+ if (config.onApprove) {
185
+ config.onApprove(data, actions);
186
+ }
187
+ // capture on server
188
+ if (config.authorizeOnServer) {
189
+ return config.authorizeOnServer(data, actions);
190
+ }
191
+ // capture on client
192
+ const onClientAuthorization = config.onClientAuthorization;
193
+ if (onClientAuthorization) {
194
+ actions.order
195
+ .capture()
196
+ .then((details) => {
197
+ this.ngZone.run(() => {
198
+ onClientAuthorization(details);
199
+ });
200
+ });
201
+ }
202
+ });
203
+ },
204
+ onError: (error) => {
205
+ this.ngZone.run(() => {
206
+ if (config.onError) {
207
+ config.onError(error);
208
+ }
209
+ });
210
+ },
211
+ onCancel: (data, actions) => {
212
+ this.ngZone.run(() => {
213
+ if (config.onCancel) {
214
+ config.onCancel(data, actions);
215
+ }
216
+ });
217
+ },
218
+ onClick: (data, actions) => {
219
+ this.ngZone.run(() => {
220
+ if (config.onClick) {
221
+ config.onClick(data, actions);
222
+ }
223
+ });
224
+ },
225
+ onInit: (data, actions) => {
226
+ this.ngZone.run(() => {
227
+ if (config.onInit) {
228
+ config.onInit(data, actions);
229
+ }
230
+ });
231
+ },
232
+ // Add the functions if they've been created in the config object
233
+ // The API only allows one of the two to be set
234
+ ...((config.createOrderOnClient || config.createOrderOnServer) && {
235
+ createOrder,
236
+ }),
237
+ ...(config.createSubscriptionOnClient && { createSubscription }),
238
+ // The onShippingChange callback cannot be used with subscriptions
239
+ // so we only add it if it is set
240
+ ...(config.onShippingChange && { onShippingChange }),
241
+ };
242
+ let fundSource = undefined;
243
+ switch (config.fundingSource) {
244
+ case "PAYPAL":
245
+ fundSource = paypal.FUNDING.PAYPAL;
246
+ break;
247
+ case "CARD":
248
+ fundSource = paypal.FUNDING.CARD;
249
+ break;
250
+ case "PAYLATER":
251
+ fundSource = paypal.FUNDING.PAYLATER;
252
+ break;
253
+ case "CREDIT":
254
+ fundSource = paypal.FUNDING.CREDIT;
255
+ break;
256
+ case "VENMO":
257
+ fundSource = paypal.FUNDING.VENMO;
258
+ break;
259
+ default:
260
+ break;
261
+ }
262
+ if (fundSource != undefined) {
263
+ buttonsConfig.fundingSource = fundSource;
264
+ if (config.fundingSource !== "PAYPAL")
265
+ delete buttonsConfig.style?.color;
266
+ }
267
+ paypal.Buttons(buttonsConfig).render(`#${this.payPalButtonContainerId}`);
268
+ });
269
+ }
270
+ generateGuid() {
271
+ let d = new Date().getTime(), d2 = (performance && performance.now && performance.now() * 1000) || 0;
272
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
273
+ let r = Math.random() * 16;
274
+ if (d > 0) {
275
+ r = (d + r) % 16 | 0;
276
+ d = Math.floor(d / 16);
277
+ }
278
+ else {
279
+ r = (d2 + r) % 16 | 0;
280
+ d2 = Math.floor(d2 / 16);
281
+ }
282
+ return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
283
+ });
284
+ }
285
+ static { this.ɵfac = function PayPalComponent_Factory(t) { return new (t || PayPalComponent)(i0.ɵɵdirectiveInject(i1.PayPalScriptService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone)); }; }
286
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PayPalComponent, selectors: [["anatoly-paypal"]], viewQuery: function PayPalComponent_Query(rf, ctx) { if (rf & 1) {
287
+ i0.ɵɵviewQuery(_c0, 5);
288
+ } if (rf & 2) {
289
+ let _t;
290
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.payPalButtonContainer = _t.first);
291
+ } }, inputs: { config: "config", registerScript: "registerScript" }, outputs: { scriptLoaded: "scriptLoaded" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 1, consts: [[3, "id"], ["payPalButtonContainer", ""]], template: function PayPalComponent_Template(rf, ctx) { if (rf & 1) {
292
+ i0.ɵɵelement(0, "div", 0, 1);
293
+ } if (rf & 2) {
294
+ i0.ɵɵproperty("id", ctx.payPalButtonContainerId);
295
+ } }, encapsulation: 2, changeDetection: 0 }); }
296
+ }
297
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PayPalComponent, [{
298
+ type: Component,
299
+ args: [{
300
+ changeDetection: ChangeDetectionStrategy.OnPush,
301
+ selector: "anatoly-paypal",
302
+ template: `
303
+ <div #payPalButtonContainer [id]="payPalButtonContainerId"></div>
304
+ `,
305
+ }]
306
+ }], () => [{ type: i1.PayPalScriptService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], { config: [{
307
+ type: Input
308
+ }], registerScript: [{
309
+ type: Input
310
+ }], scriptLoaded: [{
311
+ type: Output
312
+ }], payPalButtonContainer: [{
313
+ type: ViewChild,
314
+ args: ["payPalButtonContainer", { static: false }]
315
+ }] }); })();
316
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PayPalComponent, { className: "PayPalComponent", filePath: "lib\\payments\\PayPal\\components\\paypal.component.ts", lineNumber: 58 }); })();
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9wYXltZW50cy9QYXlQYWwvY29tcG9uZW50cy9wYXlwYWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUEwQi9CLE1BQU0sT0FBTyxlQUFlO0lBeUIxQixJQUNJLHFCQUFxQixDQUFDLE9BQW1CO1FBQzNDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUM7SUFDM0MsQ0FBQztJQVlELFlBQ1UsbUJBQXdDLEVBQ3hDLEdBQXNCLEVBQ3RCLE1BQWM7UUFGZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFyQ3hCOzs7V0FHRztRQUNNLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXhDOztXQUVHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBT2hDLGtCQUFhLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFRcEU7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFXekMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzFELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsTUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO2dGQTNVVSxlQUFlO29FQUFmLGVBQWU7Ozs7OztZQUh4Qiw0QkFBaUU7O1lBQXJDLGdEQUE4Qjs7O2lGQUdqRCxlQUFlO2NBUDNCLFNBQVM7ZUFBQztnQkFDVCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsUUFBUSxFQUFFOztHQUVUO2FBQ0Y7eUdBS1UsTUFBTTtrQkFBZCxLQUFLO1lBTUcsY0FBYztrQkFBdEIsS0FBSztZQUtJLFlBQVk7a0JBQXJCLE1BQU07WUFXSCxxQkFBcUI7a0JBRHhCLFNBQVM7bUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOztrRkF6QjFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTQgSnVuIDIwMjRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgSUNhbmNlbENhbGxiYWNrRGF0YSxcclxuICBJQ2xpZW50QXV0aG9yaXplQ2FsbGJhY2tEYXRhLFxyXG4gIElDcmVhdGVPcmRlckNhbGxiYWNrQWN0aW9ucyxcclxuICBJSW5pdENhbGxiYWNrRGF0YSxcclxuICBJT25BcHByb3ZlQ2FsbGJhY2tBY3Rpb25zLFxyXG4gIElPbkFwcHJvdmVDYWxsYmFja0RhdGEsXHJcbiAgSU9uQ2xpY2tDYWxsYmFja0FjdGlvbnMsXHJcbiAgSU9uSW5pdENhbGxiYWNrQWN0aW9ucyxcclxuICBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnMsXHJcbiAgSU9uU2hpcHBpbmdDaGFuZ2VEYXRhLFxyXG4gIElQYXlQYWxDb25maWcsXHJcbiAgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrQWN0aW9ucyxcclxuICBJQ3JlYXRlU3Vic2NyaXB0aW9uQ2FsbGJhY2tEYXRhLFxyXG59IGZyb20gXCIuLi9tb2RlbHMvcGF5cGFsLW1vZGVsc1wiO1xyXG5pbXBvcnQgeyBQYXlQYWxTY3JpcHRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3BheXBhbC1zY3JpcHQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc2VsZWN0b3I6IFwiYW5hdG9seS1wYXlwYWxcIixcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAjcGF5UGFsQnV0dG9uQ29udGFpbmVyIFtpZF09XCJwYXlQYWxCdXR0b25Db250YWluZXJJZFwiPjwvZGl2PlxyXG4gIGAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXlQYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgLyoqXHJcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgcGF5cGFsLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbmZpZz86IElQYXlQYWxDb25maWc7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGVuYWJsZWQsIHBheXBhbCBTREsgc2NyaXB0IHdpbGwgYmUgbG9hZGVkLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBQYXlQYWwgY29tcG9uZW50cyBvbiB0aGUgc2FtZSBwYWdlXHJcbiAgICogc2hhcmluZyBiYXNlIGNvbmZpZ3VyYXRpb24uIEluIHN1Y2ggYSBjYXNlIG9ubHkgYSBzaW5nbGUgY29tcG9uZW50IG1heSByZWdpc3RlciBzY3JpcHQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVnaXN0ZXJTY3JpcHQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gcGF5cGFsIHNjcmlwdCBpcyBsb2FkZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2NyaXB0TG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElkIG9mIHRoZSBlbGVtZW50IHdoZXJlIFBheVBhbCBidXR0b24gd2lsbCBiZSByZW5kZXJlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYXlQYWxCdXR0b25Db250YWluZXJJZD86IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBwYXlQYWxCdXR0b25Db250YWluZXJFbGVtPzogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwicGF5UGFsQnV0dG9uQ29udGFpbmVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHNldCBwYXlQYWxCdXR0b25Db250YWluZXIoY29udGVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtID0gY29udGVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgcGF5cGFsIHNob3VsZCBiZSBpbml0aWFsaXplZCAocmVxdWlyZWQgZm9yIGhhbmRsaW5nIHNjcmlwdCBsb2FkIGV2ZW50cyBhbmQgYXZhaWxhYmlsaXR5IG9mIERPTSBlbGVtZW50KVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBheVBhbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byBQYXlQYWwgZ2xvYmFsIEFQSVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGF5UGFsOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYXlwYWxTY3JpcHRTZXJ2aWNlOiBQYXlQYWxTY3JpcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lcklkKSB7XHJcbiAgICAgIHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVySWQgPSB0aGlzLmdlbmVyYXRlRWxlbWVudElkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlyc3QgdGltZSBjb25maWcgc2V0dXBcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnO1xyXG4gICAgY29uc3QgbmFtZSA9ICdQYXlQYWxDb25maWcnO1xyXG5cclxuICAgIGlmIChjaGFuZ2VzW25hbWVdLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICBpZiAoY29uZmlnICYmIHRoaXMucmVnaXN0ZXJTY3JpcHQpIHtcclxuICAgICAgICB0aGlzLmluaXRQYXlQYWxTY3JpcHQoY29uZmlnLCAocGF5UGFsKSA9PiB7XHJcbiAgICAgICAgICAvLyBzdG9yZSByZWZlcmVuY2UgdG8gcGF5cGFsIGdsb2JhbCBzY3JpcHRcclxuICAgICAgICAgIHRoaXMucGF5UGFsID0gcGF5UGFsO1xyXG4gICAgICAgICAgdGhpcy5kb1BheVBhbENoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGFuZ2VzIHRvIGNvbmZpZ1xyXG4gICAgaWYgKCFjaGFuZ2VzW25hbWVdLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLnJlaW5pdGlhbGl6ZShjb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnBheXBhbFNjcmlwdFNlcnZpY2UuZGVzdHJveVBheVBhbFNjcmlwdCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kb1BheVBhbENoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjdXN0b21Jbml0KHBheVBhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBheVBhbCA9IHBheVBhbDtcclxuICAgIHRoaXMuZG9QYXlQYWxDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcmVpbml0aWFsaXplKGNvbmZpZzogSVBheVBhbENvbmZpZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICB0aGlzLnBheVBhbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMucGF5cGFsU2NyaXB0U2VydmljZS5kZXN0cm95UGF5UGFsU2NyaXB0KCk7XHJcbiAgICB0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lcklkID0gdGhpcy5nZW5lcmF0ZUVsZW1lbnRJZCgpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplUGF5UGFsID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVyRWxlbS5uYXRpdmVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgIHRoaXMucGF5UGFsQnV0dG9uQ29udGFpbmVyRWxlbS5uYXRpdmVFbGVtZW50LnJlbW92ZUNoaWxkKFxyXG4gICAgICAgICAgICB0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lckVsZW0ubmF0aXZlRWxlbWVudC5maXJzdENoaWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcpIHtcclxuICAgICAgaWYgKCF0aGlzLnBheVBhbCkge1xyXG4gICAgICAgIHRoaXMuaW5pdFBheVBhbFNjcmlwdCh0aGlzLmNvbmZpZywgKHBheVBhbCkgPT4ge1xyXG4gICAgICAgICAgLy8gc3RvcmUgcmVmZXJlbmNlIHRvIHBheXBhbCBnbG9iYWwgc2NyaXB0XHJcbiAgICAgICAgICB0aGlzLnBheVBhbCA9IHBheVBhbDtcclxuICAgICAgICAgIHRoaXMuZG9QYXlQYWxDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZG9QYXlQYWxDaGVjaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRvUGF5UGFsQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVBheVBhbCAmJlxyXG4gICAgICB0aGlzLmNvbmZpZyAmJlxyXG4gICAgICB0aGlzLnBheVBhbCAmJlxyXG4gICAgICB0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lckVsZW1cclxuICAgICkge1xyXG4gICAgICAvLyBtYWtlIHN1cmUgdGhhdCBpZCBpcyBhbHNvIHNldFxyXG4gICAgICBpZiAodGhpcy5wYXlQYWxCdXR0b25Db250YWluZXJFbGVtLm5hdGl2ZUVsZW1lbnQuaWQpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVQYXlQYWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmluaXRQYXlQYWwodGhpcy5jb25maWcsIHRoaXMucGF5UGFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0UGF5UGFsU2NyaXB0KFxyXG4gICAgY29uZmlnOiBJUGF5UGFsQ29uZmlnLFxyXG4gICAgaW5pdFBheVBhbDogKHBheXBhbDogYW55KSA9PiB2b2lkXHJcbiAgKTogdm9pZCB7XHJcbiAgICB0aGlzLnBheXBhbFNjcmlwdFNlcnZpY2UucmVnaXN0ZXJQYXlQYWxTY3JpcHQoXHJcbiAgICAgIHtcclxuICAgICAgICBjbGllbnRJZDogY29uZmlnLmNsaWVudElkLFxyXG4gICAgICAgIGxvY2FsZTogY29uZmlnLmFkdmFuY2VkPy5sb2NhbGUsXHJcbiAgICAgICAgY29tbWl0OlxyXG4gICAgICAgICAgY29uZmlnLmFkdmFuY2VkICYmIGNvbmZpZy5hZHZhbmNlZC5jb21taXRcclxuICAgICAgICAgICAgPyBjb25maWcuYWR2YW5jZWQuY29tbWl0XHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgIGN1cnJlbmN5OiBjb25maWcuY3VycmVuY3ksXHJcbiAgICAgICAgdmF1bHQ6IGNvbmZpZy52YXVsdCxcclxuICAgICAgICBpbnRlbnQ6IGNvbmZpZy5pbnRlbnQsXHJcbiAgICAgICAgZnVuZGluZzogY29uZmlnLmZ1bmRpbmdTb3VyY2UgIT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5mdW5kaW5nU291cmNlICE9IG51bGwgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgZXh0cmFQYXJhbXM6XHJcbiAgICAgICAgICBjb25maWcuYWR2YW5jZWQgJiYgY29uZmlnLmFkdmFuY2VkLmV4dHJhUXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgPyBjb25maWcuYWR2YW5jZWQuZXh0cmFRdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICA6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICAocGF5cGFsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRMb2FkZWQubmV4dChwYXlwYWwpO1xyXG4gICAgICAgIGluaXRQYXlQYWwocGF5cGFsKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgbmd4LWNhcHRjaGEtaWQtJHt0aGlzLmdlbmVyYXRlR3VpZCgpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRQYXlQYWwoY29uZmlnOiBJUGF5UGFsQ29uZmlnLCBwYXlwYWw6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gUnVubmluZyBvdXRzaWRlIGFuZ3VsYXIgem9uZSBwcmV2ZW50cyBpbmZpbml0ZSBuZ0RvQ2hlY2sgbGlmZWN5Y2xlIGNhbGxzXHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLnBheXBhbC5jb20vZG9jcy9jaGVja291dC9pbnRlZ3JhdGUvIzItYWRkLXRoZS1wYXlwYWwtc2NyaXB0LXRvLXlvdXItd2ViLXBhZ2VcclxuICAgICAgY29uc3QgY3JlYXRlT3JkZXIgPSAoZGF0YTogYW55LCBhY3Rpb25zOiBJQ3JlYXRlT3JkZXJDYWxsYmFja0FjdGlvbnMpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWcuY3JlYXRlT3JkZXJPbkNsaWVudCAmJiBjb25maWcuY3JlYXRlT3JkZXJPblNlcnZlcikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgQm90aCAnY3JlYXRlT3JkZXJPbkNsaWVudCcgYW5kICdjcmVhdGVPcmRlck9uU2VydmVyJyBhcmUgZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgICAgICBQbGVhc2UgY2hvb3NlIG9uZSBvciB0aGUgb3RoZXIuYCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFjb25maWcuY3JlYXRlT3JkZXJPbkNsaWVudCAmJiAhY29uZmlnLmNyZWF0ZU9yZGVyT25TZXJ2ZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5laXRoZXIgJ2NyZWF0ZU9yZGVyT25DbGllbnQnIG9yICdjcmVhdGVPcmRlck9uU2VydmVyJyBhcmUgZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgICAgICBQbGVhc2UgZGVmaW5lIG9uZSBvZiB0aGVzZSB0byBjcmVhdGUgb3JkZXIuYCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZy5jcmVhdGVPcmRlck9uQ2xpZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLm9yZGVyLmNyZWF0ZShjb25maWcuY3JlYXRlT3JkZXJPbkNsaWVudChkYXRhKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNvbmZpZy5jcmVhdGVPcmRlck9uU2VydmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuY3JlYXRlT3JkZXJPblNlcnZlcihkYXRhKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBzdGF0ZSBmb3IgJ2NyZWF0ZU9yZGVyJy5gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgY3JlYXRlU3Vic2NyaXB0aW9uID0gKFxyXG4gICAgICAgIGRhdGE6IElDcmVhdGVTdWJzY3JpcHRpb25DYWxsYmFja0RhdGEsXHJcbiAgICAgICAgYWN0aW9uczogSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrQWN0aW9uc1xyXG4gICAgICApID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgIGlmIChjb25maWcuY3JlYXRlU3Vic2NyaXB0aW9uT25DbGllbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnMuc3Vic2NyaXB0aW9uLmNyZWF0ZShcclxuICAgICAgICAgICAgICBjb25maWcuY3JlYXRlU3Vic2NyaXB0aW9uT25DbGllbnQoZGF0YSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgY29uc3Qgb25TaGlwcGluZ0NoYW5nZSA9IChcclxuICAgICAgICBkYXRhOiBJT25TaGlwcGluZ0NoYW5nZURhdGEsXHJcbiAgICAgICAgYWN0aW9uczogSU9uU2hpcHBpbmdDaGFuZ2VBY3Rpb25zXHJcbiAgICAgICkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbmZpZy5vblNoaXBwaW5nQ2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb25maWcub25TaGlwcGluZ0NoYW5nZShkYXRhLCBhY3Rpb25zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGJ1dHRvbnNDb25maWcgPSB7XHJcbiAgICAgICAgc3R5bGU6IGNvbmZpZy5zdHlsZSxcclxuICAgICAgICBmdW5kaW5nU291cmNlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgb25BcHByb3ZlOiAoXHJcbiAgICAgICAgICBkYXRhOiBJT25BcHByb3ZlQ2FsbGJhY2tEYXRhLFxyXG4gICAgICAgICAgYWN0aW9uczogSU9uQXBwcm92ZUNhbGxiYWNrQWN0aW9uc1xyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcub25BcHByb3ZlKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLm9uQXBwcm92ZShkYXRhLCBhY3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2FwdHVyZSBvbiBzZXJ2ZXJcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5hdXRob3JpemVPblNlcnZlcikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXV0aG9yaXplT25TZXJ2ZXIoZGF0YSwgYWN0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUgb24gY2xpZW50XHJcbiAgICAgICAgICAgIGNvbnN0IG9uQ2xpZW50QXV0aG9yaXphdGlvbiA9IGNvbmZpZy5vbkNsaWVudEF1dGhvcml6YXRpb247XHJcbiAgICAgICAgICAgIGlmIChvbkNsaWVudEF1dGhvcml6YXRpb24pIHtcclxuICAgICAgICAgICAgICBhY3Rpb25zLm9yZGVyXHJcbiAgICAgICAgICAgICAgICAuY2FwdHVyZSgpXHJcbiAgICAgICAgICAgICAgICAudGhlbigoZGV0YWlsczogSUNsaWVudEF1dGhvcml6ZUNhbGxiYWNrRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpZW50QXV0aG9yaXphdGlvbihkZXRhaWxzKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLm9uRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQ2FuY2VsOiAoZGF0YTogSUNhbmNlbENhbGxiYWNrRGF0YSwgYWN0aW9uczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnLm9uQ2FuY2VsKSB7XHJcbiAgICAgICAgICAgICAgY29uZmlnLm9uQ2FuY2VsKGRhdGEsIGFjdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQ2xpY2s6IChkYXRhOiBhbnksIGFjdGlvbnM6IElPbkNsaWNrQ2FsbGJhY2tBY3Rpb25zKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlnLm9uQ2xpY2spIHtcclxuICAgICAgICAgICAgICBjb25maWcub25DbGljayhkYXRhLCBhY3Rpb25zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkluaXQ6IChkYXRhOiBJSW5pdENhbGxiYWNrRGF0YSwgYWN0aW9uczogSU9uSW5pdENhbGxiYWNrQWN0aW9ucykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZy5vbkluaXQpIHtcclxuICAgICAgICAgICAgICBjb25maWcub25Jbml0KGRhdGEsIGFjdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb25zIGlmIHRoZXkndmUgYmVlbiBjcmVhdGVkIGluIHRoZSBjb25maWcgb2JqZWN0XHJcbiAgICAgICAgLy8gVGhlIEFQSSBvbmx5IGFsbG93cyBvbmUgb2YgdGhlIHR3byB0byBiZSBzZXRcclxuICAgICAgICAuLi4oKGNvbmZpZy5jcmVhdGVPcmRlck9uQ2xpZW50IHx8IGNvbmZpZy5jcmVhdGVPcmRlck9uU2VydmVyKSAmJiB7XHJcbiAgICAgICAgICBjcmVhdGVPcmRlcixcclxuICAgICAgICB9KSxcclxuICAgICAgICAuLi4oY29uZmlnLmNyZWF0ZVN1YnNjcmlwdGlvbk9uQ2xpZW50ICYmIHsgY3JlYXRlU3Vic2NyaXB0aW9uIH0pLFxyXG4gICAgICAgIC8vIFRoZSBvblNoaXBwaW5nQ2hhbmdlIGNhbGxiYWNrIGNhbm5vdCBiZSB1c2VkIHdpdGggc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIC8vIHNvIHdlIG9ubHkgYWRkIGl0IGlmIGl0IGlzIHNldFxyXG4gICAgICAgIC4uLihjb25maWcub25TaGlwcGluZ0NoYW5nZSAmJiB7IG9uU2hpcHBpbmdDaGFuZ2UgfSksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBsZXQgZnVuZFNvdXJjZSA9IHVuZGVmaW5lZDtcclxuICAgICAgc3dpdGNoKGNvbmZpZy5mdW5kaW5nU291cmNlKXtcclxuICAgICAgICBjYXNlIFwiUEFZUEFMXCI6XHJcbiAgICAgICAgICBmdW5kU291cmNlID0gcGF5cGFsLkZVTkRJTkcuUEFZUEFMO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIkNBUkRcIjpcclxuICAgICAgICAgIGZ1bmRTb3VyY2UgPSBwYXlwYWwuRlVORElORy5DQVJEO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIlBBWUxBVEVSXCI6XHJcbiAgICAgICAgICBmdW5kU291cmNlID0gcGF5cGFsLkZVTkRJTkcuUEFZTEFURVI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiQ1JFRElUXCI6XHJcbiAgICAgICAgICBmdW5kU291cmNlID0gcGF5cGFsLkZVTkRJTkcuQ1JFRElUO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIlZFTk1PXCI6XHJcbiAgICAgICAgICBmdW5kU291cmNlID0gcGF5cGFsLkZVTkRJTkcuVkVOTU87XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYoZnVuZFNvdXJjZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHtcclxuICAgICAgICBidXR0b25zQ29uZmlnLmZ1bmRpbmdTb3VyY2UgPSBmdW5kU291cmNlO1xyXG4gICAgICAgIGlmKGNvbmZpZy5mdW5kaW5nU291cmNlICE9PSBcIlBBWVBBTFwiKVxyXG4gICAgICAgICAgZGVsZXRlIGJ1dHRvbnNDb25maWcuc3R5bGU/LmNvbG9yXHJcbiAgICAgIH1cclxuICAgICAgcGF5cGFsLkJ1dHRvbnMoYnV0dG9uc0NvbmZpZykucmVuZGVyKGAjJHt0aGlzLnBheVBhbEJ1dHRvbkNvbnRhaW5lcklkfWApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlR3VpZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcclxuICAgICAgZDIgPSAocGVyZm9ybWFuY2UgJiYgcGVyZm9ybWFuY2Uubm93ICYmIHBlcmZvcm1hbmNlLm5vdygpICogMTAwMCkgfHwgMDtcclxuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcclxuICAgICAgbGV0IHIgPSBNYXRoLnJhbmRvbSgpICogMTY7XHJcbiAgICAgIGlmIChkID4gMCkge1xyXG4gICAgICAgIHIgPSAoZCArIHIpICUgMTYgfCAwO1xyXG4gICAgICAgIGQgPSBNYXRoLmZsb29yKGQgLyAxNik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IChkMiArIHIpICUgMTYgfCAwO1xyXG4gICAgICAgIGQyID0gTWF0aC5mbG9vcihkMiAvIDE2KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gKGMgPT0gXCJ4XCIgPyByIDogKHIgJiAweDcpIHwgMHg4KS50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,17 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 14 Jun 2024
12
+
13
+ Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ export {};
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLW1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi9wYXltZW50cy9QYXlQYWwvbW9kZWxzL3BheXBhbC1tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0UiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTQgSnVuIDIwMjRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXlQYWxDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEN1cnJlbmN5IC0gRGVmYXVsdHMgdG8gVVNEIGlmIG5vdCBwcm92aWRlZFxyXG4gICAqL1xyXG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBVc2Ugd2hlbiBjcmVhdGluZyBvcmRlciBvbiBjbGllbnRcclxuICAgKi9cclxuICBjcmVhdGVPcmRlck9uQ2xpZW50PzogKGRhdGE6IGFueSkgPT4gSUNyZWF0ZU9yZGVyUmVxdWVzdDtcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIHdoZW4gY3JlYXRpbmcgc3Vic2NyaXB0aW9uIG9uIGNsaWVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbk9uQ2xpZW50PzogKGRhdGE6IGFueSkgPT4gSUNyZWF0ZVN1YnNjcmlwdGlvblJlcXVlc3Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZSBmb3IgY3JlYXRpbmcgb3JkZXJzIG9uIHNlcnZlci4gUGF5UGFsIGV4cGVjdHMgeW91IHRvIHJldHVybiAnb3JkZXJJZCcgaW4gdGhpcyBtZXRob2RcclxuICAgKi9cclxuICBjcmVhdGVPcmRlck9uU2VydmVyPzogKGRhdGE6IGFueSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xyXG5cclxuICAvKipcclxuICAgKiBBZHZhbmNlZCBjb25maWd1cmF0aW9uXHJcbiAgICovXHJcbiAgYWR2YW5jZWQ/OiBJQWR2YW5jZWRDb25maWd1cmF0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBDbGllbnQgaWRcclxuICAgKi9cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBTaGlwcGluZyBjYWxsYmFja1xyXG4gICAqIHNlZSBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3MvY2hlY2tvdXQvaW50ZWdyYXRpb24tZmVhdHVyZXMvc2hpcHBpbmctY2FsbGJhY2svXHJcbiAgICovXHJcbiAgb25TaGlwcGluZ0NoYW5nZT86IE9uU2hpcHBpbmdDaGFuZ2VDYWxsYmFjaztcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gJ29uQXBwcm92ZScgZXZlbnQgb2NjdXJzXHJcbiAgICovXHJcbiAgb25BcHByb3ZlPzogKGRhdGE6IElPbkFwcHJvdmVDYWxsYmFja0RhdGEsIGFjdGlvbnM6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gYXV0aG9yaXphdGlvbiBvbiBjbGllbnQgc3VjY2VlZHNcclxuICAgKi9cclxuICBvbkNsaWVudEF1dGhvcml6YXRpb24/OiAoYXV0aG9yaXphdGlvbjogSUNsaWVudEF1dGhvcml6ZUNhbGxiYWNrRGF0YSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogSW1wbGVtZW50IGZvciBhdXRob3JpemluZyBvbiBzZXJ2ZXIgc2lkZVxyXG4gICAqL1xyXG4gIGF1dGhvcml6ZU9uU2VydmVyPzogKFxyXG4gICAgZGF0YTogSU9uQXBwcm92ZUNhbGxiYWNrRGF0YSxcclxuICAgIGFjdGlvbnM6IGFueVxyXG4gICkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBCdXR0b24gc3R5bGUgY29uZmlndXJhdGlvblxyXG4gICAqL1xyXG4gIHN0eWxlPzogSVBheVBhbEJ1dHRvblN0eWxlO1xyXG5cclxuICAvKipcclxuICAgKiBFcnJvciBoYW5kbGVyXHJcbiAgICovXHJcbiAgb25FcnJvcj86IChlcnI6IGFueSkgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2xpY2sgaGFuZGxlclxyXG4gICAqL1xyXG4gIG9uQ2xpY2s/OiAoZGF0YTogYW55LCBhY3Rpb25zOiBJT25DbGlja0NhbGxiYWNrQWN0aW9ucykgPT4gdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VsIGhhbmRsZXJcclxuICAgKi9cclxuICBvbkNhbmNlbD86IChkYXRhOiBJQ2FuY2VsQ2FsbGJhY2tEYXRhLCBhY3Rpb25zOiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgaGFuZGxlci5cclxuICAgKiBjYW4gYmUgdXNlZCBmb3IgdmFsaWRhdGlvbiwgc2VlOiBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3MvY2hlY2tvdXQvaW50ZWdyYXRpb24tZmVhdHVyZXMvdmFsaWRhdGlvbi8jXHJcbiAgICovXHJcbiAgb25Jbml0PzogKGRhdGE6IElJbml0Q2FsbGJhY2tEYXRhLCBhY3Rpb25zOiBJT25Jbml0Q2FsbGJhY2tBY3Rpb25zKSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgc3Vic2NyaXB0aW9uIGhhbmRsZXJcclxuICAgKiBodHRwczovL2RldmVsb3Blci5wYXlwYWwuY29tL2RvY3Mvc3Vic2NyaXB0aW9ucy9pbnRlZ3JhdGUvXHJcbiAgICpcclxuICAgKiBOb3RlOiB0aGUgdmF1bHQgcHJvcGVydHkgaW4gdGhlIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gYWxzbyBoYXMgdG8gYmUgc2V0IHRvIHRydWVcclxuICAgKi9cclxuICBjcmVhdGVTdWJzY3JpcHRpb24/OiAoZGF0YTogYW55KSA9PiBJQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdDtcclxuXHJcbiAgLyoqXHJcbiAgICogVmF1bHQgLSBtdXN0IGJlIHNldCB0byB0cnVlIHdoZW4gY3JlYXRpbmcgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHZhdWx0PzogVHJ1ZUZhbHNlO1xyXG4gIGludGVudD86IE9yZGVySW50ZW50O1xyXG5cclxuICAvKlxyXG4gICAgU2VsZWN0IHR5cGUgb2YgZnVuZGluZyBzb3VyY2UsIHVzZSBpdCB3aGVuIHlvdSBuZWVkIHNldCB0eXBlIG9mIGJ1dHRvbiB5b3Ugd2FudCB0byBzZWUsIHNlZTogaHR0cHM6Ly9kZXZlbG9wZXIucGF5cGFsLmNvbS9kb2NzL2NoZWNrb3V0L3N0YW5kYXJkL2N1c3RvbWl6ZS9zdGFuZGFsb25lLWJ1dHRvbnMvXHJcbiAgKi9cclxuICBmdW5kaW5nU291cmNlPzogXCJQQVlQQUxcIiB8IFwiQ0FSRFwiIHwgXCJQQVlMQVRFUlwiIHwgXCJDUkVESVRcIiB8IFwiVkVOTU9cIjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgVHJ1ZUZhbHNlID0gXCJ0cnVlXCIgfCBcImZhbHNlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXlQYWxVcmxDb25maWcge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcbiAgY3VycmVuY3k/OiBzdHJpbmc7XHJcbiAgZnVuZGluZz86IGJvb2xlYW47XHJcbiAgY29tbWl0PzogVHJ1ZUZhbHNlO1xyXG4gIHZhdWx0PzogVHJ1ZUZhbHNlO1xyXG4gIGludGVudD86IE9yZGVySW50ZW50O1xyXG4gIGxvY2FsZT86IHN0cmluZztcclxuICBleHRyYVBhcmFtcz86IElRdWVyeVBhcmFtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9yZGVyRGV0YWlscyB7XHJcbiAgY3JlYXRlX3RpbWU6IHN0cmluZztcclxuICB1cGRhdGVfdGltZTogc3RyaW5nO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgaW50ZW50OiBPcmRlckludGVudDtcclxuICBwYXllcjogSVBheWVyO1xyXG4gIHN0YXR1czogT3JkZXJTdGF0dXM7XHJcbiAgbGlua3M6IElMaW5rRGVzY3JpcHRpb25bXTtcclxuICBwdXJjaGFzZV91bml0czogSVB1cmNoYXNlVW5pdFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDbGllbnRBdXRob3JpemVDYWxsYmFja0RhdGEgZXh0ZW5kcyBJT3JkZXJEZXRhaWxzIHtcclxuICBsaW5rczogSUxpbmtEZXNjcmlwdGlvbltdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElMaW5rRGVzY3JpcHRpb24ge1xyXG4gIGhyZWY6IHN0cmluZztcclxuICByZWw6IFN0cmluZztcclxuICBtZXRob2Q/OiBMaW5rTWV0aG9kO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElRdWVyeVBhcmFtIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT25TaGlwcGluZ0NoYW5nZUNhbGxiYWNrID0gKFxyXG4gIGRhdGE6IElPblNoaXBwaW5nQ2hhbmdlRGF0YSxcclxuICBhY3Rpb25zOiBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnNcclxuKSA9PiBhbnk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElPblNoaXBwaW5nQ2hhbmdlRGF0YSB7XHJcbiAgcGF5bWVudFRva2VuOiBzdHJpbmc7XHJcbiAgc2hpcHBpbmdfYWRkcmVzczogYW55O1xyXG4gIHNlbGVjdGVkX3NoaXBwaW5nX21ldGhvZD86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT25TaGlwcGluZ0NoYW5nZUFjdGlvbnMge1xyXG4gIHJlc29sdmU6ICgpID0+IGFueTtcclxuICByZWplY3Q6ICgpID0+IGFueTtcclxuICBwYXRjaDogKCkgPT4gYW55O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBMaW5rTWV0aG9kID1cclxuICB8IFwiR0VUXCJcclxuICB8IFwiUE9TVFwiXHJcbiAgfCBcIlBVVFwiXHJcbiAgfCBcIkRFTEVURVwiXHJcbiAgfCBcIkhFQURcIlxyXG4gIHwgXCJDT05ORUNUXCJcclxuICB8IFwiT1BUSU9OU1wiXHJcbiAgfCBcIlBBVENIXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElBZHZhbmNlZENvbmZpZ3VyYXRpb24ge1xyXG4gIGNvbW1pdD86IFRydWVGYWxzZTtcclxuICBsb2NhbGU/OiBzdHJpbmc7XHJcbiAgZXh0cmFRdWVyeVBhcmFtcz86IElRdWVyeVBhcmFtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uQXBwcm92ZUNhbGxiYWNrRGF0YSB7XHJcbiAgb3JkZXJJRDogc3RyaW5nO1xyXG4gIHBheWVySUQ6IHN0cmluZztcclxuICBzdWJzY3JpcHRpb25JRDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDcmVhdGVPcmRlckNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgb3JkZXI6IHtcclxuICAgIGNyZWF0ZTogKG9yZGVyOiBJQ3JlYXRlT3JkZXJSZXF1ZXN0KSA9PiBQcm9taXNlPGFueT47XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2FuY2VsQ2FsbGJhY2tEYXRhIHtcclxuICBvcmRlcklEOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uQXBwcm92ZUNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgcmVkaXJlY3Q6ICgpID0+IHZvaWQ7XHJcbiAgcmVzdGFydDogKCkgPT4gdm9pZDtcclxuICBvcmRlcjoge1xyXG4gICAgYXV0aG9yaXplOiAoKSA9PiBQcm9taXNlPGFueT47XHJcbiAgICBjYXB0dXJlOiAoKSA9PiBQcm9taXNlPGFueT47XHJcbiAgICBnZXQ6ICgpID0+IFByb21pc2U8SU9yZGVyRGV0YWlscz47XHJcbiAgICBwYXRjaDogKCkgPT4gUHJvbWlzZTxhbnk+O1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSU9uSW5pdENhbGxiYWNrQWN0aW9ucyB7XHJcbiAgZW5hYmxlOiAoKSA9PiB2b2lkO1xyXG4gIGRpc2FibGU6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrQWN0aW9ucyB7XHJcbiAgc3Vic2NyaXB0aW9uOiB7XHJcbiAgICBjcmVhdGU6IChzdWJzY3JpcHRpb246IElDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0KSA9PiBQcm9taXNlPGFueT47XHJcbiAgICByZXZpc2U6IChcclxuICAgICAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZyxcclxuICAgICAgc3Vic2NyaXB0aW9uOiBJQ3JlYXRlU3Vic2NyaXB0aW9uUmVxdWVzdFxyXG4gICAgKSA9PiBQcm9taXNlPGFueT47XHJcbiAgfTtcclxufVxyXG5cclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxyXG5leHBvcnQgaW50ZXJmYWNlIElJbml0Q2FsbGJhY2tEYXRhIHt9XHJcblxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNyZWF0ZVN1YnNjcmlwdGlvbkNhbGxiYWNrRGF0YSB7fVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJT25DbGlja0NhbGxiYWNrQWN0aW9ucyB7XHJcbiAgcmVzb2x2ZTogKCkgPT4gdm9pZDtcclxuICByZWplY3Q6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheVBhbEJ1dHRvblN0eWxlIHtcclxuICBsYWJlbD86XHJcbiAgICB8IFwicGF5cGFsXCJcclxuICAgIHwgXCJjaGVja291dFwiXHJcbiAgICB8IFwicGF5XCJcclxuICAgIHwgXCJpbnN0YWxsbWVudFwiXHJcbiAgICB8IFwiYnV5bm93XCJcclxuICAgIHwgXCJzdWJzY3JpYmVcIjtcclxuICBzaGFwZT86IFwicGlsbFwiIHwgXCJyZWN0XCI7XHJcbiAgY29sb3I/OiBcImdvbGRcIiB8IFwiYmx1ZVwiIHwgXCJzaWx2ZXJcIiB8IFwid2hpdGVcIiB8IFwiYmxhY2tcIjtcclxuICBsYXlvdXQ/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcclxuICB0YWdsaW5lPzogYm9vbGVhbjtcclxuICBoZWlnaHQ/OiBudW1iZXI7XHJcbiAgZnVuZGluZ2ljb25zPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ3JlYXRlT3JkZXJSZXF1ZXN0IHtcclxuICBpbnRlbnQ6IE9yZGVySW50ZW50O1xyXG4gIHB1cmNoYXNlX3VuaXRzOiBJUHVyY2hhc2VVbml0W107XHJcblxyXG4gIHBheWVyPzogSVBheWVyO1xyXG4gIGFwcGxpY2F0aW9uX2NvbnRleHQ/OiBJQXBwbGljYXRpb25Db250ZXh0O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDcmVhdGVTdWJzY3JpcHRpb25SZXF1ZXN0IHtcclxuICBwbGFuX2lkOiBzdHJpbmc7XHJcbiAgcXVhbnRpdHk/OiBudW1iZXI7XHJcbiAgY3VzdG9tX2lkOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheWVyIHtcclxuICBuYW1lPzogSVBhcnR5TmFtZTtcclxuICBlbWFpbF9hZGRyZXNzPzogc3RyaW5nO1xyXG4gIHBheWVyX2lkPzogc3RyaW5nO1xyXG4gIGJpcnRoX2RhdGU/OiBzdHJpbmc7XHJcbiAgdGF4X2luZm8/OiBJVGF4SW5mbztcclxuICBhZGRyZXNzPzogSUFkZHJlc3NQb3J0YWJsZTtcclxuICBwaG9uZT86IElQaG9uZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQXBwbGljYXRpb25Db250ZXh0IHtcclxuICBicmFuZF9uYW1lPzogc3RyaW5nO1xyXG4gIGxvY2FsZT86IHN0cmluZztcclxuICBsYW5kaW5nX3BhZ2U/OiBQYXlwYWxMYW5kaW5nUGFnZTtcclxuICBzaGlwcGluZ19wcmVmZXJlbmNlPzogU2hpcHBpbmdQcmVmZXJlbmNlO1xyXG4gIHVzZXJfYWN0aW9uPzogUGF5UGFsVXNlckFjdGlvbjtcclxuICBwYXltZW50X21ldGhvZD86IElQYXltZW50TWV0aG9kO1xyXG4gIHJldHVybl91cmw/OiBzdHJpbmc7XHJcbiAgY2FuY2VsX3VybD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGF5bWVudE1ldGhvZCB7XHJcbiAgcGF5ZXJfc2VsZWN0ZWQ/OiBQYXllclNlbGVjdGVkO1xyXG4gIHBheWVlX3ByZWZlcnJlZD86IFBheWVlUHJlZmVycmVkO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXllZVByZWZlcnJlZCA9IFwiVU5SRVNUUklDVEVEXCIgfCBcIklNTUVESUFURV9QQVlNRU5UX1JFUVVJUkVEXCI7XHJcblxyXG5leHBvcnQgdHlwZSBQYXllclNlbGVjdGVkID0gXCJQQVlQQUxfQ1JFRElUXCIgfCBcIlBBWVBBTFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgUGF5UGFsVXNlckFjdGlvbiA9IFwiQ09OVElOVUVcIiB8IFwiUEFZX05PV1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgU2hpcHBpbmdQcmVmZXJlbmNlID1cclxuICB8IFwiR0VUX0ZST01fRklMRVwiXHJcbiAgfCBcIk5PX1NISVBQSU5HXCJcclxuICB8IFwiU0VUX1BST1ZJREVEX0FERFJFU1NcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFBheXBhbExhbmRpbmdQYWdlID0gXCJMT0dJTlwiIHwgXCJCSUxMSU5HXCI7XHJcblxyXG5leHBvcnQgdHlwZSBPcmRlckludGVudCA9IFwiQ0FQVFVSRVwiIHwgXCJBVVRIT1JJWkVcIiB8IFwic3Vic2NyaXB0aW9uXCI7XHJcblxyXG5leHBvcnQgdHlwZSBEaXNidXJzZW1lbnRNb2RlID0gXCJJTlNUQU5UXCIgfCBcIkRFTEFZRURcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEl0ZW1DYXRlZ29yeSA9IFwiRElHSVRBTF9HT09EU1wiIHwgXCJQSFlTSUNBTF9HT09EU1wiO1xyXG5cclxuZXhwb3J0IHR5cGUgUGhvbmVUeXBlID0gXCJGQVhcIiB8IFwiSE9NRVwiIHwgXCJNT0JJTEVcIiB8IFwiT1RIRVJcIiB8IFwiUEFHRVJcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFRheElkVHlwZSA9IFwiQlJfQ1BGXCIgfCBcIkJSX0NOUEpcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBob25lIHtcclxuICBwaG9uZV90eXBlPzogUGhvbmVUeXBlO1xyXG4gIHBob25lX251bWJlcj86IElQaG9uZU51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVGF4SW5mbyB7XHJcbiAgdGF4X2lkOiBzdHJpbmc7XHJcbiAgdGF4X2lkX3R5cGU6IFRheElkVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGhvbmVOdW1iZXIge1xyXG4gIG5hdGlvbmFsX251bWJlcjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQdXJjaGFzZVVuaXQge1xyXG4gIGFtb3VudDogSVVuaXRBbW91bnQ7XHJcblxyXG4gIHJlZmVyZW5jZV9pZD86IHN0cmluZztcclxuICBwYXllZT86IElQYXllZTtcclxuICBwYXltZW50X2luc3RydWN0aW9uPzogSVBheW1lbnRJbnN0cnVjdGlvbnM7XHJcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgY3VzdG9tX2lkPzogc3RyaW5nO1xyXG4gIGludm9pY2VfaWQ/OiBzdHJpbmc7XHJcbiAgc29mdF9kZXNjcmlwdG9yPzogc3RyaW5nO1xyXG4gIGl0ZW1zOiBJVHJhbnNhY3Rpb25JdGVtW107XHJcbiAgc2hpcHBpbmc/OiBJU2hpcHBpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBheWVlIHtcclxuICBlbWFpbF9hZGRyZXNzPzogc3RyaW5nO1xyXG4gIG1lcmNoYW50X2lkPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXltZW50SW5zdHJ1Y3Rpb25zIHtcclxuICBwbGF0Zm9ybV9mZWVzPzogSVBsYXRmb3JtRmVlW107XHJcbiAgZGlzYnVyc2VtZW50X21vZGU/OiBEaXNidXJzZW1lbnRNb2RlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQbGF0Zm9ybUZlZSB7XHJcbiAgYW1vdW50OiBJVW5pdEFtb3VudDtcclxuICBwYXllZT86IElQYXllZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVHJhbnNhY3Rpb25JdGVtIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdW5pdF9hbW91bnQ6IElVbml0QW1vdW50O1xyXG4gIHF1YW50aXR5OiBzdHJpbmc7XHJcblxyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG4gIHNrdT86IHN0cmluZztcclxuICBjYXRlZ29yeT86IEl0ZW1DYXRlZ29yeTtcclxuICB0YXg/OiBJVGF4O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUYXgge1xyXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbml0QW1vdW50IHtcclxuICBjdXJyZW5jeV9jb2RlOiBzdHJpbmc7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBicmVha2Rvd24/OiBJVW5pdEJyZWFrZG93bjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTW9uZXkge1xyXG4gIGN1cnJlbmN5X2NvZGU6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElVbml0QnJlYWtkb3duIHtcclxuICBpdGVtX3RvdGFsPzogSVVuaXRBbW91bnQ7XHJcbiAgc2hpcHBpbmc/OiBJVW5pdEFtb3VudDtcclxuICBoYW5kbGluZz86IElVbml0QW1vdW50O1xyXG4gIHRheF90b3RhbD86IElVbml0QW1vdW50O1xyXG4gIGluc3VyYW5jZT86IElVbml0QW1vdW50O1xyXG4gIHNoaXBwaW5nX2Rpc2NvdW50PzogSVVuaXRBbW91bnQ7XHJcbiAgZGlzY291bnQ/OiBJTW9uZXk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVBhcnR5TmFtZSB7XHJcbiAgcHJlZml4Pzogc3RyaW5nO1xyXG4gIGdpdmVuX25hbWU/OiBzdHJpbmc7XHJcbiAgc3VybmFtZT86IHN0cmluZztcclxuICBtaWRkbGVfbmFtZT86IHN0cmluZztcclxuICBzdWZmaXg/OiBzdHJpbmc7XHJcbiAgYWx0ZXJuYXRlX2Z1bGxfbmFtZT86IHN0cmluZztcclxuICBmdWxsX25hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFkZHJlc3NQb3J0YWJsZSB7XHJcbiAgY291bnRyeV9jb2RlOiBzdHJpbmc7XHJcblxyXG4gIGFkZHJlc3NfbGluZV8xPzogc3RyaW5nO1xyXG4gIGFkZHJlc3NfbGluZV8yPzogc3RyaW5nO1xyXG4gIGFkbWluX2FyZWFfMj86IHN0cmluZztcclxuICBhZG1pbl9hcmVhXzE/OiBzdHJpbmc7XHJcbiAgcG9zdGFsX2NvZGU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNoaXBwaW5nIHtcclxuICBuYW1lPzogSVBhcnR5TmFtZTtcclxuICBhZGRyZXNzPzogSUFkZHJlc3NQb3J0YWJsZTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgT3JkZXJTdGF0dXMgPVxyXG4gIHwgXCJBUFBST1ZFRFwiXHJcbiAgfCBcIlNBVkVEXCJcclxuICB8IFwiQ1JFQVRFRFwiXHJcbiAgfCBcIlZPSURFRFwiXHJcbiAgfCBcIkNPTVBMRVRFRFwiO1xyXG4iXX0=
@@ -0,0 +1,98 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 14 Jun 2024
12
+
13
+ Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ import { Injectable } from '@angular/core';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "../../services/script.service";
19
+ export class PayPalScriptService {
20
+ constructor(scriptService) {
21
+ this.scriptService = scriptService;
22
+ this.paypalWindowName = 'paypal';
23
+ }
24
+ registerPayPalScript(config, onReady) {
25
+ this.scriptService.registerScript(this.getUrlForConfig(config), this.paypalWindowName, onReady);
26
+ }
27
+ destroyPayPalScript() {
28
+ this.scriptService.cleanup(this.paypalWindowName);
29
+ }
30
+ getUrlForConfig(config) {
31
+ const params = [
32
+ {
33
+ name: 'client-id',
34
+ value: config.clientId
35
+ }
36
+ ];
37
+ if (config.locale) {
38
+ params.push({
39
+ name: 'locale',
40
+ value: config.locale
41
+ });
42
+ }
43
+ if (config.currency) {
44
+ params.push({
45
+ name: 'currency',
46
+ value: config.currency
47
+ });
48
+ }
49
+ if (config.commit) {
50
+ params.push({
51
+ name: 'commit',
52
+ value: config.commit
53
+ });
54
+ }
55
+ if (config.vault) {
56
+ params.push({
57
+ name: 'vault',
58
+ value: config.vault
59
+ });
60
+ }
61
+ if (config.intent) {
62
+ params.push({
63
+ name: 'intent',
64
+ value: config.intent
65
+ });
66
+ }
67
+ if (config.funding) {
68
+ params.push({
69
+ name: 'components',
70
+ value: 'buttons,funding-eligibility'
71
+ });
72
+ }
73
+ if (config.extraParams) {
74
+ params.push(...config.extraParams);
75
+ }
76
+ return `https://www.paypal.com/sdk/js${this.getQueryString(params)}`;
77
+ }
78
+ getQueryString(queryParams) {
79
+ let queryString = '';
80
+ for (let i = 0; i < queryParams.length; i++) {
81
+ const queryParam = queryParams[i];
82
+ if (i === 0) {
83
+ queryString += '?';
84
+ }
85
+ else {
86
+ queryString += '&';
87
+ }
88
+ queryString += `${queryParam.name}=${queryParam.value}`;
89
+ }
90
+ return queryString;
91
+ }
92
+ static { this.ɵfac = function PayPalScriptService_Factory(t) { return new (t || PayPalScriptService)(i0.ɵɵinject(i1.ScriptService)); }; }
93
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PayPalScriptService, factory: PayPalScriptService.ɵfac }); }
94
+ }
95
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PayPalScriptService, [{
96
+ type: Injectable
97
+ }], () => [{ type: i1.ScriptService }], null); })();
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5cGFsLXNjcmlwdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3BheW1lbnRzL1BheVBhbC9zZXJ2aWNlcy9wYXlwYWwtc2NyaXB0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUc5QixZQUFzQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUZqQyxxQkFBZ0IsR0FBRyxRQUFRLENBQUM7SUFHN0MsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQXdCLEVBQUUsT0FBaUM7UUFDOUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQXdCO1FBQzlDLE1BQU0sTUFBTSxHQUFrQjtZQUMxQjtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQ3pCO1NBQ0osQ0FBQztRQUVGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNO2FBQ3ZCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNSLElBQUksRUFBRSxVQUFVO2dCQUNoQixLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDekIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNO2FBQ3ZCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2FBQ3RCLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNSLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTTthQUN2QixDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDVixJQUFJLEVBQUMsWUFBWTtnQkFDakIsS0FBSyxFQUFFLDZCQUE2QjthQUNyQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsT0FBTyxnQ0FBZ0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxjQUFjLENBQUMsV0FBMEI7UUFDL0MsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXJCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNWLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDdkIsQ0FBQztZQUVELFdBQVcsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVELENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO29GQXRGVSxtQkFBbUI7dUVBQW5CLG1CQUFtQixXQUFuQixtQkFBbUI7O2lGQUFuQixtQkFBbUI7Y0FEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbjxmaWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAxNCBKdW4gMjAyNFxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IElQYXlQYWxVcmxDb25maWcsIElRdWVyeVBhcmFtIH0gZnJvbSAnLi4vbW9kZWxzL3BheXBhbC1tb2RlbHMnO1xyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUGF5UGFsU2NyaXB0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwYXlwYWxXaW5kb3dOYW1lID0gJ3BheXBhbCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzY3JpcHRTZXJ2aWNlOiBTY3JpcHRTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclBheVBhbFNjcmlwdChjb25maWc6IElQYXlQYWxVcmxDb25maWcsIG9uUmVhZHk6IChwYXlQYWxBcGk6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JpcHRTZXJ2aWNlLnJlZ2lzdGVyU2NyaXB0KHRoaXMuZ2V0VXJsRm9yQ29uZmlnKGNvbmZpZyksIHRoaXMucGF5cGFsV2luZG93TmFtZSwgb25SZWFkeSk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UGF5UGFsU2NyaXB0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY3JpcHRTZXJ2aWNlLmNsZWFudXAodGhpcy5wYXlwYWxXaW5kb3dOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXJsRm9yQ29uZmlnKGNvbmZpZzogSVBheVBhbFVybENvbmZpZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IElRdWVyeVBhcmFtW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnY2xpZW50LWlkJyxcclxuICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy5jbGllbnRJZFxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgaWYgKGNvbmZpZy5sb2NhbGUpIHtcclxuICAgICAgcGFyYW1zLnB1c2goe1xyXG4gICAgICAgICAgbmFtZTogJ2xvY2FsZScsXHJcbiAgICAgICAgICB2YWx1ZTogY29uZmlnLmxvY2FsZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmN1cnJlbmN5KSB7XHJcbiAgICAgICAgcGFyYW1zLnB1c2goe1xyXG4gICAgICAgICAgICBuYW1lOiAnY3VycmVuY3knLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29uZmlnLmN1cnJlbmN5XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5jb21taXQpIHtcclxuICAgICAgICBwYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICdjb21taXQnLFxyXG4gICAgICAgICAgICB2YWx1ZTogY29uZmlnLmNvbW1pdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcudmF1bHQpIHtcclxuICAgICAgICBwYXJhbXMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6ICd2YXVsdCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmF1bHRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnLmludGVudCkge1xyXG4gICAgICAgIHBhcmFtcy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogJ2ludGVudCcsXHJcbiAgICAgICAgICAgIHZhbHVlOiBjb25maWcuaW50ZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoY29uZmlnLmZ1bmRpbmcpIHtcclxuICAgICAgcGFyYW1zLnB1c2goe1xyXG4gICAgICAgIG5hbWU6J2NvbXBvbmVudHMnLFxyXG4gICAgICAgIHZhbHVlOiAnYnV0dG9ucyxmdW5kaW5nLWVsaWdpYmlsaXR5J1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcuZXh0cmFQYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucHVzaCguLi5jb25maWcuZXh0cmFQYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBgaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9zZGsvanMke3RoaXMuZ2V0UXVlcnlTdHJpbmcocGFyYW1zKX1gO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRRdWVyeVN0cmluZyhxdWVyeVBhcmFtczogSVF1ZXJ5UGFyYW1bXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXJ5UGFyYW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW1zW2ldO1xyXG4gICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICc/JztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyArPSAnJic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtxdWVyeVBhcmFtLm5hbWV9PSR7cXVlcnlQYXJhbS52YWx1ZX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBxdWVyeVN0cmluZztcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,22 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 14 Jun 2024
12
+
13
+ Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //services
17
+ export * from './services/script.service';
18
+ //PayPal
19
+ export * from './PayPal/components/paypal.component';
20
+ export * from './PayPal/models/paypal-models';
21
+ export * from './PayPal/services/paypal-script.service';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvcGF5bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixVQUFVO0FBQ1YsY0FBYywyQkFBMkIsQ0FBQztBQUUxQyxRQUFRO0FBQ1IsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG48ZmlsZT5cclxuICBQcm9qZWN0OlxyXG4gICAgQG9zb3ZpdG55L2FuYXRvbHlcclxuXHJcbiAgQXV0aG9yczpcclxuICAgIFZhZGltIE9zb3ZpdG55IHZhZGltQG9zb3ZpdG55LmNvbVxyXG4gICAgQW5hdG9seSBPc292aXRueSBhbmF0b2x5QG9zb3ZpdG55LmNvbVxyXG5cclxuICBDcmVhdGVkOlxyXG4gICAgMTQgSnVuIDIwMjRcclxuXHJcbiAgQ29weXJpZ2h0IChjKSAyMDE2LTIwMjIgT3Nvdml0bnkgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG48L2ZpbGU+XHJcbiovXHJcblxyXG4vL3NlcnZpY2VzXHJcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMvc2NyaXB0LnNlcnZpY2UnO1xyXG5cclxuLy9QYXlQYWxcclxuZXhwb3J0ICogZnJvbSAnLi9QYXlQYWwvY29tcG9uZW50cy9wYXlwYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9QYXlQYWwvbW9kZWxzL3BheXBhbC1tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL1BheVBhbC9zZXJ2aWNlcy9wYXlwYWwtc2NyaXB0LnNlcnZpY2UnO1xyXG4iXX0=
@@ -0,0 +1,54 @@
1
+ /*
2
+ <file>
3
+ Project:
4
+ @osovitny/anatoly
5
+
6
+ Authors:
7
+ Vadim Osovitny vadim@osovitny.com
8
+ Anatoly Osovitny anatoly@osovitny.com
9
+
10
+ Created:
11
+ 14 Jun 2024
12
+
13
+ Copyright (c) 2016-2022 Osovitny Inc. All rights reserved.
14
+ </file>
15
+ */
16
+ //Node
17
+ import { NgModule } from '@angular/core';
18
+ import { CommonModule } from '@angular/common';
19
+ //App
20
+ import { ScriptService } from './services/script.service';
21
+ //PayPal
22
+ import { PayPalComponent } from './PayPal/components/paypal.component';
23
+ import { PayPalScriptService } from './PayPal/services/paypal-script.service';
24
+ import * as i0 from "@angular/core";
25
+ export class AnatolyPaymentsModule {
26
+ static { this.ɵfac = function AnatolyPaymentsModule_Factory(t) { return new (t || AnatolyPaymentsModule)(); }; }
27
+ static { this.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: AnatolyPaymentsModule }); }
28
+ static { this.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
29
+ ScriptService,
30
+ //PayPal
31
+ PayPalScriptService
32
+ ], imports: [CommonModule] }); }
33
+ }
34
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AnatolyPaymentsModule, [{
35
+ type: NgModule,
36
+ args: [{
37
+ imports: [
38
+ CommonModule
39
+ ],
40
+ declarations: [
41
+ PayPalComponent
42
+ ],
43
+ exports: [
44
+ PayPalComponent
45
+ ],
46
+ providers: [
47
+ ScriptService,
48
+ //PayPal
49
+ PayPalScriptService
50
+ ]
51
+ }]
52
+ }], null, null); })();
53
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(AnatolyPaymentsModule, { declarations: [PayPalComponent], imports: [CommonModule], exports: [PayPalComponent] }); })();
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5hdG9seS9zcmMvbGliL3BheW1lbnRzL3BheW1lbnRzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFjRTtBQUVGLE1BQU07QUFDTixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxLQUFLO0FBQ0wsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFELFFBQVE7QUFDUixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBbUI5RSxNQUFNLE9BQU8scUJBQXFCO3NGQUFyQixxQkFBcUI7bUVBQXJCLHFCQUFxQjt3RUFQckI7WUFDVCxhQUFhO1lBRWIsUUFBUTtZQUNSLG1CQUFtQjtTQUNwQixZQWJDLFlBQVk7O2lGQWVILHFCQUFxQjtjQWpCakMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO2lCQUNiO2dCQUNELFlBQVksRUFBRTtvQkFDWixlQUFlO2lCQUNoQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsZUFBZTtpQkFDaEI7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGFBQWE7b0JBRWIsUUFBUTtvQkFDUixtQkFBbUI7aUJBQ3BCO2FBQ0Y7O3dGQUNZLHFCQUFxQixtQkFaOUIsZUFBZSxhQUhmLFlBQVksYUFNWixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDE0IEp1biAyMDI0XHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNi0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zY3JpcHQuc2VydmljZSc7XHJcblxyXG4vL1BheVBhbFxyXG5pbXBvcnQgeyBQYXlQYWxDb21wb25lbnQgfSBmcm9tICcuL1BheVBhbC9jb21wb25lbnRzL3BheXBhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYXlQYWxTY3JpcHRTZXJ2aWNlIH0gZnJvbSAnLi9QYXlQYWwvc2VydmljZXMvcGF5cGFsLXNjcmlwdC5zZXJ2aWNlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFBheVBhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgUGF5UGFsQ29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFNjcmlwdFNlcnZpY2UsXHJcblxyXG4gICAgLy9QYXlQYWxcclxuICAgIFBheVBhbFNjcmlwdFNlcnZpY2VcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmF0b2x5UGF5bWVudHNNb2R1bGUge1xyXG59XHJcbiJdfQ==