siarashield_workspace 0.0.33 → 0.0.36
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.
- package/README.md +105 -195
- package/esm2022/lib/siara-shield-script-utils.mjs +3 -2
- package/esm2022/lib/siara-shield-vendor-runtime.mjs +98 -0
- package/esm2022/lib/siara-shield.component.mjs +29 -15
- package/esm2022/lib/siara-shield.mjs +29 -15
- package/fesm2022/siarashield_workspace.mjs +182 -57
- package/fesm2022/siarashield_workspace.mjs.map +1 -1
- package/lib/siara-shield-vendor-runtime.d.ts +1 -0
- package/lib/siara-shield.component.d.ts +3 -1
- package/lib/siara-shield.d.ts +3 -1
- package/package.json +1 -1
- package/siarashield_workspace-0.0.36.tgz +0 -0
- package/siarashield_workspace-0.0.33.tgz +0 -0
package/README.md
CHANGED
|
@@ -1,49 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
# `siarashield_workspace`
|
|
2
2
|
|
|
3
3
|
Angular integration for CyberSiara **SiaraShield** captcha.
|
|
4
4
|
|
|
5
5
|
## Angular compatibility
|
|
6
6
|
|
|
7
|
-
- Minimum supported Angular
|
|
8
|
-
- Supported
|
|
9
|
-
- Peer
|
|
7
|
+
- Minimum supported Angular: `16`
|
|
8
|
+
- Supported range: `16.x` to `21.x`
|
|
9
|
+
- Peer dependencies:
|
|
10
10
|
- `@angular/core >=16.0.0 <22.0.0`
|
|
11
11
|
- `@angular/common >=16.0.0 <22.0.0`
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Quick start (recommended, easiest path)
|
|
14
|
+
|
|
15
|
+
Use this flow first. Most users need only these steps.
|
|
16
|
+
|
|
17
|
+
1. Install package:
|
|
14
18
|
|
|
15
19
|
```bash
|
|
16
20
|
npm i siarashield_workspace
|
|
17
21
|
```
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- **Recommended:** Angular component (`<siara-shield ...>`).
|
|
24
|
-
- **Alternative:** function API (`initSiaraShield(...)` + `checkSiaraShieldCaptcha...`).
|
|
25
|
-
|
|
26
|
-
Do not mix both styles on the same page.
|
|
27
|
-
|
|
28
|
-
1. Install package: `npm i siarashield_workspace`.
|
|
29
|
-
2. Put only the **public key** in Angular environment.
|
|
30
|
-
3. Keep the **private key** on backend only (`.env` or secret store).
|
|
31
|
-
4. Render captcha container (component tag or `<div class="SiaraShield"></div>` for function API).
|
|
32
|
-
5. Keep submit button class: `class="CaptchaSubmit"`.
|
|
33
|
-
6. Initialize captcha once per page load.
|
|
34
|
-
7. On submit, run captcha check before API call.
|
|
35
|
-
8. Call API only when captcha returns success (`result.ok === true` or `ok === true`).
|
|
36
|
-
|
|
37
|
-
## Get your keys
|
|
38
|
-
|
|
39
|
-
Get your public and private keys from <a href="https://mycybersiara.com" target="_blank" rel="noopener noreferrer">mycybersiara.com</a>.
|
|
40
|
-
|
|
41
|
-
## Put keys in the right place
|
|
23
|
+
2. Ensure Angular environment files exist.
|
|
24
|
+
- If your project does not have `src/environments`, create:
|
|
25
|
+
- `src/environments/environment.ts`
|
|
26
|
+
- `src/environments/environment.prod.ts`
|
|
42
27
|
|
|
43
|
-
|
|
44
|
-
- **Backend (.env):** private key only
|
|
45
|
-
|
|
46
|
-
Angular `environment` example:
|
|
28
|
+
3. Put only your **public key** in Angular environment:
|
|
47
29
|
|
|
48
30
|
```ts
|
|
49
31
|
export const environment = {
|
|
@@ -51,17 +33,7 @@ export const environment = {
|
|
|
51
33
|
};
|
|
52
34
|
```
|
|
53
35
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
```dotenv
|
|
57
|
-
SIARASHIELD_PRIVATE_KEY=YOUR-PRIVATE-KEY
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Never place the private key in Angular environment files, templates, or browser code.
|
|
61
|
-
|
|
62
|
-
## Recommended: use the Angular component (easiest)
|
|
63
|
-
|
|
64
|
-
### 1) Add the component to your template
|
|
36
|
+
4. Render component + submit button in template:
|
|
65
37
|
|
|
66
38
|
```html
|
|
67
39
|
<siara-shield
|
|
@@ -73,7 +45,7 @@ Never place the private key in Angular environment files, templates, or browser
|
|
|
73
45
|
<button type="submit" class="CaptchaSubmit" (click)="onSubmit()">Submit</button>
|
|
74
46
|
```
|
|
75
47
|
|
|
76
|
-
|
|
48
|
+
5. Check captcha before API submit:
|
|
77
49
|
|
|
78
50
|
```ts
|
|
79
51
|
import { Component, ViewChild } from '@angular/core';
|
|
@@ -88,63 +60,76 @@ import { SiaraShieldComponent } from 'siarashield_workspace';
|
|
|
88
60
|
})
|
|
89
61
|
export class FormComponent {
|
|
90
62
|
protected readonly environment = environment;
|
|
91
|
-
|
|
92
|
-
// Recommended: set from server (see CSP section)
|
|
93
63
|
protected readonly cspNonce = (window as any).__cspNonce as string | undefined;
|
|
94
|
-
private isSubmitting = false;
|
|
95
64
|
|
|
65
|
+
private isSubmitting = false;
|
|
96
66
|
@ViewChild(SiaraShieldComponent) private readonly captcha?: SiaraShieldComponent;
|
|
97
67
|
|
|
98
68
|
onCaptchaToken(token: string) {
|
|
99
|
-
// Optional: use token immediately if needed
|
|
100
69
|
console.log('SiaraShield token:', token);
|
|
101
70
|
}
|
|
102
71
|
|
|
103
72
|
async onSubmit() {
|
|
104
73
|
if (this.isSubmitting) return;
|
|
105
74
|
this.isSubmitting = true;
|
|
106
|
-
|
|
107
75
|
try {
|
|
108
76
|
const ok = await this.captcha?.checkCaptchaAsync();
|
|
109
|
-
if (!ok)
|
|
110
|
-
console.log('Captcha not completed yet');
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
77
|
+
if (!ok) return;
|
|
113
78
|
|
|
114
|
-
//
|
|
79
|
+
// Call your backend API only after captcha success.
|
|
115
80
|
alert('Form submitted successfully');
|
|
116
81
|
} finally {
|
|
117
|
-
// Allow next user attempt if captcha or API flow was not completed.
|
|
118
82
|
this.isSubmitting = false;
|
|
119
83
|
}
|
|
120
84
|
}
|
|
121
85
|
}
|
|
122
86
|
```
|
|
123
87
|
|
|
124
|
-
|
|
88
|
+
6. Keep your submit API logic only in the success branch (`ok === true`).
|
|
89
|
+
|
|
90
|
+
## Key handling (required)
|
|
91
|
+
|
|
92
|
+
- **Frontend (Angular): public key only**
|
|
93
|
+
- **Backend (.env or secret store): private key only**
|
|
125
94
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
-
|
|
95
|
+
Backend example:
|
|
96
|
+
|
|
97
|
+
```dotenv
|
|
98
|
+
SIARASHIELD_PRIVATE_KEY=YOUR-PRIVATE-KEY
|
|
99
|
+
```
|
|
130
100
|
|
|
131
|
-
|
|
101
|
+
Never place the private key in Angular code or browser-accessible files.
|
|
132
102
|
|
|
133
|
-
|
|
103
|
+
Get keys from [mycybersiara.com](https://mycybersiara.com).
|
|
104
|
+
|
|
105
|
+
## Integration rules (important)
|
|
106
|
+
|
|
107
|
+
- Choose one style per page:
|
|
108
|
+
- **Recommended:** `<siara-shield ...>`
|
|
109
|
+
- **Alternative:** function API
|
|
110
|
+
- Do not mix both styles on the same page.
|
|
111
|
+
- Keep submit button class: `CaptchaSubmit`.
|
|
112
|
+
- Initialize captcha once per page load.
|
|
113
|
+
|
|
114
|
+
## Function API (alternative)
|
|
115
|
+
|
|
116
|
+
Use this only when component integration is not possible.
|
|
117
|
+
|
|
118
|
+
Template:
|
|
134
119
|
|
|
135
120
|
```html
|
|
136
121
|
<div class="SiaraShield"></div>
|
|
137
122
|
<button type="submit" class="CaptchaSubmit" (click)="onSubmit()">Submit</button>
|
|
138
123
|
```
|
|
139
124
|
|
|
125
|
+
TypeScript:
|
|
126
|
+
|
|
140
127
|
```ts
|
|
141
128
|
import { environment } from '../environments/environment';
|
|
142
129
|
import { initSiaraShield, checkSiaraShieldCaptcha } from 'siarashield_workspace';
|
|
143
130
|
|
|
144
131
|
export class FormComponent {
|
|
145
132
|
ngOnInit() {
|
|
146
|
-
// Angular does not wait for async lifecycle hooks.
|
|
147
|
-
// Use void to run async init without blocking render.
|
|
148
133
|
void this.initializeCaptcha();
|
|
149
134
|
}
|
|
150
135
|
|
|
@@ -152,68 +137,47 @@ export class FormComponent {
|
|
|
152
137
|
await initSiaraShield({
|
|
153
138
|
publicKey: environment.siaraShieldPublicKey,
|
|
154
139
|
cspNonce: (window as any).__cspNonce || undefined,
|
|
155
|
-
// Optional: set true only while debugging vendor/runtime internals.
|
|
156
|
-
allowVendorConsoleLogs: false,
|
|
157
140
|
});
|
|
158
141
|
}
|
|
159
142
|
|
|
160
143
|
onSubmit() {
|
|
161
144
|
const result = checkSiaraShieldCaptcha();
|
|
162
|
-
if (!result.ok)
|
|
163
|
-
console.log('Captcha not completed yet');
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
145
|
+
if (!result.ok) return;
|
|
166
146
|
|
|
167
147
|
console.log(result.token);
|
|
168
148
|
// API call here
|
|
169
|
-
alert('Form submitted successfully');
|
|
170
149
|
}
|
|
171
150
|
}
|
|
172
151
|
```
|
|
173
152
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
If your frontend reads nonce from the DOM instead of `window`, reuse nonce from an existing script tag:
|
|
177
|
-
|
|
178
|
-
```ts
|
|
179
|
-
const nonce = document.querySelector('script[nonce]')?.getAttribute('nonce') || undefined;
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
The nonce must be generated on the server for each request. The package NEVER generates a nonce in the browser.
|
|
183
|
-
|
|
184
|
-
## CSP Compliance (Important)
|
|
153
|
+
## CSP guide
|
|
185
154
|
|
|
186
|
-
|
|
155
|
+
If your app has no strict CSP, default integration works without extra setup.
|
|
187
156
|
|
|
188
|
-
|
|
157
|
+
If your app uses strict nonce-based CSP:
|
|
189
158
|
|
|
190
|
-
- Generate
|
|
191
|
-
- Use
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
159
|
+
- Generate nonce on server for each request.
|
|
160
|
+
- Use same nonce in:
|
|
161
|
+
- `Content-Security-Policy` header
|
|
162
|
+
- script tags loading your Angular app
|
|
163
|
+
- `cspNonce` option/input
|
|
164
|
+
- Do not generate nonce in browser.
|
|
196
165
|
|
|
197
|
-
###
|
|
166
|
+
### Strict policy example (recommended for security)
|
|
198
167
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
style-src 'self' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com 'unsafe-inline';
|
|
208
|
-
font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;
|
|
209
|
-
img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;
|
|
210
|
-
">
|
|
211
|
-
|
|
212
|
-
<script nonce="SIARASHIELD_NONCE" src="https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js"></script>
|
|
213
|
-
<script nonce="SIARASHIELD_NONCE" src="https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js"></script>
|
|
168
|
+
```http
|
|
169
|
+
default-src 'self';
|
|
170
|
+
script-src 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
171
|
+
script-src-elem 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
172
|
+
connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
173
|
+
style-src 'self' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
174
|
+
font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;
|
|
175
|
+
img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;
|
|
214
176
|
```
|
|
215
177
|
|
|
216
|
-
|
|
178
|
+
### Compatibility policy (easier integration, weaker security)
|
|
179
|
+
|
|
180
|
+
Use only when customer policy allows `'unsafe-inline'`:
|
|
217
181
|
|
|
218
182
|
```ts
|
|
219
183
|
import { getSiaraShieldCspPolicy } from 'siarashield_workspace';
|
|
@@ -224,107 +188,53 @@ const csp = getSiaraShieldCspPolicy({
|
|
|
224
188
|
});
|
|
225
189
|
```
|
|
226
190
|
|
|
227
|
-
|
|
191
|
+
## Script loading behavior
|
|
228
192
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
```html
|
|
232
|
-
<script nonce="siarashield-example-nonce">
|
|
233
|
-
window.__cspNonce = "siarashield-example-nonce";
|
|
234
|
-
</script>
|
|
235
|
-
<script nonce="siarashield-example-nonce" src="https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js"></script>
|
|
236
|
-
<script nonce="siarashield-example-nonce" src="https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js"></script>
|
|
237
|
-
|
|
238
|
-
<meta http-equiv="Content-Security-Policy" content="
|
|
239
|
-
default-src 'self';
|
|
240
|
-
script-src 'self' 'nonce-siarashield-example-nonce' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
241
|
-
script-src-elem 'self' 'nonce-siarashield-example-nonce' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
242
|
-
connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
243
|
-
style-src 'self' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com 'unsafe-inline';
|
|
244
|
-
font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;
|
|
245
|
-
img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;
|
|
246
|
-
">
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Strict production CSP policy (advanced)
|
|
250
|
-
|
|
251
|
-
In production, send CSP as an HTTP response header and inject the same nonce value into script tags and `initSiaraShield({ cspNonce })`.
|
|
252
|
-
|
|
253
|
-
```http
|
|
254
|
-
default-src 'self';
|
|
255
|
-
script-src 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
256
|
-
script-src-elem 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
257
|
-
connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
258
|
-
style-src 'self' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
259
|
-
font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;
|
|
260
|
-
img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
Example with the same server-generated nonce in script tags:
|
|
264
|
-
|
|
265
|
-
```html
|
|
266
|
-
<script nonce="SIARASHIELD_NONCE">
|
|
267
|
-
window.__cspNonce = "SIARASHIELD_NONCE";
|
|
268
|
-
</script>
|
|
269
|
-
<script nonce="SIARASHIELD_NONCE" src="https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js"></script>
|
|
270
|
-
<script nonce="SIARASHIELD_NONCE" src="https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js"></script>
|
|
271
|
-
```
|
|
193
|
+
By default (`loadJQuery: true`) package loads required vendor resources automatically:
|
|
272
194
|
|
|
273
|
-
|
|
195
|
+
- `https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js` (fallback when jQuery not already present)
|
|
196
|
+
- `https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js`
|
|
197
|
+
- `https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js`
|
|
274
198
|
|
|
275
|
-
|
|
199
|
+
Most users should **not** add these script tags manually.
|
|
276
200
|
|
|
277
|
-
|
|
201
|
+
If your app already has jQuery, set `[loadJQuery]="false"` (or `loadJQuery: false` in function API).
|
|
278
202
|
|
|
279
|
-
|
|
280
|
-
- For easiest client integration, use the compatibility policy above (`includeUnsafeInlineScript: true`, `includeUnsafeInlineStyle: true`).
|
|
281
|
-
- Generating a new nonce in the browser (or per function call) does not help. CSP nonce must match the value from server response headers for that page load.
|
|
203
|
+
## Advanced validation options
|
|
282
204
|
|
|
283
|
-
|
|
205
|
+
`checkCaptchaAsync(...)` and `checkSiaraShieldCaptchaAsync(...)` support optional tuning:
|
|
284
206
|
|
|
285
|
-
|
|
207
|
+
- `timeoutMs`
|
|
208
|
+
- `pollIntervalMs`
|
|
209
|
+
- `beforeCheckDelayMs`
|
|
210
|
+
- `retryOnFalseMs` (default `0`)
|
|
211
|
+
- `falseResultTokenWaitMs` (default `900`)
|
|
286
212
|
|
|
287
|
-
|
|
288
|
-
- If jQuery is not already available, the package loads:
|
|
289
|
-
- `https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js`
|
|
290
|
-
- The package also loads:
|
|
291
|
-
- `https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js`
|
|
292
|
-
- `https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js`
|
|
293
|
-
- jQuery and the captcha bootstrap process may create script elements dynamically (including via HTML strings / DOM fragments).
|
|
294
|
-
- When `cspNonce` is provided, dynamically inserted `<script>` elements are assigned that nonce (including scripts inserted indirectly through DOM manipulation).
|
|
295
|
-
- The plugin includes a built-in guard that blocks vendor synthetic clicks on `.CaptchaSubmit` and suppresses rapid duplicate user clicks.
|
|
296
|
-
- No application code changes are required for this guard.
|
|
297
|
-
- This is required for compatibility with strict nonce-based CSP policies.
|
|
298
|
-
- If a valid CSP nonce is required but not passed, browsers will block those script loads and the captcha will fail to initialize.
|
|
299
|
-
- If your app already loads jQuery, set `loadJQuery: false`.
|
|
300
|
-
- If your app loads jQuery from another CDN, allow that host in `script-src` and `script-src-elem`.
|
|
213
|
+
Default behavior is tuned to avoid requiring a second user click when token arrives slightly after first response.
|
|
301
214
|
|
|
302
215
|
## Quick troubleshooting
|
|
303
216
|
|
|
304
217
|
- Captcha not visible:
|
|
305
|
-
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
218
|
+
- Confirm component is rendered and not hidden.
|
|
219
|
+
- Confirm submit button has `class="CaptchaSubmit"`.
|
|
220
|
+
- For function API, confirm `<div class="SiaraShield"></div>` exists.
|
|
308
221
|
- `CheckCaptcha` not available:
|
|
309
|
-
- Ensure initialization completed
|
|
310
|
-
- Ensure CSP allows
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
|
|
314
|
-
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
-
|
|
322
|
-
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
- Captcha check runs before API call.
|
|
326
|
-
|
|
327
|
-
## Build and pack (library maintainers)
|
|
222
|
+
- Ensure initialization completed.
|
|
223
|
+
- Ensure CSP allows required hosts and nonce.
|
|
224
|
+
- Token not available immediately:
|
|
225
|
+
- Use async check methods (`checkCaptchaAsync` / `checkSiaraShieldCaptchaAsync`).
|
|
226
|
+
- CSP errors:
|
|
227
|
+
- Confirm same server-generated nonce in header, script tags, and `cspNonce`.
|
|
228
|
+
|
|
229
|
+
## Final checklist
|
|
230
|
+
|
|
231
|
+
- Public key in frontend, private key only in backend.
|
|
232
|
+
- Submit button contains `CaptchaSubmit`.
|
|
233
|
+
- Captcha check runs before submit API call.
|
|
234
|
+
- Only one integration style is used per page.
|
|
235
|
+
- CSP nonce is wired correctly for strict CSP deployments.
|
|
236
|
+
|
|
237
|
+
## Build and pack (maintainers)
|
|
328
238
|
|
|
329
239
|
```bash
|
|
330
240
|
npm run build:lib
|
|
@@ -185,7 +185,8 @@ export function prepareScriptNonce(documentRef, explicitNonce) {
|
|
|
185
185
|
return resolvedNonce;
|
|
186
186
|
}
|
|
187
187
|
export function loadScript(documentRef, src, options) {
|
|
188
|
-
|
|
188
|
+
// CSP nonce propagation is intentionally disabled in plugin runtime path for compatibility testing.
|
|
189
|
+
const nonce = normalizeNonce(options?.nonce);
|
|
189
190
|
const statusBySrc = getStatusBySrc(documentRef);
|
|
190
191
|
const pendingBySrc = getPendingBySrc(documentRef);
|
|
191
192
|
const existing = documentRef.querySelector(`script[src="${src}"]`);
|
|
@@ -222,4 +223,4 @@ export function loadScript(documentRef, src, options) {
|
|
|
222
223
|
pendingBySrc.set(src, pending);
|
|
223
224
|
return pending;
|
|
224
225
|
}
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBdUMsQ0FBQztBQUNyRixNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUF3QyxDQUFDO0FBQ3ZGLE1BQU0sOEJBQThCLEdBQUcsd0NBQXdDLENBQUM7QUFFaEYsU0FBUyxjQUFjLENBQUMsV0FBcUI7SUFDM0MsSUFBSSxXQUFXLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDOUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFdBQXFCO0lBQzVDLElBQUksWUFBWSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ2hELDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUVuQixDQUFDO0lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7UUFD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RyxDQUFDLENBQUM7WUFDekIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxnREFBZ0QsQ0FBQyxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDO1FBQ0YsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBTY3JpcHRTdGF0dXMgPSAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0TG9hZE9wdGlvbnMge1xuICBub25jZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUge1xuICBub25jZUJ5RG9jdW1lbnQ6IFdlYWtNYXA8RG9jdW1lbnQsIHN0cmluZz47XG4gIG9ic2VydmVyQnlEb2N1bWVudDogV2Vha01hcDxEb2N1bWVudCwgTXV0YXRpb25PYnNlcnZlcj47XG4gIGlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50OiBXZWFrTWFwPERvY3VtZW50LCBTZXQ8c3RyaW5nPj47XG4gIHBhdGNoZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IFNDUklQVF9TVEFUVVNfQllfRE9DVU1FTlQgPSBuZXcgV2Vha01hcDxEb2N1bWVudCwgTWFwPHN0cmluZywgU2NyaXB0U3RhdHVzPj4oKTtcbmNvbnN0IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+PigpO1xuY29uc3QgRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGREeW5hbWljU2NyaXB0Tm9uY2VTdGF0ZV9fJztcblxuZnVuY3Rpb24gZ2V0U3RhdHVzQnlTcmMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogTWFwPHN0cmluZywgU2NyaXB0U3RhdHVzPiB7XG4gIGxldCBzdGF0dXNCeVNyYyA9IFNDUklQVF9TVEFUVVNfQllfRE9DVU1FTlQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgaWYgKCFzdGF0dXNCeVNyYykge1xuICAgIHN0YXR1c0J5U3JjID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4oKTtcbiAgICBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5ULnNldChkb2N1bWVudFJlZiwgc3RhdHVzQnlTcmMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXR1c0J5U3JjO1xufVxuXG5mdW5jdGlvbiBnZXRQZW5kaW5nQnlTcmMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgcGVuZGluZ0J5U3JjID0gU0NSSVBUX1BFTkRJTkdfQllfRE9DVU1FTlQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgaWYgKCFwZW5kaW5nQnlTcmMpIHtcbiAgICBwZW5kaW5nQnlTcmMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcbiAgICBTQ1JJUFRfUEVORElOR19CWV9ET0NVTUVOVC5zZXQoZG9jdW1lbnRSZWYsIHBlbmRpbmdCeVNyYyk7XG4gIH1cblxuICByZXR1cm4gcGVuZGluZ0J5U3JjO1xufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk6IER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0/OiBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZXSkge1xuICAgIGdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0gPSB7XG4gICAgICBub25jZUJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+KCksXG4gICAgICBvYnNlcnZlckJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBNdXRhdGlvbk9ic2VydmVyPigpLFxuICAgICAgaW5saW5lQ2FwdGNoYVNjcmlwdEJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBTZXQ8c3RyaW5nPj4oKSxcbiAgICAgIHBhdGNoZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU3RhdGVbRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZXTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTm9uY2Uobm9uY2U/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IG5vbmNlPy50cmltKCk7XG4gIHJldHVybiB0cmltbWVkID8gdHJpbW1lZCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNTY3JpcHRFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxTY3JpcHRFbGVtZW50IHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2NyaXB0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2NyaXB0Tm9uY2Uoc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcbiAgaWYgKCFyZXNvbHZlZE5vbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnbm9uY2UnLCByZXNvbHZlZE5vbmNlKTtcbiAgc2NyaXB0Lm5vbmNlID0gcmVzb2x2ZWROb25jZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlUcmFja2VkTm9uY2Uobm9kZTogTm9kZSk6IHZvaWQge1xuICBpZiAoIWlzU2NyaXB0RWxlbWVudChub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xuICBpZiAoIWRvY3VtZW50UmVmKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm9uY2UgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCkubm9uY2VCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGFwcGx5U2NyaXB0Tm9uY2Uobm9kZSwgbm9uY2UpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VkSW5saW5lQ2FwdGNoYVNjcmlwdHMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBsZXQgdHJhY2tlZFNjcmlwdHMgPSBwYXRjaFN0YXRlLmlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGlmICghdHJhY2tlZFNjcmlwdHMpIHtcbiAgICB0cmFja2VkU2NyaXB0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHBhdGNoU3RhdGUuaW5saW5lQ2FwdGNoYVNjcmlwdEJ5RG9jdW1lbnQuc2V0KGRvY3VtZW50UmVmLCB0cmFja2VkU2NyaXB0cyk7XG4gIH1cblxuICByZXR1cm4gdHJhY2tlZFNjcmlwdHM7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFNraXBEdXBsaWNhdGVJbmxpbmVDYXB0Y2hhU2NyaXB0KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgaWYgKCFpc1NjcmlwdEVsZW1lbnQobm9kZSkgfHwgQm9vbGVhbihub2RlLnNyYykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzY3JpcHRCb2R5ID0gKG5vZGUudGV4dENvbnRlbnQgPz8gJycpLnRyaW0oKTtcbiAgaWYgKCFzY3JpcHRCb2R5IHx8ICFzY3JpcHRCb2R5LmluY2x1ZGVzKCdjdXJyZW50TGFuZ0NvZGUnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xuICBpZiAoIWRvY3VtZW50UmVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdHJhY2tlZFNjcmlwdHMgPSBnZXRUcmFja2VkSW5saW5lQ2FwdGNoYVNjcmlwdHMoZG9jdW1lbnRSZWYpO1xuICBpZiAodHJhY2tlZFNjcmlwdHMuaGFzKHNjcmlwdEJvZHkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cmFja2VkU2NyaXB0cy5hZGQoc2NyaXB0Qm9keSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd2Fsa0FuZEFwcGx5Tm9uY2Uocm9vdDogTm9kZSwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFub25jZSkgcmV0dXJuO1xuXG4gIC8vIEZhc3QgcGF0aDogcm9vdCBpdHNlbGYgaXMgYSBzY3JpcHQuXG4gIGlmIChpc1NjcmlwdEVsZW1lbnQocm9vdCkpIHtcbiAgICBhcHBseVNjcmlwdE5vbmNlKHJvb3QsIG5vbmNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDb21tb24gcGF0aCBmb3IgalF1ZXJ5OiBhcHBlbmQgRG9jdW1lbnRGcmFnbWVudCBjb250YWluaW5nIHNjcmlwdHMgY3JlYXRlZCB2aWEgSFRNTCBwYXJzaW5nLlxuICBpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBjb25zdCBzY3JpcHRzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NjcmlwdCcpID8/IFtdO1xuICAgIGZvciAoY29uc3Qgc2NyaXB0IG9mIHNjcmlwdHMpIHtcbiAgICAgIGFwcGx5U2NyaXB0Tm9uY2Uoc2NyaXB0IGFzIEhUTUxTY3JpcHRFbGVtZW50LCBub25jZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZjogRG9jdW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LmdldChkb2N1bWVudFJlZikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBwYXRjaFN0YXRlLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICAgIGlmICghbm9uY2UpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZWNvcmQuYWRkZWROb2Rlcykge1xuICAgICAgICB3YWxrQW5kQXBwbHlOb25jZShub2RlLCBub25jZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBPYnNlcnZlIHRoZSBmdWxsIGRvY3VtZW50IGJlY2F1c2Ugc2NyaXB0cyBjYW4gYmUgaW5qZWN0ZWQgaW50byBib2R5L2hlYWQgYnkgdmVuZG9yL2pRdWVyeS5cbiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50UmVmLmRvY3VtZW50RWxlbWVudCA/PyBkb2N1bWVudFJlZjtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgcGF0Y2hTdGF0ZS5vYnNlcnZlckJ5RG9jdW1lbnQuc2V0KGRvY3VtZW50UmVmLCBvYnNlcnZlcik7XG59XG5cbmZ1bmN0aW9uIHRlYXJkb3duTm9uY2VNdXRhdGlvbk9ic2VydmVyKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBjb25zdCBvYnNlcnZlciA9IHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGlmICghb2JzZXJ2ZXIpIHJldHVybjtcbiAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5kZWxldGUoZG9jdW1lbnRSZWYpO1xufVxuXG5mdW5jdGlvbiBwYXRjaER5bmFtaWNTY3JpcHRJbnNlcnRpb24oKTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG4gIGlmIChwYXRjaFN0YXRlLnBhdGNoZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbEFwcGVuZENoaWxkID0gTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7XG4gIGNvbnN0IG9yaWdpbmFsSW5zZXJ0QmVmb3JlID0gTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO1xuICBjb25zdCBvcmlnaW5hbFJlcGxhY2VDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtcblxuICBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTm9kZT4obm9kZTogVCk6IFQge1xuICAgIC8vIFZlbmRvciBjYXB0Y2hhIGluamVjdHMgYW4gaW5saW5lIHNuaXBwZXQgd2l0aCBgY3VycmVudExhbmdDb2RlYCB0aGF0IGNyYXNoZXMgd2hlbiBhcHBlbmRlZCB0d2ljZS5cbiAgICBpZiAoc2hvdWxkU2tpcER1cGxpY2F0ZUlubGluZUNhcHRjaGFTY3JpcHQobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBseVRyYWNrZWROb25jZShub2RlKTtcbiAgICByZXR1cm4gb3JpZ2luYWxBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIG5vZGUpIGFzIFQ7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBULCBjaGlsZDogTm9kZSB8IG51bGwpOiBUIHtcbiAgICBpZiAoc2hvdWxkU2tpcER1cGxpY2F0ZUlubGluZUNhcHRjaGFTY3JpcHQobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBseVRyYWNrZWROb25jZShub2RlKTtcbiAgICByZXR1cm4gb3JpZ2luYWxJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBub2RlLCBjaGlsZCkgYXMgVDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGNoaWxkOiBUKTogVCB7XG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZUNoaWxkLmNhbGwodGhpcywgbm9kZSwgY2hpbGQpIGFzIFQ7XG4gIH07XG5cbiAgcGF0Y2hTdGF0ZS5wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDc3BOb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQsIGV4cGxpY2l0Tm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZEV4cGxpY2l0Tm9uY2UgPSBub3JtYWxpemVOb25jZShleHBsaWNpdE5vbmNlKTtcbiAgaWYgKHJlc29sdmVkRXhwbGljaXROb25jZSkge1xuICAgIHJldHVybiByZXNvbHZlZEV4cGxpY2l0Tm9uY2U7XG4gIH1cblxuICBjb25zdCBzY3JpcHRXaXRoTm9uY2UgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pignc2NyaXB0W25vbmNlXScpO1xuICBjb25zdCBub25jZUZyb21TY3JpcHQgPSBub3JtYWxpemVOb25jZShzY3JpcHRXaXRoTm9uY2U/LmdldEF0dHJpYnV0ZSgnbm9uY2UnKSA/PyBzY3JpcHRXaXRoTm9uY2U/Lm5vbmNlKTtcbiAgaWYgKG5vbmNlRnJvbVNjcmlwdCkge1xuICAgIHJldHVybiBub25jZUZyb21TY3JpcHQ7XG4gIH1cblxuICBjb25zdCBub25jZU1ldGEgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxNZXRhRWxlbWVudD4oJ21ldGFbbmFtZT1cImNzcC1ub25jZVwiXScpO1xuICByZXR1cm4gbm9ybWFsaXplTm9uY2Uobm9uY2VNZXRhPy5jb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQsIGV4cGxpY2l0Tm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZE5vbmNlID0gcmVzb2x2ZUNzcE5vbmNlKGRvY3VtZW50UmVmLCBleHBsaWNpdE5vbmNlKTtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcblxuICBpZiAocmVzb2x2ZWROb25jZSkge1xuICAgIC8vIERPTSBwYXRjaGluZyBpcyBvbmx5IG5lZWRlZCB3aGVuIGEgQ1NQIG5vbmNlIG11c3QgYmUgcHJvcGFnYXRlZC5cbiAgICBwYXRjaER5bmFtaWNTY3JpcHRJbnNlcnRpb24oKTtcbiAgICBwYXRjaFN0YXRlLm5vbmNlQnlEb2N1bWVudC5zZXQoZG9jdW1lbnRSZWYsIHJlc29sdmVkTm9uY2UpO1xuICAgIGVuc3VyZU5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZik7XG4gIH0gZWxzZSB7XG4gICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZGVsZXRlKGRvY3VtZW50UmVmKTtcbiAgICB0ZWFyZG93bk5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZik7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWROb25jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTY3JpcHQoZG9jdW1lbnRSZWY6IERvY3VtZW50LCBzcmM6IHN0cmluZywgb3B0aW9ucz86IFNjcmlwdExvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5vbmNlID0gcHJlcGFyZVNjcmlwdE5vbmNlKGRvY3VtZW50UmVmLCBvcHRpb25zPy5ub25jZSk7XG4gIGNvbnN0IHN0YXR1c0J5U3JjID0gZ2V0U3RhdHVzQnlTcmMoZG9jdW1lbnRSZWYpO1xuICBjb25zdCBwZW5kaW5nQnlTcmMgPSBnZXRQZW5kaW5nQnlTcmMoZG9jdW1lbnRSZWYpO1xuICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50UmVmLnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdYCk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgYXBwbHlTY3JpcHROb25jZShleGlzdGluZywgbm9uY2UpO1xuICAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c0J5U3JjLmdldChzcmMpO1xuICAgIGlmIChzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdCeVNyYy5nZXQoc3JjKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRpbmcnKTtcblxuICBjb25zdCBwZW5kaW5nID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdCwgbm9uY2UpO1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBzdGF0dXNCeVNyYy5zZXQoc3JjLCAnbG9hZGVkJyk7XG4gICAgICBwZW5kaW5nQnlTcmMuZGVsZXRlKHNyYyk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgIHN0YXR1c0J5U3JjLnNldChzcmMsICdlcnJvcicpO1xuICAgICAgcGVuZGluZ0J5U3JjLmRlbGV0ZShzcmMpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY30uIENoZWNrIENTUCBhbGxvd2xpc3QgYW5kIG5vbmNlIGNvbmZpZ3VyYXRpb24uYCkpO1xuICAgIH07XG4gICAgZG9jdW1lbnRSZWYuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9KTtcblxuICBwZW5kaW5nQnlTcmMuc2V0KHNyYywgcGVuZGluZyk7XG4gIHJldHVybiBwZW5kaW5nO1xufVxuIl19
|
|
226
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBdUMsQ0FBQztBQUNyRixNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUF3QyxDQUFDO0FBQ3ZGLE1BQU0sOEJBQThCLEdBQUcsd0NBQXdDLENBQUM7QUFFaEYsU0FBUyxjQUFjLENBQUMsV0FBcUI7SUFDM0MsSUFBSSxXQUFXLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDOUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFdBQXFCO0lBQzVDLElBQUksWUFBWSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ2hELDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUVuQixDQUFDO0lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7UUFD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QUcsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7WUFDcEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDOUIsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsMEJBQTBCLEdBQUcsZ0RBQWdELENBQUMsQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQztRQUNGLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBRUgsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0IsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgU2NyaXB0U3RhdHVzID0gJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdExvYWRPcHRpb25zIHtcbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlIHtcbiAgbm9uY2VCeURvY3VtZW50OiBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+O1xuICBvYnNlcnZlckJ5RG9jdW1lbnQ6IFdlYWtNYXA8RG9jdW1lbnQsIE11dGF0aW9uT2JzZXJ2ZXI+O1xuICBpbmxpbmVDYXB0Y2hhU2NyaXB0QnlEb2N1bWVudDogV2Vha01hcDxEb2N1bWVudCwgU2V0PHN0cmluZz4+O1xuICBwYXRjaGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4+KCk7XG5jb25zdCBTQ1JJUFRfUEVORElOR19CWV9ET0NVTUVOVCA9IG5ldyBXZWFrTWFwPERvY3VtZW50LCBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+Pj4oKTtcbmNvbnN0IERZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWSA9ICdfX3NpYXJhU2hpZWxkRHluYW1pY1NjcmlwdE5vbmNlU3RhdGVfXyc7XG5cbmZ1bmN0aW9uIGdldFN0YXR1c0J5U3JjKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4ge1xuICBsZXQgc3RhdHVzQnlTcmMgPSBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5ULmdldChkb2N1bWVudFJlZik7XG4gIGlmICghc3RhdHVzQnlTcmMpIHtcbiAgICBzdGF0dXNCeVNyYyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRTdGF0dXM+KCk7XG4gICAgU0NSSVBUX1NUQVRVU19CWV9ET0NVTUVOVC5zZXQoZG9jdW1lbnRSZWYsIHN0YXR1c0J5U3JjKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0dXNCeVNyYztcbn1cblxuZnVuY3Rpb24gZ2V0UGVuZGluZ0J5U3JjKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IHBlbmRpbmdCeVNyYyA9IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5ULmdldChkb2N1bWVudFJlZik7XG4gIGlmICghcGVuZGluZ0J5U3JjKSB7XG4gICAgcGVuZGluZ0J5U3JjID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG4gICAgU0NSSVBUX1BFTkRJTkdfQllfRE9DVU1FTlQuc2V0KGRvY3VtZW50UmVmLCBwZW5kaW5nQnlTcmMpO1xuICB9XG5cbiAgcmV0dXJuIHBlbmRpbmdCeVNyYztcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpOiBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGUgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldPzogRHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZTtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0pIHtcbiAgICBnbG9iYWxTdGF0ZVtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldID0ge1xuICAgICAgbm9uY2VCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgc3RyaW5nPigpLFxuICAgICAgb2JzZXJ2ZXJCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgTXV0YXRpb25PYnNlcnZlcj4oKSxcbiAgICAgIGlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgU2V0PHN0cmluZz4+KCksXG4gICAgICBwYXRjaGVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5vbmNlKG5vbmNlPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBub25jZT8udHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzU2NyaXB0RWxlbWVudChub2RlOiBOb2RlKTogbm9kZSBpcyBIVE1MU2NyaXB0RWxlbWVudCB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHJlc29sdmVkTm9uY2UgPSBub3JtYWxpemVOb25jZShub25jZSk7XG4gIGlmICghcmVzb2x2ZWROb25jZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgcmVzb2x2ZWROb25jZSk7XG4gIHNjcmlwdC5ub25jZSA9IHJlc29sdmVkTm9uY2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhY2tlZE5vbmNlKG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgaWYgKCFpc1NjcmlwdEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBkb2N1bWVudFJlZiA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgaWYgKCFkb2N1bWVudFJlZikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vbmNlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBhcHBseVNjcmlwdE5vbmNlKG5vZGUsIG5vbmNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlZElubGluZUNhcHRjaGFTY3JpcHRzKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgbGV0IHRyYWNrZWRTY3JpcHRzID0gcGF0Y2hTdGF0ZS5pbmxpbmVDYXB0Y2hhU2NyaXB0QnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBpZiAoIXRyYWNrZWRTY3JpcHRzKSB7XG4gICAgdHJhY2tlZFNjcmlwdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwYXRjaFN0YXRlLmlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50LnNldChkb2N1bWVudFJlZiwgdHJhY2tlZFNjcmlwdHMpO1xuICB9XG5cbiAgcmV0dXJuIHRyYWNrZWRTY3JpcHRzO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIGlmICghaXNTY3JpcHRFbGVtZW50KG5vZGUpIHx8IEJvb2xlYW4obm9kZS5zcmMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0Qm9keSA9IChub2RlLnRleHRDb250ZW50ID8/ICcnKS50cmltKCk7XG4gIGlmICghc2NyaXB0Qm9keSB8fCAhc2NyaXB0Qm9keS5pbmNsdWRlcygnY3VycmVudExhbmdDb2RlJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudFJlZiA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgaWYgKCFkb2N1bWVudFJlZikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHRyYWNrZWRTY3JpcHRzID0gZ2V0VHJhY2tlZElubGluZUNhcHRjaGFTY3JpcHRzKGRvY3VtZW50UmVmKTtcbiAgaWYgKHRyYWNrZWRTY3JpcHRzLmhhcyhzY3JpcHRCb2R5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJhY2tlZFNjcmlwdHMuYWRkKHNjcmlwdEJvZHkpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHdhbGtBbmRBcHBseU5vbmNlKHJvb3Q6IE5vZGUsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghbm9uY2UpIHJldHVybjtcblxuICAvLyBGYXN0IHBhdGg6IHJvb3QgaXRzZWxmIGlzIGEgc2NyaXB0LlxuICBpZiAoaXNTY3JpcHRFbGVtZW50KHJvb3QpKSB7XG4gICAgYXBwbHlTY3JpcHROb25jZShyb290LCBub25jZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ29tbW9uIHBhdGggZm9yIGpRdWVyeTogYXBwZW5kIERvY3VtZW50RnJhZ21lbnQgY29udGFpbmluZyBzY3JpcHRzIGNyZWF0ZWQgdmlhIEhUTUwgcGFyc2luZy5cbiAgaWYgKHJvb3QgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgY29uc3Qgc2NyaXB0cyA9IHJvb3QucXVlcnlTZWxlY3RvckFsbD8uKCdzY3JpcHQnKSA/PyBbXTtcbiAgICBmb3IgKGNvbnN0IHNjcmlwdCBvZiBzY3JpcHRzKSB7XG4gICAgICBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdCBhcyBIVE1MU2NyaXB0RWxlbWVudCwgbm9uY2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVOb25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG4gIGlmIChwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuICAgIGNvbnN0IG5vbmNlID0gcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgICBpZiAoIW5vbmNlKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcmVjb3JkLmFkZGVkTm9kZXMpIHtcbiAgICAgICAgd2Fsa0FuZEFwcGx5Tm9uY2Uobm9kZSwgbm9uY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gT2JzZXJ2ZSB0aGUgZnVsbCBkb2N1bWVudCBiZWNhdXNlIHNjcmlwdHMgY2FuIGJlIGluamVjdGVkIGludG8gYm9keS9oZWFkIGJ5IHZlbmRvci9qUXVlcnkuXG4gIGNvbnN0IHJvb3QgPSBkb2N1bWVudFJlZi5kb2N1bWVudEVsZW1lbnQgPz8gZG9jdW1lbnRSZWY7XG4gIG9ic2VydmVyLm9ic2VydmUocm9vdCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LnNldChkb2N1bWVudFJlZiwgb2JzZXJ2ZXIpO1xufVxuXG5mdW5jdGlvbiB0ZWFyZG93bk5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZjogRG9jdW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBpZiAoIW9ic2VydmVyKSByZXR1cm47XG4gIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgcGF0Y2hTdGF0ZS5vYnNlcnZlckJ5RG9jdW1lbnQuZGVsZXRlKGRvY3VtZW50UmVmKTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBpZiAocGF0Y2hTdGF0ZS5wYXRjaGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xuICBjb25zdCBvcmlnaW5hbEluc2VydEJlZm9yZSA9IE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZTtcbiAgY29uc3Qgb3JpZ2luYWxSZXBsYWNlQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7XG5cbiAgTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IFQpOiBUIHtcbiAgICAvLyBWZW5kb3IgY2FwdGNoYSBpbmplY3RzIGFuIGlubGluZSBzbmlwcGV0IHdpdGggYGN1cnJlbnRMYW5nQ29kZWAgdGhhdCBjcmFzaGVzIHdoZW4gYXBwZW5kZWQgdHdpY2UuXG4gICAgaWYgKHNob3VsZFNraXBEdXBsaWNhdGVJbmxpbmVDYXB0Y2hhU2NyaXB0KG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsQXBwZW5kQ2hpbGQuY2FsbCh0aGlzLCBub2RlKSBhcyBUO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTm9kZT4obm9kZTogVCwgY2hpbGQ6IE5vZGUgfCBudWxsKTogVCB7XG4gICAgaWYgKHNob3VsZFNraXBEdXBsaWNhdGVJbmxpbmVDYXB0Y2hhU2NyaXB0KG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsSW5zZXJ0QmVmb3JlLmNhbGwodGhpcywgbm9kZSwgY2hpbGQpIGFzIFQ7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBOb2RlLCBjaGlsZDogVCk6IFQge1xuICAgIGFwcGx5VHJhY2tlZE5vbmNlKG5vZGUpO1xuICAgIHJldHVybiBvcmlnaW5hbFJlcGxhY2VDaGlsZC5jYWxsKHRoaXMsIG5vZGUsIGNoaWxkKSBhcyBUO1xuICB9O1xuXG4gIHBhdGNoU3RhdGUucGF0Y2hlZCA9IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ3NwTm9uY2UoZG9jdW1lbnRSZWY6IERvY3VtZW50LCBleHBsaWNpdE5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWRFeHBsaWNpdE5vbmNlID0gbm9ybWFsaXplTm9uY2UoZXhwbGljaXROb25jZSk7XG4gIGlmIChyZXNvbHZlZEV4cGxpY2l0Tm9uY2UpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRFeHBsaWNpdE5vbmNlO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0V2l0aE5vbmNlID0gZG9jdW1lbnRSZWYucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oJ3NjcmlwdFtub25jZV0nKTtcbiAgY29uc3Qgbm9uY2VGcm9tU2NyaXB0ID0gbm9ybWFsaXplTm9uY2Uoc2NyaXB0V2l0aE5vbmNlPy5nZXRBdHRyaWJ1dGUoJ25vbmNlJykgPz8gc2NyaXB0V2l0aE5vbmNlPy5ub25jZSk7XG4gIGlmIChub25jZUZyb21TY3JpcHQpIHtcbiAgICByZXR1cm4gbm9uY2VGcm9tU2NyaXB0O1xuICB9XG5cbiAgY29uc3Qgbm9uY2VNZXRhID0gZG9jdW1lbnRSZWYucXVlcnlTZWxlY3RvcjxIVE1MTWV0YUVsZW1lbnQ+KCdtZXRhW25hbWU9XCJjc3Atbm9uY2VcIl0nKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZU5vbmNlKG5vbmNlTWV0YT8uY29udGVudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlU2NyaXB0Tm9uY2UoZG9jdW1lbnRSZWY6IERvY3VtZW50LCBleHBsaWNpdE5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IHJlc29sdmVDc3BOb25jZShkb2N1bWVudFJlZiwgZXhwbGljaXROb25jZSk7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG5cbiAgaWYgKHJlc29sdmVkTm9uY2UpIHtcbiAgICAvLyBET00gcGF0Y2hpbmcgaXMgb25seSBuZWVkZWQgd2hlbiBhIENTUCBub25jZSBtdXN0IGJlIHByb3BhZ2F0ZWQuXG4gICAgcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk7XG4gICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuc2V0KGRvY3VtZW50UmVmLCByZXNvbHZlZE5vbmNlKTtcbiAgICBlbnN1cmVOb25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWYpO1xuICB9IGVsc2Uge1xuICAgIHBhdGNoU3RhdGUubm9uY2VCeURvY3VtZW50LmRlbGV0ZShkb2N1bWVudFJlZik7XG4gICAgdGVhcmRvd25Ob25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWYpO1xuICB9XG5cbiAgcmV0dXJuIHJlc29sdmVkTm9uY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2NyaXB0KGRvY3VtZW50UmVmOiBEb2N1bWVudCwgc3JjOiBzdHJpbmcsIG9wdGlvbnM/OiBTY3JpcHRMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBDU1Agbm9uY2UgcHJvcGFnYXRpb24gaXMgaW50ZW50aW9uYWxseSBkaXNhYmxlZCBpbiBwbHVnaW4gcnVudGltZSBwYXRoIGZvciBjb21wYXRpYmlsaXR5IHRlc3RpbmcuXG4gIGNvbnN0IG5vbmNlID0gbm9ybWFsaXplTm9uY2Uob3B0aW9ucz8ubm9uY2UpO1xuICBjb25zdCBzdGF0dXNCeVNyYyA9IGdldFN0YXR1c0J5U3JjKGRvY3VtZW50UmVmKTtcbiAgY29uc3QgcGVuZGluZ0J5U3JjID0gZ2V0UGVuZGluZ0J5U3JjKGRvY3VtZW50UmVmKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGFwcGx5U2NyaXB0Tm9uY2UoZXhpc3RpbmcsIG5vbmNlKTtcbiAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNCeVNyYy5nZXQoc3JjKTtcbiAgICBpZiAoc3RhdHVzID09PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nQnlTcmMuZ2V0KHNyYyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHN0YXR1c0J5U3JjLnNldChzcmMsICdsb2FkaW5nJyk7XG5cbiAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudFJlZi5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgYXBwbHlTY3JpcHROb25jZShzY3JpcHQsIG5vbmNlKTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRlZCcpO1xuICAgICAgcGVuZGluZ0J5U3JjLmRlbGV0ZShzcmMpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBzdGF0dXNCeVNyYy5zZXQoc3JjLCAnZXJyb3InKTtcbiAgICAgIHBlbmRpbmdCeVNyYy5kZWxldGUoc3JjKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHNjcmlwdDogJHtzcmN9LiBDaGVjayBDU1AgYWxsb3dsaXN0IGFuZCBub25jZSBjb25maWd1cmF0aW9uLmApKTtcbiAgICB9O1xuICAgIGRvY3VtZW50UmVmLmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfSk7XG5cbiAgcGVuZGluZ0J5U3JjLnNldChzcmMsIHBlbmRpbmcpO1xuICByZXR1cm4gcGVuZGluZztcbn1cbiJdfQ==
|