@citolab/qti-components 6.9.1-beta.8 → 6.9.1-beta.80

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,333 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/lib/qti-loader/index.ts
20
+ var qti_loader_exports = {};
21
+ __export(qti_loader_exports, {
22
+ getItemByUri: () => getItemByUri,
23
+ getManifestInfo: () => getManifestInfo
24
+ });
25
+ module.exports = __toCommonJS(qti_loader_exports);
26
+
27
+ // src/lib/qti-transformers/qti-transformers.ts
28
+ var xml = String.raw;
29
+ var xmlToHTML = xml`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
30
+ <xsl:output method="html" version="5.0" encoding="UTF-8" indent="yes" />
31
+ <xsl:template match="@*|node()">
32
+ <xsl:copy>
33
+ <xsl:apply-templates select="@*|node()"/>
34
+ </xsl:copy>
35
+ </xsl:template>
36
+
37
+ <!-- remove existing namespaces -->
38
+ <xsl:template match="*">
39
+ <!-- remove element prefix -->
40
+ <xsl:element name="{local-name()}">
41
+ <!-- process attributes -->
42
+ <xsl:for-each select="@*">
43
+ <!-- remove attribute prefix -->
44
+ <xsl:attribute name="{local-name()}">
45
+ <xsl:value-of select="."/>
46
+ </xsl:attribute>
47
+ </xsl:for-each>
48
+ <xsl:apply-templates/>
49
+ </xsl:element>
50
+ </xsl:template>
51
+ </xsl:stylesheet>`;
52
+ function extendElementName(xmlFragment, tagName, extension) {
53
+ xmlFragment.querySelectorAll(tagName).forEach((element) => {
54
+ const newTagName = `${tagName}-${extension}`;
55
+ const newElement = createElementWithNewTagName(element, newTagName);
56
+ element.replaceWith(newElement);
57
+ });
58
+ }
59
+ function extendElementsWithClass(xmlFragment, classNamePattern) {
60
+ xmlFragment.querySelectorAll("*").forEach((element) => {
61
+ const classList = element.classList;
62
+ if (classList) {
63
+ classList.forEach((className) => {
64
+ if (className.startsWith(`${classNamePattern}:`)) {
65
+ const suffix = className.slice(`${classNamePattern}:`.length);
66
+ const newTagName = `${element.nodeName}-${suffix}`;
67
+ const newElement = createElementWithNewTagName(element, newTagName);
68
+ element.replaceWith(newElement);
69
+ }
70
+ });
71
+ }
72
+ });
73
+ }
74
+ function createElementWithNewTagName(element, newTagName) {
75
+ const newElement = document.createElement(newTagName);
76
+ for (const attr of element.attributes) {
77
+ newElement.setAttribute(attr.name, attr.value);
78
+ }
79
+ while (element.firstChild) {
80
+ newElement.appendChild(element.firstChild);
81
+ }
82
+ return newElement;
83
+ }
84
+ function itemsFromTest(xmlFragment) {
85
+ const items = [];
86
+ xmlFragment.querySelectorAll("qti-assessment-item-ref").forEach((el) => {
87
+ const identifier = el.getAttribute("identifier");
88
+ const href = el.getAttribute("href");
89
+ const category = el.getAttribute("category");
90
+ items.push({ identifier, href, category });
91
+ });
92
+ return items;
93
+ }
94
+ var currentRequest = null;
95
+ function loadXML(url, cancelPreviousRequest = false) {
96
+ if (cancelPreviousRequest && currentRequest !== null) {
97
+ currentRequest.abort();
98
+ }
99
+ return new Promise((resolve, reject) => {
100
+ const xhr = new XMLHttpRequest();
101
+ currentRequest = xhr;
102
+ xhr.open("GET", url, true);
103
+ xhr.responseType = "document";
104
+ xhr.onload = () => {
105
+ if (xhr.status >= 200 && xhr.status < 300) {
106
+ resolve(xhr.responseXML);
107
+ } else {
108
+ reject(xhr.statusText);
109
+ }
110
+ };
111
+ xhr.onerror = () => {
112
+ reject(xhr.statusText);
113
+ };
114
+ xhr.send();
115
+ });
116
+ }
117
+ function parseXML(xmlDocument) {
118
+ const parser = new DOMParser();
119
+ const xmlFragment = parser.parseFromString(xmlDocument, "text/xml");
120
+ return xmlFragment;
121
+ }
122
+ function toHTML(xmlFragment) {
123
+ const processor = new XSLTProcessor();
124
+ const xsltDocument = new DOMParser().parseFromString(xmlToHTML, "text/xml");
125
+ processor.importStylesheet(xsltDocument);
126
+ const itemHTMLFragment = processor.transformToFragment(xmlFragment, document);
127
+ return itemHTMLFragment;
128
+ }
129
+ function setLocation(xmlFragment, location) {
130
+ if (!location.endsWith("/")) {
131
+ location += "/";
132
+ }
133
+ xmlFragment.querySelectorAll("[src],[href],[primary-path]").forEach((elWithSrc) => {
134
+ var _a;
135
+ let attr = "";
136
+ if (elWithSrc.getAttribute("src")) {
137
+ attr = "src";
138
+ }
139
+ if (elWithSrc.getAttribute("href")) {
140
+ attr = "href";
141
+ }
142
+ if (elWithSrc.getAttribute("primary-path")) {
143
+ attr = "primary-path";
144
+ }
145
+ const attrValue = (_a = elWithSrc.getAttribute(attr)) == null ? void 0 : _a.trim();
146
+ if (!attrValue.startsWith("data:") && !attrValue.startsWith("http")) {
147
+ const newSrcValue = location + encodeURI(attrValue);
148
+ elWithSrc.setAttribute(attr, newSrcValue);
149
+ }
150
+ });
151
+ }
152
+ function convertCDATAtoComment(xmlFragment) {
153
+ const cdataElements = xmlFragment.querySelectorAll('qti-custom-operator[class="js.org"] > qti-base-value');
154
+ cdataElements.forEach((element) => {
155
+ const commentText = document.createComment(element.textContent);
156
+ element.replaceChild(commentText, element.firstChild);
157
+ });
158
+ }
159
+ function stripStyleSheets(xmlFragment) {
160
+ xmlFragment.querySelectorAll("qti-stylesheet").forEach((stylesheet) => stylesheet.remove());
161
+ }
162
+
163
+ // src/lib/qti-transformers/qti-transform-item.ts
164
+ var qtiTransformItem = () => {
165
+ let xmlFragment;
166
+ const api = {
167
+ async load(uri, cancelPreviousRequest = false) {
168
+ return new Promise((resolve, reject) => {
169
+ loadXML(uri, cancelPreviousRequest).then((xml2) => {
170
+ xmlFragment = xml2;
171
+ api.path(uri.substring(0, uri.lastIndexOf("/")));
172
+ return resolve(api);
173
+ });
174
+ });
175
+ },
176
+ parse(xmlString) {
177
+ xmlFragment = parseXML(xmlString);
178
+ return api;
179
+ },
180
+ path: (location) => {
181
+ setLocation(xmlFragment, location);
182
+ return api;
183
+ },
184
+ fn(fn) {
185
+ fn(xmlFragment);
186
+ return api;
187
+ },
188
+ pciHooks(uri) {
189
+ const attributes = ["hook", "module"];
190
+ const documentPath = uri.substring(0, uri.lastIndexOf("/"));
191
+ for (const attribute of attributes) {
192
+ const srcAttributes = xmlFragment.querySelectorAll("[" + attribute + "]");
193
+ srcAttributes.forEach((node) => {
194
+ const srcValue = node.getAttribute(attribute);
195
+ if (!srcValue.startsWith("data:") && !srcValue.startsWith("http")) {
196
+ node.setAttribute("base-url", uri);
197
+ node.setAttribute(
198
+ "module",
199
+ documentPath + "/" + encodeURI(srcValue + (srcValue.endsWith(".js") ? "" : ".js"))
200
+ );
201
+ }
202
+ });
203
+ }
204
+ return api;
205
+ },
206
+ extendElementName: (tagName, extension) => {
207
+ extendElementName(xmlFragment, tagName, extension);
208
+ return api;
209
+ },
210
+ extendElementsWithClass: (param = "extend") => {
211
+ extendElementsWithClass(xmlFragment, param);
212
+ return api;
213
+ },
214
+ customInteraction(baseRef, baseItem) {
215
+ const qtiCustomInteraction = xmlFragment.querySelector("qti-custom-interaction");
216
+ const qtiCustomInteractionObject = qtiCustomInteraction.querySelector("object");
217
+ qtiCustomInteraction.setAttribute("data-base-ref", baseRef);
218
+ qtiCustomInteraction.setAttribute("data-base-item", baseRef + baseItem);
219
+ qtiCustomInteraction.setAttribute("data", qtiCustomInteractionObject.getAttribute("data"));
220
+ qtiCustomInteraction.setAttribute("width", qtiCustomInteractionObject.getAttribute("width"));
221
+ qtiCustomInteraction.setAttribute("height", qtiCustomInteractionObject.getAttribute("height"));
222
+ qtiCustomInteraction.removeChild(qtiCustomInteractionObject);
223
+ return api;
224
+ },
225
+ convertCDATAtoComment() {
226
+ convertCDATAtoComment(xmlFragment);
227
+ return api;
228
+ },
229
+ stripStyleSheets() {
230
+ stripStyleSheets(xmlFragment);
231
+ return api;
232
+ },
233
+ html() {
234
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
235
+ },
236
+ xml() {
237
+ return new XMLSerializer().serializeToString(xmlFragment);
238
+ },
239
+ htmlDoc() {
240
+ return toHTML(xmlFragment);
241
+ },
242
+ xmlDoc() {
243
+ return xmlFragment;
244
+ }
245
+ };
246
+ return api;
247
+ };
248
+
249
+ // src/lib/qti-transformers/qti-transform-manifest.ts
250
+ var qtiTransformManifest = () => {
251
+ let xmlFragment;
252
+ const api = {
253
+ async load(uri) {
254
+ return new Promise((resolve, reject) => {
255
+ loadXML(uri).then((xml2) => {
256
+ xmlFragment = xml2;
257
+ return resolve(api);
258
+ });
259
+ });
260
+ },
261
+ parse(xmlString) {
262
+ xmlFragment = parseXML(xmlString);
263
+ },
264
+ assessmentTest() {
265
+ const el = xmlFragment.querySelector('resource[type="imsqti_test_xmlv3p0"]');
266
+ return { href: el.getAttribute("href"), identifier: el.getAttribute("identifier") };
267
+ }
268
+ };
269
+ return api;
270
+ };
271
+
272
+ // src/lib/qti-transformers/qti-transform-test.ts
273
+ var qtiTransformTest = () => {
274
+ let xmlFragment;
275
+ const api = {
276
+ async load(uri) {
277
+ return new Promise((resolve, reject) => {
278
+ loadXML(uri).then((xml2) => {
279
+ xmlFragment = xml2;
280
+ return resolve(api);
281
+ });
282
+ });
283
+ },
284
+ parse(xmlString) {
285
+ xmlFragment = parseXML(xmlString);
286
+ return api;
287
+ },
288
+ fn(fn) {
289
+ fn(xmlFragment);
290
+ return api;
291
+ },
292
+ items() {
293
+ return itemsFromTest(xmlFragment);
294
+ },
295
+ html() {
296
+ return new XMLSerializer().serializeToString(toHTML(xmlFragment));
297
+ },
298
+ xml() {
299
+ return new XMLSerializer().serializeToString(xmlFragment);
300
+ },
301
+ htmlDoc() {
302
+ return toHTML(xmlFragment);
303
+ },
304
+ xmlDoc() {
305
+ return xmlFragment;
306
+ }
307
+ };
308
+ return api;
309
+ };
310
+
311
+ // src/lib/qti-loader/qti-loader.ts
312
+ var getManifestInfo = async (manifestURL) => {
313
+ const baseURI = manifestURL.substring(0, manifestURL.lastIndexOf("/"));
314
+ const test = await qtiTransformManifest().load(`${manifestURL}`).then((api) => api.assessmentTest());
315
+ const testHTMLDoc = await qtiTransformTest().load(`${baseURI}/${test.href}`).then((api) => api.htmlDoc());
316
+ const items = await qtiTransformTest().load(`${baseURI}/${test.href}`).then((api) => api.items());
317
+ const testURL = `${baseURI}/${test.href}`;
318
+ const testURI = `${baseURI}/${test.href.substring(0, test.href.lastIndexOf("/"))}`;
319
+ return {
320
+ testHTMLDoc,
321
+ testURI,
322
+ testURL,
323
+ items,
324
+ testIdentifier: test.identifier
325
+ };
326
+ };
327
+ var getItemByUri = async (itemUri) => qtiTransformItem().load(itemUri).then((api) => api.htmlDoc().firstElementChild);
328
+ // Annotate the CommonJS export names for ESM import in node:
329
+ 0 && (module.exports = {
330
+ getItemByUri,
331
+ getManifestInfo
332
+ });
333
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2xpYi9xdGktbG9hZGVyL2luZGV4LnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLXRyYW5zZm9ybWVycy9xdGktdHJhbnNmb3JtZXJzLnRzIiwgIi4uLy4uL3NyYy9saWIvcXRpLXRyYW5zZm9ybWVycy9xdGktdHJhbnNmb3JtLWl0ZW0udHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktdHJhbnNmb3JtZXJzL3F0aS10cmFuc2Zvcm0tbWFuaWZlc3QudHMiLCAiLi4vLi4vc3JjL2xpYi9xdGktdHJhbnNmb3JtZXJzL3F0aS10cmFuc2Zvcm0tdGVzdC50cyIsICIuLi8uLi9zcmMvbGliL3F0aS1sb2FkZXIvcXRpLWxvYWRlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSAnLi9xdGktbG9hZGVyJztcbiIsICJjb25zdCB4bWwgPSBTdHJpbmcucmF3O1xuXG4vKiAgIDwhLS0gY29udmVydCBDREFUQSB0byBjb21tZW50cyAtLT5cbiAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cInRleHQoKVtjb250YWlucyguLCAnQ0RBVEEnKV1cIj5cbiAgPHhzbDpjb21tZW50PlxuICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVwiLlwiLz5cbiAgPC94c2w6Y29tbWVudD5cbjwveHNsOnRlbXBsYXRlPlxuKi9cblxuLypcbiAgPCEtLSByZW1vdmUgeG1sIGNvbW1lbnRzIC0tPlxuICA8eHNsOnRlbXBsYXRlIG1hdGNoPVwiY29tbWVudCgpXCIgLz5cbiAgKi9cblxuY29uc3QgeG1sVG9IVE1MID0geG1sYDx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM6eHNsPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXCI+XG48eHNsOm91dHB1dCBtZXRob2Q9XCJodG1sXCIgdmVyc2lvbj1cIjUuMFwiIGVuY29kaW5nPVwiVVRGLThcIiBpbmRlbnQ9XCJ5ZXNcIiAvPlxuICA8eHNsOnRlbXBsYXRlIG1hdGNoPVwiQCp8bm9kZSgpXCI+XG4gICAgPHhzbDpjb3B5PlxuICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PVwiQCp8bm9kZSgpXCIvPlxuICAgIDwveHNsOmNvcHk+XG4gIDwveHNsOnRlbXBsYXRlPlxuXG4gIDwhLS0gcmVtb3ZlIGV4aXN0aW5nIG5hbWVzcGFjZXMgLS0+XG4gIDx4c2w6dGVtcGxhdGUgbWF0Y2g9XCIqXCI+XG4gICAgPCEtLSByZW1vdmUgZWxlbWVudCBwcmVmaXggLS0+XG4gICAgPHhzbDplbGVtZW50IG5hbWU9XCJ7bG9jYWwtbmFtZSgpfVwiPlxuICAgICAgPCEtLSBwcm9jZXNzIGF0dHJpYnV0ZXMgLS0+XG4gICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD1cIkAqXCI+XG4gICAgICAgIDwhLS0gcmVtb3ZlIGF0dHJpYnV0ZSBwcmVmaXggLS0+XG4gICAgICAgIDx4c2w6YXR0cmlidXRlIG5hbWU9XCJ7bG9jYWwtbmFtZSgpfVwiPlxuICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVwiLlwiLz5cbiAgICAgICAgPC94c2w6YXR0cmlidXRlPlxuICAgICAgPC94c2w6Zm9yLWVhY2g+XG4gICAgPHhzbDphcHBseS10ZW1wbGF0ZXMvPlxuICA8L3hzbDplbGVtZW50PlxuPC94c2w6dGVtcGxhdGU+XG48L3hzbDpzdHlsZXNoZWV0PmA7XG5cbi8vIEZ1bmN0aW9uIHRvIGV4dGVuZCBlbGVtZW50cyB3aXRoIGEgc3BlY2lmaWMgdGFnIG5hbWUgYnkgYWRkaW5nIGFuIGV4dGVuc2lvbiBzdWZmaXhcbmV4cG9ydCBmdW5jdGlvbiBleHRlbmRFbGVtZW50TmFtZSh4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQsIHRhZ05hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpIHtcbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCh0YWdOYW1lKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IG5ld1RhZ05hbWUgPSBgJHt0YWdOYW1lfS0ke2V4dGVuc2lvbn1gO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50V2l0aE5ld1RhZ05hbWUoZWxlbWVudCwgbmV3VGFnTmFtZSk7XG4gICAgZWxlbWVudC5yZXBsYWNlV2l0aChuZXdFbGVtZW50KTtcbiAgfSk7XG59XG5cbi8vIEZ1bmN0aW9uIHRvIGV4dGVuZCBhbnkgZWxlbWVudCB3aXRoIGEgc3BlY2lmaWMgY2xhc3MgcGF0dGVybiAoZS5nLiwgXCJleHRlbmQ6c3VmZml4XCIpXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3MoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50LCBjbGFzc05hbWVQYXR0ZXJuOiBzdHJpbmcpIHtcbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnKicpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gZWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgaWYgKGNsYXNzTGlzdCkge1xuICAgICAgY2xhc3NMaXN0LmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgaWYgKGNsYXNzTmFtZS5zdGFydHNXaXRoKGAke2NsYXNzTmFtZVBhdHRlcm59OmApKSB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gY2xhc3NOYW1lLnNsaWNlKGAke2NsYXNzTmFtZVBhdHRlcm59OmAubGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCBuZXdUYWdOYW1lID0gYCR7ZWxlbWVudC5ub2RlTmFtZX0tJHtzdWZmaXh9YDtcbiAgICAgICAgICBjb25zdCBuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudFdpdGhOZXdUYWdOYW1lKGVsZW1lbnQsIG5ld1RhZ05hbWUpO1xuICAgICAgICAgIGVsZW1lbnQucmVwbGFjZVdpdGgobmV3RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgZWxlbWVudCB3aXRoIGEgbmV3IHRhZyBuYW1lIGFuZCBjb3B5IGF0dHJpYnV0ZXMgYW5kIGNoaWxkcmVuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50V2l0aE5ld1RhZ05hbWUoZWxlbWVudCwgbmV3VGFnTmFtZSkge1xuICBjb25zdCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuZXdUYWdOYW1lKTtcbiAgLy8gQ29weSBhdHRyaWJ1dGVzXG4gIGZvciAoY29uc3QgYXR0ciBvZiBlbGVtZW50LmF0dHJpYnV0ZXMpIHtcbiAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICB9XG4gIC8vIENvcHkgY2hpbGQgbm9kZXNcbiAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcbiAgfVxuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZW1zRnJvbVRlc3QoeG1sRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpIHtcbiAgY29uc3QgaXRlbXM6IHsgaWRlbnRpZmllcjogc3RyaW5nOyBocmVmOiBzdHJpbmc7IGNhdGVnb3J5OiBzdHJpbmcgfVtdID0gW107XG4gIHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1hc3Nlc3NtZW50LWl0ZW0tcmVmJykuZm9yRWFjaChlbCA9PiB7XG4gICAgY29uc3QgaWRlbnRpZmllciA9IGVsLmdldEF0dHJpYnV0ZSgnaWRlbnRpZmllcicpO1xuICAgIGNvbnN0IGhyZWYgPSBlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICBjb25zdCBjYXRlZ29yeSA9IGVsLmdldEF0dHJpYnV0ZSgnY2F0ZWdvcnknKTtcbiAgICBpdGVtcy5wdXNoKHsgaWRlbnRpZmllciwgaHJlZiwgY2F0ZWdvcnkgfSk7XG4gIH0pO1xuICByZXR1cm4gaXRlbXM7XG59XG5cbmxldCBjdXJyZW50UmVxdWVzdDogWE1MSHR0cFJlcXVlc3QgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRYTUwodXJsLCBjYW5jZWxQcmV2aW91c1JlcXVlc3QgPSBmYWxzZSkge1xuICBpZiAoY2FuY2VsUHJldmlvdXNSZXF1ZXN0ICYmIGN1cnJlbnRSZXF1ZXN0ICE9PSBudWxsKSB7XG4gICAgY3VycmVudFJlcXVlc3QuYWJvcnQoKTsgLy8gQWJvcnQgdGhlIG9uZ29pbmcgcmVxdWVzdCBpZiB0aGVyZSBpcyBvbmVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxYTUxEb2N1bWVudCB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBjdXJyZW50UmVxdWVzdCA9IHhocjsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgcmVxdWVzdFxuXG4gICAgeGhyLm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdkb2N1bWVudCc7XG5cbiAgICB4aHIub25sb2FkID0gKCkgPT4ge1xuICAgICAgaWYgKHhoci5zdGF0dXMgPj0gMjAwICYmIHhoci5zdGF0dXMgPCAzMDApIHtcbiAgICAgICAgcmVzb2x2ZSh4aHIucmVzcG9uc2VYTUwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgIH07XG5cbiAgICB4aHIuc2VuZCgpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWE1MKHhtbERvY3VtZW50OiBzdHJpbmcpIHtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCB4bWxGcmFnbWVudCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sRG9jdW1lbnQsICd0ZXh0L3htbCcpO1xuICByZXR1cm4geG1sRnJhZ21lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0hUTUwoeG1sRnJhZ21lbnQ6IERvY3VtZW50KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBYU0xUUHJvY2Vzc29yKCk7XG4gIGNvbnN0IHhzbHREb2N1bWVudCA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sVG9IVE1MLCAndGV4dC94bWwnKTtcbiAgcHJvY2Vzc29yLmltcG9ydFN0eWxlc2hlZXQoeHNsdERvY3VtZW50KTtcbiAgY29uc3QgaXRlbUhUTUxGcmFnbWVudCA9IHByb2Nlc3Nvci50cmFuc2Zvcm1Ub0ZyYWdtZW50KHhtbEZyYWdtZW50LCBkb2N1bWVudCk7XG4gIHJldHVybiBpdGVtSFRNTEZyYWdtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0TG9jYXRpb24oeG1sRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQsIGxvY2F0aW9uOiBzdHJpbmcpIHtcbiAgaWYgKCFsb2NhdGlvbi5lbmRzV2l0aCgnLycpKSB7XG4gICAgbG9jYXRpb24gKz0gJy8nO1xuICB9XG5cbiAgeG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnW3NyY10sW2hyZWZdLFtwcmltYXJ5LXBhdGhdJykuZm9yRWFjaChlbFdpdGhTcmMgPT4ge1xuICAgIGxldCBhdHRyOiAnc3JjJyB8ICdocmVmJyB8ICdwcmltYXJ5LXBhdGgnIHwgJycgPSAnJztcblxuICAgIGlmIChlbFdpdGhTcmMuZ2V0QXR0cmlidXRlKCdzcmMnKSkge1xuICAgICAgYXR0ciA9ICdzcmMnO1xuICAgIH1cbiAgICBpZiAoZWxXaXRoU3JjLmdldEF0dHJpYnV0ZSgnaHJlZicpKSB7XG4gICAgICBhdHRyID0gJ2hyZWYnO1xuICAgIH1cbiAgICBpZiAoZWxXaXRoU3JjLmdldEF0dHJpYnV0ZSgncHJpbWFyeS1wYXRoJykpIHtcbiAgICAgIGF0dHIgPSAncHJpbWFyeS1wYXRoJztcbiAgICB9XG4gICAgY29uc3QgYXR0clZhbHVlID0gZWxXaXRoU3JjLmdldEF0dHJpYnV0ZShhdHRyKT8udHJpbSgpO1xuXG4gICAgaWYgKCFhdHRyVmFsdWUuc3RhcnRzV2l0aCgnZGF0YTonKSAmJiAhYXR0clZhbHVlLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgY29uc3QgbmV3U3JjVmFsdWUgPSBsb2NhdGlvbiArIGVuY29kZVVSSShhdHRyVmFsdWUpO1xuICAgICAgZWxXaXRoU3JjLnNldEF0dHJpYnV0ZShhdHRyLCBuZXdTcmNWYWx1ZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDREFUQXRvQ29tbWVudCh4bWxGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCkge1xuICBjb25zdCBjZGF0YUVsZW1lbnRzID0geG1sRnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgncXRpLWN1c3RvbS1vcGVyYXRvcltjbGFzcz1cImpzLm9yZ1wiXSA+IHF0aS1iYXNlLXZhbHVlJyk7XG4gIGNkYXRhRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBjb25zdCBjb21tZW50VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoZWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgZWxlbWVudC5yZXBsYWNlQ2hpbGQoY29tbWVudFRleHQsIGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTdHlsZVNoZWV0cyh4bWxGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCkge1xuICAvLyByZW1vdmUgcXRpLXN0eWxlc2hlZXQgdGFnXG4gIHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3F0aS1zdHlsZXNoZWV0JykuZm9yRWFjaChzdHlsZXNoZWV0ID0+IHN0eWxlc2hlZXQucmVtb3ZlKCkpO1xufVxuIiwgIi8qKlxuICogQnJvd3NlciBiYXNlZCBRVEktWE1MIHRvIEhUTUwgdHJhbnNmb3JtZXIuXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIG1ldGhvZHMgdG8gbG9hZCwgcGFyc2UsIHRyYW5zZm9ybSBhbmQgc2VyaWFsaXplIFFUSSBYTUwgaXRlbXMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBtZXRob2RzIHRvIGxvYWQsIHBhcnNlLCB0cmFuc2Zvcm0gYW5kIHNlcmlhbGl6ZSBRVEkgWE1MIGl0ZW1zLlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHF0aVRyYW5zZm9ybWVyID0gcXRpVHJhbnNmb3JtSXRlbSgpO1xuICogYXdhaXQgcXRpVHJhbnNmb3JtZXIubG9hZCgncGF0aC90by94bWwvZmlsZS54bWwnKTtcbiAqIHF0aVRyYW5zZm9ybWVyLnBhdGgoJy9hc3Nlc3NtZW50SXRlbS9pdGVtQm9keScpO1xuICogY29uc3QgaHRtbCA9IHF0aVRyYW5zZm9ybWVyLmh0bWwoKTtcbiAqIGNvbnN0IHhtbCA9IHF0aVRyYW5zZm9ybWVyLnhtbCgpO1xuICogY29uc3QgaHRtbGRvYyA9IHF0aVRyYW5zZm9ybWVyLmh0bWxkb2MoKTtcbiAqIGNvbnN0IHhtbGRvYyA9IHF0aVRyYW5zZm9ybWVyLnhtbGRvYygpO1xuICpcbiAqIHF0aVRyYW5zZm9ybUl0ZW0oKS5wYXJzZShzdG9yeVhNTCkuaHRtbCgpXG4gKi9cblxuaW1wb3J0IHtcbiAgY29udmVydENEQVRBdG9Db21tZW50LFxuICBleHRlbmRFbGVtZW50TmFtZSxcbiAgZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3MsXG4gIGxvYWRYTUwsXG4gIHBhcnNlWE1MLFxuICBzZXRMb2NhdGlvbixcbiAgc3RyaXBTdHlsZVNoZWV0cyxcbiAgdG9IVE1MXG59IGZyb20gJy4vcXRpLXRyYW5zZm9ybWVycyc7XG5cbmV4cG9ydCB0eXBlIHRyYW5zZm9ybUl0ZW1BcGkgPSB7XG4gIGxvYWQ6ICh1cmk6IHN0cmluZywgY2FuY2VsUHJldmlvdXNSZXF1ZXN0PzogYm9vbGVhbikgPT4gUHJvbWlzZTx0cmFuc2Zvcm1JdGVtQXBpPjtcbiAgcGFyc2U6ICh4bWxTdHJpbmc6IHN0cmluZykgPT4gdHJhbnNmb3JtSXRlbUFwaTtcbiAgcGF0aDogKGxvY2F0aW9uOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGZuOiAoZm46ICh4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQpID0+IHZvaWQpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIHBjaUhvb2tzOiAodXJpOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGV4dGVuZEVsZW1lbnROYW1lOiAoZWxlbWVudE5hbWU6IHN0cmluZywgZXh0ZW5kOiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGV4dGVuZEVsZW1lbnRzV2l0aENsYXNzOiAocGFyYW0/OiBzdHJpbmcpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGN1c3RvbUludGVyYWN0aW9uOiAoYmFzZVJlZjogc3RyaW5nLCBiYXNlSXRlbTogc3RyaW5nKSA9PiB0cmFuc2Zvcm1JdGVtQXBpO1xuICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQ6ICgpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIHN0cmlwU3R5bGVTaGVldHM6ICgpID0+IHRyYW5zZm9ybUl0ZW1BcGk7XG4gIGh0bWw6ICgpID0+IHN0cmluZztcbiAgeG1sOiAoKSA9PiBzdHJpbmc7XG4gIGh0bWxEb2M6ICgpID0+IERvY3VtZW50RnJhZ21lbnQ7XG4gIHhtbERvYzogKCkgPT4gWE1MRG9jdW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcXRpVHJhbnNmb3JtSXRlbSA9ICgpID0+IHtcbiAgbGV0IHhtbEZyYWdtZW50OiBYTUxEb2N1bWVudDtcblxuICBjb25zdCBhcGk6IHRyYW5zZm9ybUl0ZW1BcGkgPSB7XG4gICAgYXN5bmMgbG9hZCh1cmk6IHN0cmluZywgY2FuY2VsUHJldmlvdXNSZXF1ZXN0ID0gZmFsc2UpOiBQcm9taXNlPHR5cGVvZiBhcGk+IHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgYXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxvYWRYTUwodXJpLCBjYW5jZWxQcmV2aW91c1JlcXVlc3QpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICB4bWxGcmFnbWVudCA9IHhtbDtcbiAgICAgICAgICAvLyBzZXQgdGhlIGJhc2UgcGF0aCBmb3IgaW1hZ2VzIGFuZCBvdGhlciByZXNvdXJjZXMsXG4gICAgICAgICAgLy8geW91IHByb2JhYmx5IHdhbnQgdG8gc2V0IHRoZSBiYXNlIHBhdGggdG8gdGhlIGRvY3VtZW50IHJvb3QgZWxzZSB5b3UgY2FuIHVzZSB0aGUgcGF0aCBtZXRob2QgdG8gc2V0IGl0XG4gICAgICAgICAgYXBpLnBhdGgodXJpLnN1YnN0cmluZygwLCB1cmkubGFzdEluZGV4T2YoJy8nKSkpO1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKGFwaSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwYXJzZSh4bWxTdHJpbmc6IHN0cmluZyk6IHR5cGVvZiBhcGkge1xuICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIHBhdGg6IChsb2NhdGlvbjogc3RyaW5nKTogdHlwZW9mIGFwaSA9PiB7XG4gICAgICBzZXRMb2NhdGlvbih4bWxGcmFnbWVudCwgbG9jYXRpb24pO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIGZuKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKTogdHlwZW9mIGFwaSB7XG4gICAgICBmbih4bWxGcmFnbWVudCk7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgcGNpSG9va3ModXJpOiBzdHJpbmcpOiB0eXBlb2YgYXBpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBbJ2hvb2snLCAnbW9kdWxlJ107XG4gICAgICBjb25zdCBkb2N1bWVudFBhdGggPSB1cmkuc3Vic3RyaW5nKDAsIHVyaS5sYXN0SW5kZXhPZignLycpKTtcbiAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgY29uc3Qgc3JjQXR0cmlidXRlcyA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1snICsgYXR0cmlidXRlICsgJ10nKTtcbiAgICAgICAgc3JjQXR0cmlidXRlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgIGNvbnN0IHNyY1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKSE7XG4gICAgICAgICAgaWYgKCFzcmNWYWx1ZS5zdGFydHNXaXRoKCdkYXRhOicpICYmICFzcmNWYWx1ZS5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIC8vIEp1c3QgcGFzdGUgdGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIHNyYyBsb2NhdGlvbiBhZnRlciB0aGUgZG9jdW1lbnRyb290UGF0aFxuICAgICAgICAgICAgLy8gb2xkIHBjaXMgY2FuIGhhdmUgYSAuanMsIG5ldyBwY2kncyBkb24ndFxuICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2Jhc2UtdXJsJywgdXJpKTtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKFxuICAgICAgICAgICAgICAnbW9kdWxlJyxcbiAgICAgICAgICAgICAgZG9jdW1lbnRQYXRoICsgJy8nICsgZW5jb2RlVVJJKHNyY1ZhbHVlICsgKHNyY1ZhbHVlLmVuZHNXaXRoKCcuanMnKSA/ICcnIDogJy5qcycpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIGV4dGVuZEVsZW1lbnROYW1lOiAodGFnTmFtZTogc3RyaW5nLCBleHRlbnNpb246IHN0cmluZyk6IHR5cGVvZiBhcGkgPT4ge1xuICAgICAgZXh0ZW5kRWxlbWVudE5hbWUoeG1sRnJhZ21lbnQsIHRhZ05hbWUsIGV4dGVuc2lvbik7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgZXh0ZW5kRWxlbWVudHNXaXRoQ2xhc3M6IChwYXJhbTogc3RyaW5nID0gJ2V4dGVuZCcpOiB0eXBlb2YgYXBpID0+IHtcbiAgICAgIGV4dGVuZEVsZW1lbnRzV2l0aENsYXNzKHhtbEZyYWdtZW50LCBwYXJhbSk7XG4gICAgICByZXR1cm4gYXBpO1xuICAgIH0sXG4gICAgY3VzdG9tSW50ZXJhY3Rpb24oYmFzZVJlZjogc3RyaW5nLCBiYXNlSXRlbTogc3RyaW5nKTogdHlwZW9mIGFwaSB7XG4gICAgICBjb25zdCBxdGlDdXN0b21JbnRlcmFjdGlvbiA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ3F0aS1jdXN0b20taW50ZXJhY3Rpb24nKTtcbiAgICAgIGNvbnN0IHF0aUN1c3RvbUludGVyYWN0aW9uT2JqZWN0ID0gcXRpQ3VzdG9tSW50ZXJhY3Rpb24ucXVlcnlTZWxlY3Rvcignb2JqZWN0Jyk7XG5cbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnNldEF0dHJpYnV0ZSgnZGF0YS1iYXNlLXJlZicsIGJhc2VSZWYpO1xuICAgICAgcXRpQ3VzdG9tSW50ZXJhY3Rpb24uc2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtaXRlbScsIGJhc2VSZWYgKyBiYXNlSXRlbSk7XG4gICAgICBxdGlDdXN0b21JbnRlcmFjdGlvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEnLCBxdGlDdXN0b21JbnRlcmFjdGlvbk9iamVjdC5nZXRBdHRyaWJ1dGUoJ2RhdGEnKSk7XG4gICAgICBxdGlDdXN0b21JbnRlcmFjdGlvbi5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgcXRpQ3VzdG9tSW50ZXJhY3Rpb25PYmplY3QuZ2V0QXR0cmlidXRlKCd3aWR0aCcpKTtcbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgcXRpQ3VzdG9tSW50ZXJhY3Rpb25PYmplY3QuZ2V0QXR0cmlidXRlKCdoZWlnaHQnKSk7XG5cbiAgICAgIHF0aUN1c3RvbUludGVyYWN0aW9uLnJlbW92ZUNoaWxkKHF0aUN1c3RvbUludGVyYWN0aW9uT2JqZWN0KTtcbiAgICAgIHJldHVybiBhcGk7XG4gICAgfSxcbiAgICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQoKTogdHlwZW9mIGFwaSB7XG4gICAgICBjb252ZXJ0Q0RBVEF0b0NvbW1lbnQoeG1sRnJhZ21lbnQpO1xuICAgICAgcmV0dXJuIGFwaTtcbiAgICB9LFxuICAgIHN0cmlwU3R5bGVTaGVldHMoKTogdHlwZW9mIGFwaSB7XG4gICAgICBzdHJpcFN0eWxlU2hlZXRzKHhtbEZyYWdtZW50KTtcbiAgICAgIHJldHVybiBhcGk7XG4gICAgfSxcbiAgICBodG1sKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodG9IVE1MKHhtbEZyYWdtZW50KSk7XG4gICAgfSxcbiAgICB4bWwoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbEZyYWdtZW50KTtcbiAgICB9LFxuICAgIGh0bWxEb2MoKSB7XG4gICAgICByZXR1cm4gdG9IVE1MKHhtbEZyYWdtZW50KTtcbiAgICB9LFxuICAgIHhtbERvYygpOiBYTUxEb2N1bWVudCB7XG4gICAgICByZXR1cm4geG1sRnJhZ21lbnQ7IC8vIG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoeG1sRnJhZ21lbnQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGFwaTtcbn07XG4iLCAiaW1wb3J0IHsgbG9hZFhNTCwgcGFyc2VYTUwgfSBmcm9tIFwiLi9xdGktdHJhbnNmb3JtZXJzXCI7XG5cbmV4cG9ydCBjb25zdCBxdGlUcmFuc2Zvcm1NYW5pZmVzdCA9ICgpOiB7XG4gICAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHR5cGVvZiBhcGk+O1xuICAgIGFzc2Vzc21lbnRUZXN0OiAoKSA9PiB7IGhyZWY6IHN0cmluZzsgaWRlbnRpZmllcjogc3RyaW5nIH07XG4gIH0gPT4ge1xuICAgIGxldCB4bWxGcmFnbWVudDogWE1MRG9jdW1lbnQ7XG4gIFxuICAgIGNvbnN0IGFwaSA9IHtcbiAgICAgIGFzeW5jIGxvYWQodXJpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0eXBlb2YgYXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgbG9hZFhNTCh1cmkpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICAgIHhtbEZyYWdtZW50ID0geG1sO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoYXBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGFyc2UoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgfSxcbiAgICAgIGFzc2Vzc21lbnRUZXN0KCkge1xuICAgICAgICBjb25zdCBlbCA9IHhtbEZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJ3Jlc291cmNlW3R5cGU9XCJpbXNxdGlfdGVzdF94bWx2M3AwXCJdJyk7XG4gICAgICAgIHJldHVybiB7IGhyZWY6IGVsLmdldEF0dHJpYnV0ZSgnaHJlZicpLCBpZGVudGlmaWVyOiBlbC5nZXRBdHRyaWJ1dGUoJ2lkZW50aWZpZXInKSB9O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGFwaTtcbiAgfTsiLCAiXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggbWV0aG9kcyB0byBsb2FkLCBwYXJzZSBhbmQgdHJhbnNmb3JtIFFUSSB0ZXN0cy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIG1ldGhvZHMgdG8gbG9hZCwgcGFyc2UgYW5kIHRyYW5zZm9ybSBRVEkgdGVzdHMuXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcXRpVHJhbnNmb3JtZXIgPSBxdGlUcmFuc2Zvcm1UZXN0KCk7XG4gKiBhd2FpdCBxdGlUcmFuc2Zvcm1lci5sb2FkKCdodHRwczovL2V4YW1wbGUuY29tL3Rlc3QueG1sJyk7XG4gKiBjb25zdCBpdGVtcyA9IHF0aVRyYW5zZm9ybWVyLml0ZW1zKCk7XG4gKiBjb25zdCBodG1sID0gcXRpVHJhbnNmb3JtZXIuaHRtbCgpO1xuICogY29uc3QgeG1sID0gcXRpVHJhbnNmb3JtZXIueG1sKCk7XG4gKi9cblxuaW1wb3J0IHsgaXRlbXNGcm9tVGVzdCwgbG9hZFhNTCwgcGFyc2VYTUwsIHRvSFRNTCB9IGZyb20gXCIuL3F0aS10cmFuc2Zvcm1lcnNcIjtcblxuZXhwb3J0IHR5cGUgdHJhbnNmb3JtVGVzdEFwaSA9IHtcbiAgICBsb2FkOiAodXJpOiBzdHJpbmcpID0+IFByb21pc2U8dHJhbnNmb3JtVGVzdEFwaT47XG4gICAgcGFyc2U6ICh4bWxTdHJpbmc6IHN0cmluZykgPT4gdHJhbnNmb3JtVGVzdEFwaTtcbiAgICBmbjogKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKSA9PiB0cmFuc2Zvcm1UZXN0QXBpO1xuICAgIGl0ZW1zOiAoKSA9PiB7IGlkZW50aWZpZXI6IHN0cmluZzsgaHJlZjogc3RyaW5nOyBjYXRlZ29yeTogc3RyaW5nIH1bXTtcbiAgICBodG1sOiAoKSA9PiBzdHJpbmc7XG4gICAgeG1sOiAoKSA9PiBzdHJpbmc7XG4gICAgaHRtbERvYzogKCkgPT4gRG9jdW1lbnRGcmFnbWVudDtcbiAgICB4bWxEb2M6ICgpID0+IFhNTERvY3VtZW50O1xuICB9XG4gIFxuICBleHBvcnQgY29uc3QgcXRpVHJhbnNmb3JtVGVzdCA9ICgpOiB0cmFuc2Zvcm1UZXN0QXBpID0+IHtcbiAgICBsZXQgeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50O1xuICBcbiAgICBjb25zdCBhcGk6dHJhbnNmb3JtVGVzdEFwaSA9IHtcbiAgICAgIGFzeW5jIGxvYWQodXJpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx0cmFuc2Zvcm1UZXN0QXBpPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgbG9hZFhNTCh1cmkpLnRoZW4oeG1sID0+IHtcbiAgICAgICAgICAgIHhtbEZyYWdtZW50ID0geG1sO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoYXBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcGFyc2UoeG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgICAgICAgeG1sRnJhZ21lbnQgPSBwYXJzZVhNTCh4bWxTdHJpbmcpO1xuICAgICAgICByZXR1cm4gYXBpO1xuICAgICAgfSxcbiAgICAgIGZuKGZuOiAoeG1sRnJhZ21lbnQ6IFhNTERvY3VtZW50KSA9PiB2b2lkKSB7XG4gICAgICAgIGZuKHhtbEZyYWdtZW50KTtcbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgIH0sXG4gICAgICBpdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zRnJvbVRlc3QoeG1sRnJhZ21lbnQpO1xuICAgICAgfSxcbiAgICAgIGh0bWwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKHRvSFRNTCh4bWxGcmFnbWVudCkpO1xuICAgICAgfSxcbiAgICAgIHhtbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyh4bWxGcmFnbWVudCk7XG4gICAgICB9LFxuICAgICAgaHRtbERvYygpIHtcbiAgICAgICAgcmV0dXJuIHRvSFRNTCh4bWxGcmFnbWVudCk7XG4gICAgICB9LFxuICAgICAgeG1sRG9jKCk6IFhNTERvY3VtZW50IHtcbiAgICAgICAgcmV0dXJuIHhtbEZyYWdtZW50O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGFwaTtcbiAgfTsiLCAiaW1wb3J0IHsgUXRpQXNzZXNzbWVudEl0ZW0gfSBmcm9tICcuLi9xdGktY29tcG9uZW50cyc7XG5pbXBvcnQgeyBxdGlUcmFuc2Zvcm1JdGVtLCBxdGlUcmFuc2Zvcm1UZXN0IH0gZnJvbSAnLi4vcXRpLXRyYW5zZm9ybWVycyc7XG5pbXBvcnQgeyBxdGlUcmFuc2Zvcm1NYW5pZmVzdCB9IGZyb20gJy4uL3F0aS10cmFuc2Zvcm1lcnMvcXRpLXRyYW5zZm9ybS1tYW5pZmVzdCc7XG5cbmV4cG9ydCB0eXBlIE1hbmlmZXN0SW5mbyA9IHtcbiAgdGVzdElkZW50aWZpZXI6IHN0cmluZztcbiAgdGVzdEhUTUxEb2M6IERvY3VtZW50RnJhZ21lbnQ7XG4gIHRlc3RVUkk6IHN0cmluZztcbiAgdGVzdFVSTDogc3RyaW5nO1xuICBpdGVtczoge1xuICAgIGlkZW50aWZpZXI6IHN0cmluZztcbiAgICBocmVmOiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IHN0cmluZztcbiAgfVtdO1xufTtcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBlbnN1cmUgcGFja2FnZSBVUklzIGVuZCB3aXRoIGEgJy8nXG4vLyBjb25zdCBub3JtYWxpemVVcmkgPSAodXJpOiBzdHJpbmcpID0+ICh1cmkuZW5kc1dpdGgoJy8nKSA/IHVyaSA6IGAke3VyaX0vYCk7XG5cbi8vIEZldGNoZXMgYXNzZXNzbWVudCBkYXRhIGZyb20gdGhlIG1hbmlmZXN0XG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RJbmZvID0gYXN5bmMgKG1hbmlmZXN0VVJMOiBzdHJpbmcpOiBQcm9taXNlPE1hbmlmZXN0SW5mbz4gPT4ge1xuICBjb25zdCBiYXNlVVJJID0gbWFuaWZlc3RVUkwuc3Vic3RyaW5nKDAsIG1hbmlmZXN0VVJMLmxhc3RJbmRleE9mKCcvJykpO1xuXG4gIGNvbnN0IHRlc3QgPSBhd2FpdCBxdGlUcmFuc2Zvcm1NYW5pZmVzdCgpXG4gICAgLmxvYWQoYCR7bWFuaWZlc3RVUkx9YClcbiAgICAudGhlbihhcGkgPT4gYXBpLmFzc2Vzc21lbnRUZXN0KCkpO1xuXG4gIGNvbnN0IHRlc3RIVE1MRG9jID0gYXdhaXQgcXRpVHJhbnNmb3JtVGVzdCgpXG4gICAgLmxvYWQoYCR7YmFzZVVSSX0vJHt0ZXN0LmhyZWZ9YClcbiAgICAudGhlbihhcGkgPT4gYXBpLmh0bWxEb2MoKSk7XG5cbiAgY29uc3QgaXRlbXMgPSBhd2FpdCBxdGlUcmFuc2Zvcm1UZXN0KClcbiAgICAubG9hZChgJHtiYXNlVVJJfS8ke3Rlc3QuaHJlZn1gKVxuICAgIC50aGVuKGFwaSA9PiBhcGkuaXRlbXMoKSk7XG5cbiAgY29uc3QgdGVzdFVSTCA9IGAke2Jhc2VVUkl9LyR7dGVzdC5ocmVmfWA7XG4gIGNvbnN0IHRlc3RVUkkgPSBgJHtiYXNlVVJJfS8ke3Rlc3QuaHJlZi5zdWJzdHJpbmcoMCwgdGVzdC5ocmVmLmxhc3RJbmRleE9mKCcvJykpfWA7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZXN0SFRNTERvYyxcbiAgICB0ZXN0VVJJLFxuICAgIHRlc3RVUkwsXG4gICAgaXRlbXMsXG4gICAgdGVzdElkZW50aWZpZXI6IHRlc3QuaWRlbnRpZmllclxuICB9O1xufTtcblxuLy8gRmV0Y2hlcyBhIHNpbmdsZSBpdGVtIGJ5IFVSSVxuZXhwb3J0IGNvbnN0IGdldEl0ZW1CeVVyaSA9IGFzeW5jIChpdGVtVXJpOiBzdHJpbmcpOiBQcm9taXNlPFF0aUFzc2Vzc21lbnRJdGVtPiA9PlxuICBxdGlUcmFuc2Zvcm1JdGVtKClcbiAgICAubG9hZChpdGVtVXJpKVxuICAgIC50aGVuKGFwaSA9PiBhcGkuaHRtbERvYygpLmZpcnN0RWxlbWVudENoaWxkIGFzIFF0aUFzc2Vzc21lbnRJdGVtKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLElBQU0sTUFBTSxPQUFPO0FBZW5CLElBQU0sWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBeUJYLFNBQVMsa0JBQWtCLGFBQTBCLFNBQWlCLFdBQW1CO0FBQzlGLGNBQVksaUJBQWlCLE9BQU8sRUFBRSxRQUFRLGFBQVc7QUFDdkQsVUFBTSxhQUFhLEdBQUcsT0FBTyxJQUFJLFNBQVM7QUFDMUMsVUFBTSxhQUFh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
@@ -0,0 +1,20 @@
1
+ import { p as QtiAssessmentItem } from '../qti-simple-choice-DC5DJota.cjs';
2
+ import 'lit-html';
3
+ import 'lit';
4
+ import 'lit-html/directives/ref.js';
5
+
6
+ type ManifestInfo = {
7
+ testIdentifier: string;
8
+ testHTMLDoc: DocumentFragment;
9
+ testURI: string;
10
+ testURL: string;
11
+ items: {
12
+ identifier: string;
13
+ href: string;
14
+ category: string;
15
+ }[];
16
+ };
17
+ declare const getManifestInfo: (manifestURL: string) => Promise<ManifestInfo>;
18
+ declare const getItemByUri: (itemUri: string) => Promise<QtiAssessmentItem>;
19
+
20
+ export { type ManifestInfo, getItemByUri, getManifestInfo };
@@ -1,5 +1,20 @@
1
- declare const getItemByIndex: (packageUri: string, index: number, cancelPreviousRequest?: boolean) => Promise<any>;
2
- declare const getAssessmentData: (packageUri: string) => Promise<any>;
3
- declare const getItemByUri: (itemUri: string, cancelPreviousRequest?: boolean) => Promise<any>;
1
+ import { p as QtiAssessmentItem } from '../qti-simple-choice-DC5DJota.js';
2
+ import 'lit-html';
3
+ import 'lit';
4
+ import 'lit-html/directives/ref.js';
4
5
 
5
- export { getAssessmentData, getItemByIndex, getItemByUri };
6
+ type ManifestInfo = {
7
+ testIdentifier: string;
8
+ testHTMLDoc: DocumentFragment;
9
+ testURI: string;
10
+ testURL: string;
11
+ items: {
12
+ identifier: string;
13
+ href: string;
14
+ category: string;
15
+ }[];
16
+ };
17
+ declare const getManifestInfo: (manifestURL: string) => Promise<ManifestInfo>;
18
+ declare const getItemByUri: (itemUri: string) => Promise<QtiAssessmentItem>;
19
+
20
+ export { type ManifestInfo, getItemByUri, getManifestInfo };