@sinequa/assistant 3.9.11 → 3.10.0
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/chat/chat-message/chat-message.component.d.ts +2 -4
- package/chat/chat.component.d.ts +4 -3
- package/chat/chat.service.d.ts +16 -1
- package/chat/custom-elements/components/code-block.component.d.ts +11 -0
- package/chat/custom-elements/components/document-reference.component.d.ts +13 -0
- package/chat/custom-elements/components/i18n/de.json +5 -0
- package/chat/custom-elements/components/i18n/en.json +5 -0
- package/chat/custom-elements/components/i18n/fr.json +5 -0
- package/chat/custom-elements/components/image-reference.component.d.ts +14 -0
- package/chat/custom-elements/components/page-reference.component.d.ts +14 -0
- package/chat/custom-elements/components/table-tools.component.d.ts +11 -0
- package/chat/custom-elements/custom-elements.config.d.ts +2 -0
- package/chat/{services → custom-elements}/custom-elements.service.d.ts +1 -0
- package/chat/documents-upload/documents-upload.service.d.ts +2 -2
- package/chat/fetch-patcher/app-injector.d.ts +9 -0
- package/chat/fetch-patcher/fetch-patcher.d.ts +31 -0
- package/chat/fetch-patcher/global-error-handler.service.d.ts +36 -0
- package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +13 -0
- package/chat/markdown-it/markdown-it.config.d.ts +4 -0
- package/chat/markdown-it/plugins/document-reference.plugin.d.ts +8 -0
- package/chat/markdown-it/plugins/image-reference.plugin.d.ts +9 -0
- package/chat/markdown-it/plugins/page-reference.plugin.d.ts +9 -0
- package/chat/markdown-it/plugins/table-tools.plugin.d.ts +2 -0
- package/chat/public-api.d.ts +21 -2
- package/chat/{chat-reference → references/chat-reference}/chat-reference.component.d.ts +1 -1
- package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +20 -0
- package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +20 -0
- package/chat/references/i18n/de.json +4 -4
- package/chat/references/i18n/en.json +1 -1
- package/chat/references/i18n/fr.json +1 -1
- package/chat/saved-chats/i18n/de.json +2 -1
- package/chat/saved-chats/i18n/en.json +2 -1
- package/chat/saved-chats/i18n/fr.json +2 -1
- package/chat/saved-chats/saved-chats.component.d.ts +4 -0
- package/chat/saved-chats/saved-chats.service.d.ts +2 -2
- package/chat/services/assistant-metadata.service.d.ts +5 -1
- package/chat/services/signalR.web.service.d.ts +0 -11
- package/chat/smart-renderer/smart-renderer.d.ts +2 -0
- package/chat/token-progress-bar/i18n/en.json +1 -1
- package/chat/types/message-reference.types.d.ts +3 -0
- package/chat/types.d.ts +55 -35
- package/chat/version.d.ts +1 -0
- package/esm2022/chat/chat-message/chat-message.component.mjs +15 -12
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +7 -4
- package/esm2022/chat/chat.component.mjs +39 -26
- package/esm2022/chat/chat.service.mjs +39 -5
- package/esm2022/chat/custom-elements/components/code-block.component.mjs +97 -0
- package/esm2022/chat/custom-elements/components/document-reference.component.mjs +85 -0
- package/esm2022/chat/custom-elements/components/image-reference.component.mjs +79 -0
- package/esm2022/chat/custom-elements/components/page-reference.component.mjs +79 -0
- package/esm2022/chat/custom-elements/components/table-tools.component.mjs +111 -0
- package/esm2022/chat/custom-elements/custom-elements.config.mjs +6 -0
- package/esm2022/chat/custom-elements/custom-elements.service.mjs +35 -0
- package/esm2022/chat/debug-message/debug-message.service.mjs +3 -3
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +3 -3
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +4 -4
- package/esm2022/chat/fetch-patcher/app-injector.mjs +19 -0
- package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +62 -0
- package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +92 -0
- package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +19 -0
- package/esm2022/chat/markdown-it/markdown-it.config.mjs +6 -0
- package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +14 -0
- package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +66 -0
- package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +67 -0
- package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +15 -0
- package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +67 -0
- package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +12 -0
- package/esm2022/chat/public-api.mjs +23 -3
- package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +72 -0
- package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +42 -0
- package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +42 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +26 -6
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +14 -10
- package/esm2022/chat/services/app.service.mjs +7 -2
- package/esm2022/chat/services/assistant-metadata.service.mjs +40 -9
- package/esm2022/chat/services/assistant-ws-frames.service.mjs +7 -4
- package/esm2022/chat/services/signalR-connection.service.mjs +3 -6
- package/esm2022/chat/services/signalR.web.service.mjs +3 -13
- package/esm2022/chat/services/user-settings.service.mjs +6 -3
- package/esm2022/chat/smart-renderer/smart-renderer.mjs +19 -18
- package/esm2022/chat/types/message-reference.types.mjs +1 -1
- package/esm2022/chat/types.mjs +10 -8
- package/esm2022/chat/utils/utils.service.mjs +11 -11
- package/esm2022/chat/version.mjs +3 -0
- package/fesm2022/sinequa-assistant-chat.mjs +2328 -2049
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +6 -6
- package/chat/chat-reference/i18n/de.json +0 -4
- package/chat/chat-reference/i18n/en.json +0 -4
- package/chat/chat-reference/i18n/fr.json +0 -4
- package/chat/directives/copy-to-clipboard.directive.d.ts +0 -8
- package/chat/markdown-it-plugins/image-reference.plugin.d.ts +0 -3
- package/chat/markdown-it-plugins/page-reference.plugin.d.ts +0 -3
- package/chat/markdown-it-plugins/reference.plugin.d.ts +0 -7
- package/chat/references/inline-image-reference.d.ts +0 -21
- package/chat/references/inline-page-reference.d.ts +0 -21
- package/chat/references/references.component.d.ts +0 -43
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +0 -74
- package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +0 -68
- package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +0 -14
- package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +0 -58
- package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +0 -15
- package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +0 -60
- package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +0 -68
- package/esm2022/chat/references/inline-image-reference.mjs +0 -110
- package/esm2022/chat/references/inline-page-reference.mjs +0 -110
- package/esm2022/chat/references/references.component.mjs +0 -290
- package/esm2022/chat/services/custom-elements.service.mjs +0 -43
- /package/chat/{markdown-it-plugins → markdown-it/plugins}/code-block.plugin.d.ts +0 -0
- /package/chat/{markdown-it-plugins → markdown-it/plugins}/link.plugin.d.ts +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Injectable, inject } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, catchError, filter, from, map, take, tap } from 'rxjs';
|
|
3
1
|
import { HttpClient, HttpEventType, HttpHeaders } from '@angular/common/http';
|
|
4
|
-
import {
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
5
3
|
import { getToken, globalConfig, post } from '@sinequa/atomic';
|
|
4
|
+
import { BehaviorSubject, catchError, filter, from, map, take, tap } from 'rxjs';
|
|
5
|
+
import { AppService } from '../services/app.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export class DocumentsUploadService {
|
|
8
8
|
constructor() {
|
|
@@ -271,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
271
271
|
providedIn: 'root'
|
|
272
272
|
}]
|
|
273
273
|
}] });
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RixPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQXlDLE1BQU0sc0JBQXNCLENBQUM7QUFDckgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUsvRCxNQUFNLE9BQU8sc0JBQXNCO0lBSG5DO1FBS2tCLGdCQUFXLEdBQUcsb0NBQW9DLENBQUM7UUFDbkUsc0NBQXNDO1FBQy9CLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQTJCLFNBQVMsQ0FBQyxDQUFDO1FBRWhGLHlDQUF5QztRQUNsQyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBaUMsRUFBRSxDQUFDLENBQUM7UUFFN0UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBeVJsQztJQXZSQzs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENB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VUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNhdGNoRXJyb3IsIGZpbHRlciwgZnJvbSwgbWFwLCBPYnNlcnZhYmxlLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlLCBJbmRleGluZ0luZm9zLCBVcGxvYWRDb25maWcsIFVwbG9hZGVkRG9jdW1lbnQsIFVwbG9hZGVkRG9jdW1lbnRzLCBVcGxvYWRFdmVudCB9IGZyb20gJy4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwVXBsb2FkUHJvZ3Jlc3NFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRUb2tlbiwgZ2xvYmFsQ29uZmlnLCBwb3N0IH0gZnJvbSAnQHNpbmVxdWEvYXRvbWljJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IFJFUVVFU1RfVVJMID0gXCJhcGkvdjEvcGx1Z2luL1NpbmVxdWFBc3Npc3RhbnRSRVNUXCI7XG4gIC8qKiBEb2N1bWVudHMgdXBsb2FkIGNvbmZpZ3VyYXRpb24uICovXG4gIHB1YmxpYyB1cGxvYWRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIEVtaXQgdGhlIGxpc3Qgb2YgaW5kZXhlZCBkb2N1bWVudHMgKi9cbiAgcHVibGljIHVwbG9hZGVkRG9jdW1lbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXBsb2FkZWREb2N1bWVudFtdIHwgdW5kZWZpbmVkPihbXSk7XG5cbiAgcHVibGljIGFwcFNlcnZpY2UgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gIHB1YmxpYyBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZmlsZSB1cGxvYWQgc2VydmljZS5cbiAgICovXG4gIGluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXBsb2FkQ29uZmlnJC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmdldFVwbG9hZENvbmZpZygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiBmb3IgZG9jdW1lbnRzLlxuICAgKiBUaGUgcmVzcG9uc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiwgaXMgZW1pdHRlZCB0byB0aGUgYHVwbG9hZENvbmZpZyRgIG9ic2VydmFibGUuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c1VwbG9hZENvbmZpZ0dldGAgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldFVwbG9hZENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c1VwbG9hZENvbmZpZ0dldFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWVcbiAgICB9O1xuXG4gICAgZnJvbShwb3N0PFVwbG9hZENvbmZpZz4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNVcGxvYWRDb25maWdHZXQ6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKChyZXM6IFVwbG9hZENvbmZpZykgPT4gdGhpcy51cGxvYWRDb25maWckLm5leHQocmVzKSk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkcyBkb2N1bWVudHMgdG8gdGhlIHNlcnZlci5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3Qgd2hpY2ggc2hvdWxkIGNvbnRhaW4gYWxsIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiBFYWNoIGZpbGUgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBGb3JtRGF0YSBvYmplY3Qgd2l0aCBpdHMgb3JpZ2luYWwgbmFtZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICogZm9ybURhdGEuYXBwZW5kKGZpbGUubmFtZSwgZmlsZS5maWxlKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuXG4gICAqIC0gRWFjaCBmaWxlIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgRm9ybURhdGEgb2JqZWN0IHdpdGggaXRzIG9yaWdpbmFsIG5hbWUuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAqIGZvcm1EYXRhLmFwcGVuZChmaWxlLm5hbWUsIGZpbGUuZmlsZSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZW5hYmxlUHJvZ3Jlc3MgLSAoT3B0aW9uYWwpIEEgYm9vbGVhbiBwYXJhbWV0ZXIgdGhhdCBjb250cm9scyB3aGV0aGVyIHByb2dyZXNzIHJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgKiAtIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogLSBJZiBgdHJ1ZWAsIHRoZSBgcmVwb3J0UHJvZ3Jlc3NgIG9wdGlvbiBpcyBzZXQgaW4gdGhlIHJlcXVlc3Qgb3B0aW9ucywgZW5hYmxpbmcgdGhlIHRyYWNrIG9mIHVwbG9hZCBwcm9ncmVzcyBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBicm93c2VyJ3MgcHJvZ3Jlc3MgZXZlbnRzLlxuICAgKiAtIElmIGBmYWxzZWAsIHByb2dyZXNzIGV2ZW50cyBhcmUgbm90IHJlcG9ydGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZXZlbnRzIG9mIHR5cGUgYFVwbG9hZEV2ZW50YDpcbiAgICogLSBgVXBsb2FkUHJvZ3Jlc3NFdmVudGA6IEVtaXR0ZWQgZHVyaW5nIHRoZSB1cGxvYWQgcHJvY2VzcywgY29udGFpbmluZzpcbiAgICogICAtICogIGB0eXBlYDogXCJ1cGxvYWRQcm9ncmVzc1wiIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiAgIC0gKiAgYGxvYWRlZGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBsb2FkZWQgc28gZmFyLlxuICAgKiAgIC0gKiAgYHRvdGFsYDogbnVtYmVyIC0gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZCAoaWYgYXZhaWxhYmxlKS5cbiAgICogICAtICogIGBwcm9ncmVzc2A6IG51bWJlciAtIFRoZSBwZXJjZW50YWdlIG9mIHVwbG9hZCBwcm9ncmVzcyAoY2FsY3VsYXRlZCBhcyBgKGxvYWRlZCAvIHRvdGFsKSAqIDEwMGApLlxuICAgKiAtIGBVcGxvYWRSZXNwb25zZUV2ZW50YDogRW1pdHRlZCB3aGVuIHRoZSB1cGxvYWQgaXMgY29tcGxldGUsIGNvbnRhaW5pbmc6XG4gICAqICAgLSAqICBgdHlwZWA6IFwicmVzcG9uc2VcIiAtIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICogICAtICogIGBib2R5YDogYFVwbG9hZFJlc3BvbnNlYCAtIFRoZSBzZXJ2ZXIncyByZXNwb25zZSwgaW5jbHVkaW5nOlxuICAgKiAgICAgLSAqIC0gKiBgc3RhdHVzVG9rZW5gOiBzdHJpbmcgLSBBIHRva2VuIHRvIHRyYWNrIHRoZSBzdGF0dXMgb2YgdGhlIGluZGV4aW5nIHByb2Nlc3MuXG4gICAqICAgICAtICogLSAqICBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIGV4ZWN1dGUgdGhlIHVwbG9hZC5cbiAgICogICAgIC0gKiAtICogIGBjb25uZWN0b3JSZXNwb25zZWAgKG9wdGlvbmFsKTogQWRkaXRpb25hbCByZXNwb25zZSBkYXRhIGZyb20gdGhlIGNvbm5lY3RvciwgY29udGFpbmluZzpcbiAgICogICAgICAgLSAqIC0gKiAtICogIGBjb2xsZWN0aW9uYDogc3RyaW5nIC0gVGhlIGNvbGxlY3Rpb24gbmFtZS5cbiAgICogICAgICAgLSAqIC0gKiAtICogIGBhY3Rpb25gOiBzdHJpbmcgLSBUaGUgYWN0aW9uIHBlcmZvcm1lZC5cbiAgICogICAgICAgLSAqIC0gKiAtICogIGBzdGF0c2A6IG9iamVjdCAtIFN0YXRpc3RpY3MgYWJvdXQgdGhlIHVwbG9hZCwgaW5jbHVkaW5nOlxuICAgKiAgICAgICAgIC0gKiAtICogLSAqIC0gKiBgbmJEb2NVcGRhdGVkYDogbnVtYmVyIC0gVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdXBkYXRlZC5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzdXBsb2FkYCBhY3Rpb24uXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICogZm9ybURhdGEuYXBwZW5kKGZpbGUubmFtZSwgZmlsZS5maWxlKTtcbiAgICogdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZERvY3VtZW50cyhmb3JtRGF0YSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICogICBpZiAoZXZlbnQudHlwZSA9PT0gJ3VwbG9hZFByb2dyZXNzJykge1xuICAgKiAgICAgY29uc29sZS5sb2coYFByb2dyZXNzOiAke2V2ZW50LnByb2dyZXNzfSVgKTtcbiAgICogICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdVcGxvYWQgY29tcGxldGU6JywgZXZlbnQuYm9keSk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkRG9jdW1lbnRzKGZvcm1EYXRhOiBGb3JtRGF0YSwgZW5hYmxlUHJvZ3Jlc3M6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxVcGxvYWRFdmVudD4ge1xuICAgIC8vIEFkZCB0aGUgcmVxdWlyZWQgXCJkYXRhXCIgZmllbGQgYXMgYSBKU09OIHN0cmluZ1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZG9jdW1lbnRzdXBsb2FkXCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZVxuICAgIH07XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGNvbnN0IHRva2VuID0gZ2V0VG9rZW4oKTtcbiAgICBpZih0b2tlbil7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoJ3NpbmVxdWEtY3NyZi10b2tlbicsdG9rZW4pO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBhbnkgID0ge1xuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgIH07XG4gICAgaWYgKGVuYWJsZVByb2dyZXNzKSBvcHRpb25zWydyZXBvcnRQcm9ncmVzcyddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHVybCA9IGAke2dsb2JhbENvbmZpZy5iYWNrZW5kVXJsfS8ke3RoaXMuUkVRVUVTVF9VUkx9YDtcbiAgICAvKipcbiAgICAgKiBOZWVkIHRvIHVzZSB0aGUgSHR0cENsaWVudCBkaXJlY3RseSB0byBhdm9pZCB0aGUgSlNPTk1ldGhvZFBsdWdpblNlcnZpY2UncyBiZWhhdmlvclxuICAgICAqIGJlY2F1c2UgaXQgaXMgYWx0ZXJpbmcgdGhlIHJlcXVlc3QgYW5kIHRodXMgbWFraW5nIGl0IHVuYWJsZSB0byBwcm9wZXJseSBzZXQgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCB0aGUgYm91bmRhcnlcbiAgICAgKi9cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGZvcm1EYXRhLCBvcHRpb25zKS5waXBlKFxuICAgICAgZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIEh0dHBVcGxvYWRQcm9ncmVzc0V2ZW50IHwgSHR0cFJlc3BvbnNlPGFueT4gPT5cbiAgICAgICAgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSB8fCAoZW5hYmxlUHJvZ3Jlc3MgJiYgZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzcylcbiAgICAgICksXG4gICAgICBtYXAoKGV2ZW50KTogVXBsb2FkRXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3M6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbG9hZGVkID0gMCwgdG90YWwgPSAwIH0gPSBldmVudDtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICd1cGxvYWRQcm9ncmVzcycsIGxvYWRlZCwgdG90YWwsIHByb2dyZXNzOiB0b3RhbCA+IDAgPyBNYXRoLnJvdW5kKChsb2FkZWQgLyB0b3RhbCkgKiAxMDApIDogMCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiAncmVzcG9uc2UnLCBib2R5OiBldmVudC5ib2R5IH07XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgZXZlbnQgdHlwZVwiKTsgLy8gU2hvdWxkIG5vdCByZWFjaCBoZXJlLCBidXQgZm9yIHR5cGVzY3JpcHQgc2FrZS5cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c3VwbG9hZDogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGluZGV4aW5nIHN0YXR1cyBvZiBhIHByZWRlZmluZWQgdXBsb2FkZWQgZG9jdW1lbnQocylcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIHN0YXR1cyB0b2tlbiByZXR1cm5lZCBmcm9tIHRoZSB1cGxvYWQgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHN0YXR1cyB0b2tlbiB1c2VkIHRvIHRyYWNrIHRoZSBpbmRleGluZyBwcm9jZXNzLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNlcnZlciByZXNwb25zZSBvZiB0eXBlIGBJbmRleGluZ1Jlc3BvbnNlYC5cbiAgICogVGhlIGBJbmRleGluZ1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRvY3NgOiBhcnJheSAtIEFuIGFycmF5IG9mIGRvY3VtZW50IHN0YXR1cyBvYmplY3RzLCBlYWNoIGNvbnRhaW5pbmc6XG4gICAqICAgLSAqIGBpZGA6IHN0cmluZyAtIFRoZSBkb2N1bWVudCBJRC5cbiAgICogICAtICogYGZpbGVOYW1lYDogc3RyaW5nIC0gVGhlIG5hbWUgb2YgdGhlIGZpbGUuXG4gICAqICAgLSAqIGBvcGVyYXRpb25gOiBcIkFkZFwiIHwgXCJVcGRhdGVcIiAtIFRoZSBvcGVyYXRpb24gcGVyZm9ybWVkIG9uIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYHN0YXR1c2A6IFwiSW5kZXhpbmdcIiB8IFwiSW5kZXhlZFwiIHwgXCJFcnJvclwiIC0gVGhlIHN0YXR1cyBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBwcmV2aW91c0luZGV4YXRpb25UaW1lYDogc3RyaW5nIHwgbnVsbCAtIFRoZSBwcmV2aW91cyBpbmRleGF0aW9uIHRpbWUuXG4gICAqICAgLSAqIGBjdXJyZW50SW5kZXhhdGlvblRpbWVgOiBzdHJpbmcgfCBudWxsIC0gVGhlIGN1cnJlbnQgaW5kZXhhdGlvbiB0aW1lLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gcmV0cmlldmUgdGhlIGluZGV4aW5nIHN0YXR1cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzVXBsb2FkU3RhdHVzYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0SW5kZXhpbmdTdGF0dXModG9rZW46IHN0cmluZyk6IE9ic2VydmFibGU8SW5kZXhpbmdJbmZvcz4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZG9jdW1lbnRzVXBsb2FkU3RhdHVzXCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgIHN0YXR1c1Rva2VuOiB0b2tlblxuICAgIH07XG5cbiAgICByZXR1cm4gZnJvbShwb3N0PEluZGV4aW5nSW5mb3M+KHRoaXMuUkVRVUVTVF9VUkwsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNVcGxvYWRTdGF0dXM6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtjb2x1bW5zXSAtIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgaW5kZXggY29sdW1ucyB0byBpbmNsdWRlIGZvciBlYWNoIGRvY3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIGRvY3VtZW50cyB0byBza2lwIGZvciBwYWdpbmF0aW9uLiBJZiBzZXQsIGNvdW50IGFsc28gbmVlZHMgdG8gYmUgc2V0LiBObyBza2lwIGlmIG5vdCBzZXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY291bnRdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIGRvY3VtZW50cyB0byB0YWtlIGZvciBwYWdpbmF0aW9uICh1bmxpbWl0ZWQgaWYgbm90IHNldCkuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFVwbG9hZGVkRG9jdW1lbnRzPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICogVGhlIGBVcGxvYWRlZERvY3VtZW50c2Agb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBkb2NzYDogYXJyYXkgLSBBbiBhcnJheSBvZiBvYmplY3RzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBkb2N1bWVudCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAtICogYGlkYDogc3RyaW5nIC0gQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgZmlsZU5hbWVgOiBzdHJpbmcgLSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAgICogICAtICogYHRpdGxlYDogc3RyaW5nIC0gVGhlIHRpdGxlIG9mIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYGZpbGVFeHRgOiBzdHJpbmcgLSBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgaW5kZXhhdGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB3aGVuIHRoZSBkb2N1bWVudCB3YXMgaW5kZXhlZC5cbiAgICogICAtICogYHNpemVgOiBudW1iZXIgLSBUaGUgc2l6ZSBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBzaXplRGlzcGxheWA6IHN0cmluZyAtIEEgaHVtYW4tcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRvY3VtZW50IHNpemUuXG4gICAqICAgLSAqIGBba2V5OiBzdHJpbmddYDogYW55IC0gQWRkaXRpb25hbCBjb2x1bW5zIGFza2VkIGluIHRoZSByZXF1ZXN0LCB2YWx1ZSBvZiB0aGUgY29sdW1uIGZvciB0aGUgZG9jdW1lbnQuXG4gICAqIC0gYGNvdW50YDogbnVtYmVyIC0gVGhlIGNvdW50IG9mIGRvY3VtZW50cyBpbiB0aGUgY3VycmVudCBiYXRjaCBvciBzdWJzZXQuXG4gICAqIC0gYHRvdGFsQ291bnRgOiBudW1iZXIgLSBUaGUgdG90YWwgY291bnQgb2YgZG9jdW1lbnRzIGF2YWlsYWJsZS5cbiAgICogLSBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIHByb2Nlc3MgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcmVxdWVzdCBmYWlscy5cbiAgICovXG4gIHB1YmxpYyBnZXREb2N1bWVudHNMaXN0KGNvbHVtbnM/OiBzdHJpbmdbXSwgc2tpcD86IG51bWJlciwgY291bnQ/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFVwbG9hZGVkRG9jdW1lbnRzPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNMaXN0XCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZVxuICAgIH07XG5cbiAgICBpZiAoY29sdW1ucykgZGF0YVtcImNvbHVtbnNcIl0gPSBjb2x1bW5zO1xuICAgIGlmIChza2lwKSBkYXRhW1wic2tpcFwiXSA9IHNraXA7XG4gICAgaWYgKGNvdW50KSBkYXRhW1wiY291bnRcIl0gPSBjb3VudDtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8VXBsb2FkZWREb2N1bWVudHM+KHRoaXMuUkVRVUVTVF9VUkwsIGRhdGEpKS5waXBlKFxuICAgICAgdGFwKChyZXM6IFVwbG9hZGVkRG9jdW1lbnRzKSA9PiB0aGlzLnVwbG9hZGVkRG9jdW1lbnRzJC5uZXh0KHJlcy5kb2NzKSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c0xpc3Q6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXBsb2FkZWQgZG9jdW1lbnRzIHdpdGggdGhlIHNwZWNpZmllZCBJRHMuXG4gICAqXG4gICAqIEBwYXJhbSBkb2NJZHMgLSBBbiBhcnJheSBvZiBkb2N1bWVudCBJRHMgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNlcnZlciByZXNwb25zZSBvZiB0eXBlIGBkZWxldGVEb2N1bWVudHNSZXNwb25zZWAuXG4gICAqIFRoZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgIG9iamVjdCBjb250YWluczpcbiAgICogLSBgZGVsZXRlZENvdW50YDogbnVtYmVyIC0gVGhlIG51bWJlciBvZiBkZWxldGVkIGRvY3VtZW50cy5cbiAgICogLSBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnRzLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIGBkb2N1bWVudHNEZWxldGVgIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVEb2N1bWVudHMoZG9jSWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0RlbGV0ZVwiLFxuICAgICAgZG9jSWRzLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxkZWxldGVEb2N1bWVudHNSZXNwb25zZT4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c0RlbGV0ZTogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGFsbCB1cGxvYWRlZCBkb2N1bWVudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2VydmVyIHJlc3BvbnNlIG9mIHR5cGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYC5cbiAgICogVGhlIGBkZWxldGVEb2N1bWVudHNSZXNwb25zZWAgb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBkZWxldGVkQ291bnRgOiBudW1iZXIgLSBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgZG9jdW1lbnRzLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gZGVsZXRlIHRoZSBkb2N1bWVudHMuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c0RlbGV0ZUFsbGAgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUFsbERvY3VtZW50cygpOiBPYnNlcnZhYmxlPGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNEZWxldGVBbGxcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+KHRoaXMuUkVRVUVTVF9VUkwsIGRhdGEpKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNEZWxldGVBbGw6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyB0aGUgZ2l2ZW4gZmlsZSBzaXplIGluIGJ5dGVzIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBieXRlcyAtIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIGJ5dGVzLlxuICAgKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpbGUgc2l6ZSBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAoZS5nLiwgXCIxMC4yNCBLQlwiLCBcIjEuMDAgTUJcIikuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gXCIwIEJ5dGVzXCI7XG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3Qgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiLCBcIlRCXCJdO1xuICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyLnBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMikpICsgXCIgXCIgKyBzaXplc1tpXVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIGZpbGUgc2l6ZSBpbiBieXRlcyBpbnRvIG1lZ2FieXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGJ5dGVzIC0gVGhlIHNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMuXG4gICAqIEByZXR1cm5zIFRoZSBzaXplIG9mIHRoZSBmaWxlIGluIG1lZ2FieXRlcy5cbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0Qnl0ZXNUb01CKGJ5dGVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBieXRlcyAvICgxMDI0ICogMTAyNCk7XG4gIH1cblxufVxuIl19
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUF5QyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JILE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU1yRCxNQUFNLE9BQU8sc0JBQXNCO0lBSG5DO1FBS2tCLGdCQUFXLEdBQUcsb0NBQW9DLENBQUM7UUFDbkUsc0NBQXNDO1FBQy9CLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQTJCLFNBQVMsQ0FBQyxDQUFDO1FBRWhGLHlDQUF5QztRQUNsQyx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBaUMsRUFBRSxDQUFDLENBQUM7UUFFN0UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBeVJsQztJQXZSQzs7T0FFRztJQUNILElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENB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VUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50VHlwZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFVwbG9hZFByb2dyZXNzRXZlbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFRva2VuLCBnbG9iYWxDb25maWcsIHBvc3QgfSBmcm9tICdAc2luZXF1YS9hdG9taWMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjYXRjaEVycm9yLCBmaWx0ZXIsIGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2UsIEluZGV4aW5nSW5mb3MsIFVwbG9hZENvbmZpZywgVXBsb2FkZWREb2N1bWVudCwgVXBsb2FkZWREb2N1bWVudHMsIFVwbG9hZEV2ZW50IH0gZnJvbSAnLi9kb2N1bWVudHMtdXBsb2FkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IFJFUVVFU1RfVVJMID0gXCJhcGkvdjEvcGx1Z2luL1NpbmVxdWFBc3Npc3RhbnRSRVNUXCI7XG4gIC8qKiBEb2N1bWVudHMgdXBsb2FkIGNvbmZpZ3VyYXRpb24uICovXG4gIHB1YmxpYyB1cGxvYWRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIEVtaXQgdGhlIGxpc3Qgb2YgaW5kZXhlZCBkb2N1bWVudHMgKi9cbiAgcHVibGljIHVwbG9hZGVkRG9jdW1lbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VXBsb2FkZWREb2N1bWVudFtdIHwgdW5kZWZpbmVkPihbXSk7XG5cbiAgcHVibGljIGFwcFNlcnZpY2UgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gIHB1YmxpYyBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgZmlsZSB1cGxvYWQgc2VydmljZS5cbiAgICovXG4gIGluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudXBsb2FkQ29uZmlnJC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmdldFVwbG9hZENvbmZpZygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiBmb3IgZG9jdW1lbnRzLlxuICAgKiBUaGUgcmVzcG9uc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSB1cGxvYWQgY29uZmlndXJhdGlvbiwgaXMgZW1pdHRlZCB0byB0aGUgYHVwbG9hZENvbmZpZyRgIG9ic2VydmFibGUuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c1VwbG9hZENvbmZpZ0dldGAgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldFVwbG9hZENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c1VwbG9hZENvbmZpZ0dldFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWVcbiAgICB9O1xuXG4gICAgZnJvbShwb3N0PFVwbG9hZENvbmZpZz4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBpbnZva2luZyBkb2N1bWVudHNVcGxvYWRDb25maWdHZXQ6ICR7ZXJyb3J9YCk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKChyZXM6IFVwbG9hZENvbmZpZykgPT4gdGhpcy51cGxvYWRDb25maWckLm5leHQocmVzKSk7XG4gIH1cblxuICAvKipcbiAgICogVXBsb2FkcyBkb2N1bWVudHMgdG8gdGhlIHNlcnZlci5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3Qgd2hpY2ggc2hvdWxkIGNvbnRhaW4gYWxsIGZpbGVzIHRvIGJlIHVwbG9hZGVkLlxuICAgKiBFYWNoIGZpbGUgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBGb3JtRGF0YSBvYmplY3Qgd2l0aCBpdHMgb3JpZ2luYWwgbmFtZS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICogZm9ybURhdGEuYXBwZW5kKGZpbGUubmFtZSwgZmlsZS5maWxlKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgY29udGFpbmluZyB0aGUgZmlsZXMgdG8gYmUgdXBsb2FkZWQuXG4gICAqIC0gRWFjaCBmaWxlIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgRm9ybURhdGEgb2JqZWN0IHdpdGggaXRzIG9yaWdpbmFsIG5hbWUuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAqIGZvcm1EYXRhLmFwcGVuZChmaWxlLm5hbWUsIGZpbGUuZmlsZSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZW5hYmxlUHJvZ3Jlc3MgLSAoT3B0aW9uYWwpIEEgYm9vbGVhbiBwYXJhbWV0ZXIgdGhhdCBjb250cm9scyB3aGV0aGVyIHByb2dyZXNzIHJlcG9ydGluZyBpcyBlbmFibGVkLlxuICAgKiAtIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICogLSBJZiBgdHJ1ZWAsIHRoZSBgcmVwb3J0UHJvZ3Jlc3NgIG9wdGlvbiBpcyBzZXQgaW4gdGhlIHJlcXVlc3Qgb3B0aW9ucywgZW5hYmxpbmcgdGhlIHRyYWNrIG9mIHVwbG9hZCBwcm9ncmVzcyBiYXNlZCBvbiB0aGUgdW5kZXJseWluZyBicm93c2VyJ3MgcHJvZ3Jlc3MgZXZlbnRzLlxuICAgKiAtIElmIGBmYWxzZWAsIHByb2dyZXNzIGV2ZW50cyBhcmUgbm90IHJlcG9ydGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgZXZlbnRzIG9mIHR5cGUgYFVwbG9hZEV2ZW50YDpcbiAgICogLSBgVXBsb2FkUHJvZ3Jlc3NFdmVudGA6IEVtaXR0ZWQgZHVyaW5nIHRoZSB1cGxvYWQgcHJvY2VzcywgY29udGFpbmluZzpcbiAgICogICAtICogIGB0eXBlYDogXCJ1cGxvYWRQcm9ncmVzc1wiIC0gVGhlIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgKiAgIC0gKiAgYGxvYWRlZGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXBsb2FkZWQgc28gZmFyLlxuICAgKiAgIC0gKiAgYHRvdGFsYDogbnVtYmVyIC0gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyB0byBiZSB1cGxvYWRlZCAoaWYgYXZhaWxhYmxlKS5cbiAgICogICAtICogIGBwcm9ncmVzc2A6IG51bWJlciAtIFRoZSBwZXJjZW50YWdlIG9mIHVwbG9hZCBwcm9ncmVzcyAoY2FsY3VsYXRlZCBhcyBgKGxvYWRlZCAvIHRvdGFsKSAqIDEwMGApLlxuICAgKiAtIGBVcGxvYWRSZXNwb25zZUV2ZW50YDogRW1pdHRlZCB3aGVuIHRoZSB1cGxvYWQgaXMgY29tcGxldGUsIGNvbnRhaW5pbmc6XG4gICAqICAgLSAqICBgdHlwZWA6IFwicmVzcG9uc2VcIiAtIFRoZSB0eXBlIG9mIHRoZSBldmVudC5cbiAgICogICAtICogIGBib2R5YDogYFVwbG9hZFJlc3BvbnNlYCAtIFRoZSBzZXJ2ZXIncyByZXNwb25zZSwgaW5jbHVkaW5nOlxuICAgKiAgICAgLSAqIC0gKiBgc3RhdHVzVG9rZW5gOiBzdHJpbmcgLSBBIHRva2VuIHRvIHRyYWNrIHRoZSBzdGF0dXMgb2YgdGhlIGluZGV4aW5nIHByb2Nlc3MuXG4gICAqICAgICAtICogLSAqICBgZXhlY3V0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHRha2VuIHRvIGV4ZWN1dGUgdGhlIHVwbG9hZC5cbiAgICogICAgIC0gKiAtICogIGBjb25uZWN0b3JSZXNwb25zZWAgKG9wdGlvbmFsKTogQWRkaXRpb25hbCByZXNwb25zZSBkYXRhIGZyb20gdGhlIGNvbm5lY3RvciwgY29udGFpbmluZzpcbiAgICogICAgICAgLSAqIC0gKiAtICogIGBjb2xsZWN0aW9uYDogc3RyaW5nIC0gVGhlIGNvbGxlY3Rpb24gbmFtZS5cbiAgICogICAgICAgLSAqIC0gKiAtICogIGBhY3Rpb25gOiBzdHJpbmcgLSBUaGUgYWN0aW9uIHBlcmZvcm1lZC5cbiAgICogICAgICAgLSAqIC0gKiAtICogIGBzdGF0c2A6IG9iamVjdCAtIFN0YXRpc3RpY3MgYWJvdXQgdGhlIHVwbG9hZCwgaW5jbHVkaW5nOlxuICAgKiAgICAgICAgIC0gKiAtICogLSAqIC0gKiBgbmJEb2NVcGRhdGVkYDogbnVtYmVyIC0gVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdXBkYXRlZC5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzdXBsb2FkYCBhY3Rpb24uXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICogZm9ybURhdGEuYXBwZW5kKGZpbGUubmFtZSwgZmlsZS5maWxlKTtcbiAgICogdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLnVwbG9hZERvY3VtZW50cyhmb3JtRGF0YSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICogICBpZiAoZXZlbnQudHlwZSA9PT0gJ3VwbG9hZFByb2dyZXNzJykge1xuICAgKiAgICAgY29uc29sZS5sb2coYFByb2dyZXNzOiAke2V2ZW50LnByb2dyZXNzfSVgKTtcbiAgICogICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdyZXNwb25zZScpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdVcGxvYWQgY29tcGxldGU6JywgZXZlbnQuYm9keSk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgdXBsb2FkRG9jdW1lbnRzKGZvcm1EYXRhOiBGb3JtRGF0YSwgZW5hYmxlUHJvZ3Jlc3M6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxVcGxvYWRFdmVudD4ge1xuICAgIC8vIEFkZCB0aGUgcmVxdWlyZWQgXCJkYXRhXCIgZmllbGQgYXMgYSBKU09OIHN0cmluZ1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZG9jdW1lbnRzdXBsb2FkXCIsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZVxuICAgIH07XG4gICAgZm9ybURhdGEuYXBwZW5kKCdkYXRhJywgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuXG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGNvbnN0IHRva2VuID0gZ2V0VG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmFwcGVuZCgnc2luZXF1YS1jc3JmLXRva2VuJywgdG9rZW4pO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgb2JzZXJ2ZTogJ2V2ZW50cycsXG4gICAgfTtcbiAgICBpZiAoZW5hYmxlUHJvZ3Jlc3MpIG9wdGlvbnNbJ3JlcG9ydFByb2dyZXNzJ10gPSB0cnVlO1xuXG4gICAgY29uc3QgdXJsID0gYCR7Z2xvYmFsQ29uZmlnLmJhY2tlbmRVcmx9LyR7dGhpcy5SRVFVRVNUX1VSTH1gO1xuICAgIC8qKlxuICAgICAqIE5lZWQgdG8gdXNlIHRoZSBIdHRwQ2xpZW50IGRpcmVjdGx5IHRvIGF2b2lkIHRoZSBKU09OTWV0aG9kUGx1Z2luU2VydmljZSdzIGJlaGF2aW9yXG4gICAgICogYmVjYXVzZSBpdCBpcyBhbHRlcmluZyB0aGUgcmVxdWVzdCBhbmQgdGh1cyBtYWtpbmcgaXQgdW5hYmxlIHRvIHByb3Blcmx5IHNldCB0aGUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIHRoZSBib3VuZGFyeVxuICAgICAqL1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHVybCwgZm9ybURhdGEsIG9wdGlvbnMpLnBpcGUoXG4gICAgICBmaWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgSHR0cFVwbG9hZFByb2dyZXNzRXZlbnQgfCBIdHRwUmVzcG9uc2U8YW55PiA9PlxuICAgICAgICBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlIHx8IChlbmFibGVQcm9ncmVzcyAmJiBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKVxuICAgICAgKSxcbiAgICAgIG1hcCgoZXZlbnQpOiBVcGxvYWRFdmVudCA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczoge1xuICAgICAgICAgICAgY29uc3QgeyBsb2FkZWQgPSAwLCB0b3RhbCA9IDAgfSA9IGV2ZW50O1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ3VwbG9hZFByb2dyZXNzJywgbG9hZGVkLCB0b3RhbCwgcHJvZ3Jlc3M6IHRvdGFsID4gMCA/IE1hdGgucm91bmQoKGxvYWRlZCAvIHRvdGFsKSAqIDEwMCkgOiAwIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6ICdyZXNwb25zZScsIGJvZHk6IGV2ZW50LmJvZHkgfTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBldmVudCB0eXBlXCIpOyAvLyBTaG91bGQgbm90IHJlYWNoIGhlcmUsIGJ1dCBmb3IgdHlwZXNjcmlwdCBzYWtlLlxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzdXBsb2FkOiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgaW5kZXhpbmcgc3RhdHVzIG9mIGEgcHJlZGVmaW5lZCB1cGxvYWRlZCBkb2N1bWVudChzKVxuICAgKiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgc3RhdHVzIHRva2VuIHJldHVybmVkIGZyb20gdGhlIHVwbG9hZCBwcm9jZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgc3RhdHVzIHRva2VuIHVzZWQgdG8gdHJhY2sgdGhlIGluZGV4aW5nIHByb2Nlc3MuXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2VydmVyIHJlc3BvbnNlIG9mIHR5cGUgYEluZGV4aW5nUmVzcG9uc2VgLlxuICAgKiBUaGUgYEluZGV4aW5nUmVzcG9uc2VgIG9iamVjdCBjb250YWluczpcbiAgICogLSBgZG9jc2A6IGFycmF5IC0gQW4gYXJyYXkgb2YgZG9jdW1lbnQgc3RhdHVzIG9iamVjdHMsIGVhY2ggY29udGFpbmluZzpcbiAgICogICAtICogYGlkYDogc3RyaW5nIC0gVGhlIGRvY3VtZW50IElELlxuICAgKiAgIC0gKiBgZmlsZU5hbWVgOiBzdHJpbmcgLSBUaGUgbmFtZSBvZiB0aGUgZmlsZS5cbiAgICogICAtICogYG9wZXJhdGlvbmA6IFwiQWRkXCIgfCBcIlVwZGF0ZVwiIC0gVGhlIG9wZXJhdGlvbiBwZXJmb3JtZWQgb24gdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgc3RhdHVzYDogXCJJbmRleGluZ1wiIHwgXCJJbmRleGVkXCIgfCBcIkVycm9yXCIgLSBUaGUgc3RhdHVzIG9mIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYHByZXZpb3VzSW5kZXhhdGlvblRpbWVgOiBzdHJpbmcgfCBudWxsIC0gVGhlIHByZXZpb3VzIGluZGV4YXRpb24gdGltZS5cbiAgICogICAtICogYGN1cnJlbnRJbmRleGF0aW9uVGltZWA6IHN0cmluZyB8IG51bGwgLSBUaGUgY3VycmVudCBpbmRleGF0aW9uIHRpbWUuXG4gICAqIC0gYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byByZXRyaWV2ZSB0aGUgaW5kZXhpbmcgc3RhdHVzLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW52b2tpbmcgdGhlIGBkb2N1bWVudHNVcGxvYWRTdGF0dXNgIGFjdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRJbmRleGluZ1N0YXR1cyh0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxJbmRleGluZ0luZm9zPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGFjdGlvbjogXCJkb2N1bWVudHNVcGxvYWRTdGF0dXNcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgc3RhdHVzVG9rZW46IHRva2VuXG4gICAgfTtcblxuICAgIHJldHVybiBmcm9tKHBvc3Q8SW5kZXhpbmdJbmZvcz4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c1VwbG9hZFN0YXR1czogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2NvbHVtbnNdIC0gT3B0aW9uYWwgYXJyYXkgb2YgYWRkaXRpb25hbCBpbmRleCBjb2x1bW5zIHRvIGluY2x1ZGUgZm9yIGVhY2ggZG9jdW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2tpcF0gLSBPcHRpb25hbCBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHNraXAgZm9yIHBhZ2luYXRpb24uIElmIHNldCwgY291bnQgYWxzbyBuZWVkcyB0byBiZSBzZXQuIE5vIHNraXAgaWYgbm90IHNldC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudF0gLSBPcHRpb25hbCBudW1iZXIgb2YgZG9jdW1lbnRzIHRvIHRha2UgZm9yIHBhZ2luYXRpb24gKHVubGltaXRlZCBpZiBub3Qgc2V0KS5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8VXBsb2FkZWREb2N1bWVudHM+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgdXBsb2FkZWQgZG9jdW1lbnRzLlxuICAgKiBUaGUgYFVwbG9hZGVkRG9jdW1lbnRzYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRvY3NgOiBhcnJheSAtIEFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGRvY3VtZW50IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gKiBgaWRgOiBzdHJpbmcgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBmaWxlTmFtZWA6IHN0cmluZyAtIFRoZSBuYW1lIG9mIHRoZSBmaWxlLlxuICAgKiAgIC0gKiBgdGl0bGVgOiBzdHJpbmcgLSBUaGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LlxuICAgKiAgIC0gKiBgZmlsZUV4dGA6IHN0cmluZyAtIFRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgZG9jdW1lbnQuXG4gICAqICAgLSAqIGBpbmRleGF0aW9uVGltZWA6IHN0cmluZyAtIFRoZSB0aW1lIHdoZW4gdGhlIGRvY3VtZW50IHdhcyBpbmRleGVkLlxuICAgKiAgIC0gKiBgc2l6ZWA6IG51bWJlciAtIFRoZSBzaXplIG9mIHRoZSBkb2N1bWVudC5cbiAgICogICAtICogYHNpemVEaXNwbGF5YDogc3RyaW5nIC0gQSBodW1hbi1yZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZG9jdW1lbnQgc2l6ZS5cbiAgICogICAtICogYFtrZXk6IHN0cmluZ11gOiBhbnkgLSBBZGRpdGlvbmFsIGNvbHVtbnMgYXNrZWQgaW4gdGhlIHJlcXVlc3QsIHZhbHVlIG9mIHRoZSBjb2x1bW4gZm9yIHRoZSBkb2N1bWVudC5cbiAgICogLSBgY291bnRgOiBudW1iZXIgLSBUaGUgY291bnQgb2YgZG9jdW1lbnRzIGluIHRoZSBjdXJyZW50IGJhdGNoIG9yIHN1YnNldC5cbiAgICogLSBgdG90YWxDb3VudGA6IG51bWJlciAtIFRoZSB0b3RhbCBjb3VudCBvZiBkb2N1bWVudHMgYXZhaWxhYmxlLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gcHJvY2VzcyB0aGUgZG9jdW1lbnRzLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxuICAgKi9cbiAgcHVibGljIGdldERvY3VtZW50c0xpc3QoY29sdW1ucz86IHN0cmluZ1tdLCBza2lwPzogbnVtYmVyLCBjb3VudD86IG51bWJlcik6IE9ic2VydmFibGU8VXBsb2FkZWREb2N1bWVudHM+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0xpc3RcIixcbiAgICAgIGFwcE5hbWU6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lXG4gICAgfTtcblxuICAgIGlmIChjb2x1bW5zKSBkYXRhW1wiY29sdW1uc1wiXSA9IGNvbHVtbnM7XG4gICAgaWYgKHNraXApIGRhdGFbXCJza2lwXCJdID0gc2tpcDtcbiAgICBpZiAoY291bnQpIGRhdGFbXCJjb3VudFwiXSA9IGNvdW50O1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxVcGxvYWRlZERvY3VtZW50cz4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICB0YXAoKHJlczogVXBsb2FkZWREb2N1bWVudHMpID0+IHRoaXMudXBsb2FkZWREb2N1bWVudHMkLm5leHQocmVzLmRvY3MpKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzTGlzdDogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1cGxvYWRlZCBkb2N1bWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkIElEcy5cbiAgICpcbiAgICogQHBhcmFtIGRvY0lkcyAtIEFuIGFycmF5IG9mIGRvY3VtZW50IElEcyB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2VydmVyIHJlc3BvbnNlIG9mIHR5cGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYC5cbiAgICogVGhlIGBkZWxldGVEb2N1bWVudHNSZXNwb25zZWAgb2JqZWN0IGNvbnRhaW5zOlxuICAgKiAtIGBkZWxldGVkQ291bnRgOiBudW1iZXIgLSBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgZG9jdW1lbnRzLlxuICAgKiAtIGBleGVjdXRpb25UaW1lYDogc3RyaW5nIC0gVGhlIHRpbWUgdGFrZW4gdG8gZGVsZXRlIHRoZSBkb2N1bWVudHMuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSBpcyBhbiBlcnJvciBpbnZva2luZyB0aGUgYGRvY3VtZW50c0RlbGV0ZWAgYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZURvY3VtZW50cyhkb2NJZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxkZWxldGVEb2N1bWVudHNSZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBhY3Rpb246IFwiZG9jdW1lbnRzRGVsZXRlXCIsXG4gICAgICBkb2NJZHMsXG4gICAgICBhcHBOYW1lOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZVxuICAgIH07XG5cbiAgICByZXR1cm4gZnJvbShwb3N0PGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlPih0aGlzLlJFUVVFU1RfVVJMLCBkYXRhKSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgaW52b2tpbmcgZG9jdW1lbnRzRGVsZXRlOiAke2Vycm9yfWApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHVwbG9hZGVkIGRvY3VtZW50cy5cbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugb2YgdHlwZSBgZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2VgLlxuICAgKiBUaGUgYGRlbGV0ZURvY3VtZW50c1Jlc3BvbnNlYCBvYmplY3QgY29udGFpbnM6XG4gICAqIC0gYGRlbGV0ZWRDb3VudGA6IG51bWJlciAtIFRoZSBudW1iZXIgb2YgZGVsZXRlZCBkb2N1bWVudHMuXG4gICAqIC0gYGV4ZWN1dGlvblRpbWVgOiBzdHJpbmcgLSBUaGUgdGltZSB0YWtlbiB0byBkZWxldGUgdGhlIGRvY3VtZW50cy5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZXJlIGlzIGFuIGVycm9yIGludm9raW5nIHRoZSBgZG9jdW1lbnRzRGVsZXRlQWxsYCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlQWxsRG9jdW1lbnRzKCk6IE9ic2VydmFibGU8ZGVsZXRlRG9jdW1lbnRzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgYWN0aW9uOiBcImRvY3VtZW50c0RlbGV0ZUFsbFwiLFxuICAgICAgYXBwTmFtZTogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZyb20ocG9zdDxkZWxldGVEb2N1bWVudHNSZXNwb25zZT4odGhpcy5SRVFVRVNUX1VSTCwgZGF0YSkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGludm9raW5nIGRvY3VtZW50c0RlbGV0ZUFsbDogJHtlcnJvcn1gKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHRoZSBnaXZlbiBmaWxlIHNpemUgaW4gYnl0ZXMgaW50byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGJ5dGVzIC0gVGhlIHNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZmlsZSBzaXplIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0IChlLmcuLCBcIjEwLjI0IEtCXCIsIFwiMS4wMCBNQlwiKS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRGaWxlU2l6ZShieXRlczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiBcIjAgQnl0ZXNcIjtcbiAgICBjb25zdCBrID0gMTAyNDtcbiAgICBjb25zdCBzaXplcyA9IFtcIkJ5dGVzXCIsIFwiS0JcIiwgXCJNQlwiLCBcIkdCXCIsIFwiVEJcIl07XG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIucGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyBcIiBcIiArIHNpemVzW2ldXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gZmlsZSBzaXplIGluIGJ5dGVzIGludG8gbWVnYWJ5dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gYnl0ZXMgLSBUaGUgc2l6ZSBvZiB0aGUgZmlsZSBpbiBieXRlcy5cbiAgICogQHJldHVybnMgVGhlIHNpemUgb2YgdGhlIGZpbGUgaW4gbWVnYWJ5dGVzLlxuICAgKi9cbiAgcHVibGljIGNvbnZlcnRCeXRlc1RvTUIoYnl0ZXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGJ5dGVzIC8gKDEwMjQgKiAxMDI0KTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/app/core/app-injector.ts
|
|
2
|
+
/**
|
|
3
|
+
* Static variable to hold the root Angular Injector.
|
|
4
|
+
* This is necessary to retrieve services outside of Angular's dependency injection context.
|
|
5
|
+
*/
|
|
6
|
+
let appInjector;
|
|
7
|
+
/**
|
|
8
|
+
* Function to set the global Injector reference.
|
|
9
|
+
*/
|
|
10
|
+
export function setAppInjector(injector) {
|
|
11
|
+
appInjector = injector;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Function to retrieve the global Injector reference.
|
|
15
|
+
*/
|
|
16
|
+
export function getAppInjector() {
|
|
17
|
+
return appInjector;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZmV0Y2gtcGF0Y2hlci9hcHAtaW5qZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBSS9COzs7R0FHRztBQUNILElBQUksV0FBcUIsQ0FBQztBQUUxQjs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBa0I7SUFDL0MsV0FBVyxHQUFHLFFBQVEsQ0FBQztBQUN6QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2FwcC9jb3JlL2FwcC1pbmplY3Rvci50c1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBTdGF0aWMgdmFyaWFibGUgdG8gaG9sZCB0aGUgcm9vdCBBbmd1bGFyIEluamVjdG9yLlxyXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSBzZXJ2aWNlcyBvdXRzaWRlIG9mIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiBjb250ZXh0LlxyXG4gKi9cclxubGV0IGFwcEluamVjdG9yOiBJbmplY3RvcjtcclxuXHJcbi8qKlxyXG4gKiBGdW5jdGlvbiB0byBzZXQgdGhlIGdsb2JhbCBJbmplY3RvciByZWZlcmVuY2UuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXBwSW5qZWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKTogdm9pZCB7XHJcbiAgYXBwSW5qZWN0b3IgPSBpbmplY3RvcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBnbG9iYWwgSW5qZWN0b3IgcmVmZXJlbmNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICByZXR1cm4gYXBwSW5qZWN0b3I7XHJcbn0iXX0=
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// src/app/core/fetch-patcher.ts
|
|
2
|
+
import { getAppInjector } from './app-injector';
|
|
3
|
+
import { GlobalErrorHandlerService } from './global-error-handler.service';
|
|
4
|
+
/**
|
|
5
|
+
* Initializes a global fetch interceptor that patches the native window.fetch function.
|
|
6
|
+
*
|
|
7
|
+
* This function replaces the browser's native fetch with a custom implementation that:
|
|
8
|
+
* - Preserves all original fetch functionality and behavior
|
|
9
|
+
* - Intercepts HTTP responses that are not successful (!response.ok)
|
|
10
|
+
* - Automatically handles errors through the GlobalErrorHandlerService when available
|
|
11
|
+
* - Logs network errors to the console for debugging purposes
|
|
12
|
+
*
|
|
13
|
+
* The interceptor uses Angular's dependency injection system to retrieve the
|
|
14
|
+
* GlobalErrorHandlerService and delegate error handling to it. If the injector
|
|
15
|
+
* is not available, the function gracefully continues without error handling.
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* - This function should be called once during application initialization
|
|
19
|
+
* - The original fetch function is preserved and all requests are forwarded to it
|
|
20
|
+
* - Non-ok responses are still returned to the caller after error handling
|
|
21
|
+
* - Network errors (connection failures, etc.) are logged and re-thrown
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Call during app initialization
|
|
26
|
+
* initializeFetchInterceptor();
|
|
27
|
+
*
|
|
28
|
+
* // All subsequent fetch calls will be automatically intercepted
|
|
29
|
+
* fetch('/api/data').then(response => {
|
|
30
|
+
* // Error handling already occurred if response was not ok
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function initializeFetchInterceptor() {
|
|
35
|
+
const originalFetch = window.fetch;
|
|
36
|
+
window.fetch = async function (...args) {
|
|
37
|
+
const url = args[0] instanceof Request ? args[0].url : args[0];
|
|
38
|
+
try {
|
|
39
|
+
// @ts-ignore
|
|
40
|
+
const response = await originalFetch.apply(this, args);
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
// --- THE BRIDGE ---
|
|
43
|
+
const injector = getAppInjector();
|
|
44
|
+
if (injector) {
|
|
45
|
+
// Retrieve the service instance using the injector
|
|
46
|
+
const errorHandler = injector.get(GlobalErrorHandlerService);
|
|
47
|
+
// Call the service method with the error details
|
|
48
|
+
errorHandler.handleFetchError(url, response.status, response.statusText);
|
|
49
|
+
}
|
|
50
|
+
// ------------------
|
|
51
|
+
return response;
|
|
52
|
+
}
|
|
53
|
+
return response;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
// Handle network errors here (if needed)
|
|
57
|
+
console.error(`[FETCH PATCHER] Network Error for ${url}:`, error);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2ZldGNoLXBhdGNoZXIvZmV0Y2gtcGF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQ0FBZ0M7QUFFaEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQUNILE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUVuQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssV0FBVyxHQUFHLElBQVM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQztZQUNILGFBQWE7WUFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQVcsQ0FBQyxDQUFDO1lBRTlELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pCLHFCQUFxQjtnQkFDckIsTUFBTSxRQUFRLEdBQWEsY0FBYyxFQUFFLENBQUM7Z0JBQzVDLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsbURBQW1EO29CQUNuRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBRTdELGlEQUFpRDtvQkFDakQsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztnQkFDRCxxQkFBcUI7Z0JBRXJCLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUVsQixDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQix5Q0FBeUM7WUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBd0IsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc3JjL2FwcC9jb3JlL2ZldGNoLXBhdGNoZXIudHNcclxuXHJcbmltcG9ydCB7IGdldEFwcEluamVjdG9yIH0gZnJvbSAnLi9hcHAtaW5qZWN0b3InO1xyXG5pbXBvcnQgeyBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnLi9nbG9iYWwtZXJyb3ItaGFuZGxlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBJbml0aWFsaXplcyBhIGdsb2JhbCBmZXRjaCBpbnRlcmNlcHRvciB0aGF0IHBhdGNoZXMgdGhlIG5hdGl2ZSB3aW5kb3cuZmV0Y2ggZnVuY3Rpb24uXHJcbiAqXHJcbiAqIFRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgdGhlIGJyb3dzZXIncyBuYXRpdmUgZmV0Y2ggd2l0aCBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB0aGF0OlxyXG4gKiAtIFByZXNlcnZlcyBhbGwgb3JpZ2luYWwgZmV0Y2ggZnVuY3Rpb25hbGl0eSBhbmQgYmVoYXZpb3JcclxuICogLSBJbnRlcmNlcHRzIEhUVFAgcmVzcG9uc2VzIHRoYXQgYXJlIG5vdCBzdWNjZXNzZnVsICghcmVzcG9uc2Uub2spXHJcbiAqIC0gQXV0b21hdGljYWxseSBoYW5kbGVzIGVycm9ycyB0aHJvdWdoIHRoZSBHbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlIHdoZW4gYXZhaWxhYmxlXHJcbiAqIC0gTG9ncyBuZXR3b3JrIGVycm9ycyB0byB0aGUgY29uc29sZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzXHJcbiAqXHJcbiAqIFRoZSBpbnRlcmNlcHRvciB1c2VzIEFuZ3VsYXIncyBkZXBlbmRlbmN5IGluamVjdGlvbiBzeXN0ZW0gdG8gcmV0cmlldmUgdGhlXHJcbiAqIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UgYW5kIGRlbGVnYXRlIGVycm9yIGhhbmRsaW5nIHRvIGl0LiBJZiB0aGUgaW5qZWN0b3JcclxuICogaXMgbm90IGF2YWlsYWJsZSwgdGhlIGZ1bmN0aW9uIGdyYWNlZnVsbHkgY29udGludWVzIHdpdGhvdXQgZXJyb3IgaGFuZGxpbmcuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIC0gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9uY2UgZHVyaW5nIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uXHJcbiAqIC0gVGhlIG9yaWdpbmFsIGZldGNoIGZ1bmN0aW9uIGlzIHByZXNlcnZlZCBhbmQgYWxsIHJlcXVlc3RzIGFyZSBmb3J3YXJkZWQgdG8gaXRcclxuICogLSBOb24tb2sgcmVzcG9uc2VzIGFyZSBzdGlsbCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGFmdGVyIGVycm9yIGhhbmRsaW5nXHJcbiAqIC0gTmV0d29yayBlcnJvcnMgKGNvbm5lY3Rpb24gZmFpbHVyZXMsIGV0Yy4pIGFyZSBsb2dnZWQgYW5kIHJlLXRocm93blxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIC8vIENhbGwgZHVyaW5nIGFwcCBpbml0aWFsaXphdGlvblxyXG4gKiBpbml0aWFsaXplRmV0Y2hJbnRlcmNlcHRvcigpO1xyXG4gKlxyXG4gKiAvLyBBbGwgc3Vic2VxdWVudCBmZXRjaCBjYWxscyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW50ZXJjZXB0ZWRcclxuICogZmV0Y2goJy9hcGkvZGF0YScpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gKiAgIC8vIEVycm9yIGhhbmRsaW5nIGFscmVhZHkgb2NjdXJyZWQgaWYgcmVzcG9uc2Ugd2FzIG5vdCBva1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUZldGNoSW50ZXJjZXB0b3IoKTogdm9pZCB7XHJcbiAgY29uc3Qgb3JpZ2luYWxGZXRjaCA9IHdpbmRvdy5mZXRjaDtcclxuXHJcbiAgd2luZG93LmZldGNoID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IGFueSk6IFByb21pc2U8UmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHVybCA9IGFyZ3NbMF0gaW5zdGFuY2VvZiBSZXF1ZXN0ID8gYXJnc1swXS51cmwgOiBhcmdzWzBdO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcmlnaW5hbEZldGNoLmFwcGx5KHRoaXMsIGFyZ3MgYXMgYW55KTtcclxuXHJcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcclxuICAgICAgICAvLyAtLS0gVEhFIEJSSURHRSAtLS1cclxuICAgICAgICBjb25zdCBpbmplY3RvcjogSW5qZWN0b3IgPSBnZXRBcHBJbmplY3RvcigpO1xyXG4gICAgICAgIGlmIChpbmplY3Rvcikge1xyXG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIHNlcnZpY2UgaW5zdGFuY2UgdXNpbmcgdGhlIGluamVjdG9yXHJcbiAgICAgICAgICBjb25zdCBlcnJvckhhbmRsZXIgPSBpbmplY3Rvci5nZXQoR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSk7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgc2VydmljZSBtZXRob2Qgd2l0aCB0aGUgZXJyb3IgZGV0YWlsc1xyXG4gICAgICAgICAgZXJyb3JIYW5kbGVyLmhhbmRsZUZldGNoRXJyb3IodXJsLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAvLyBIYW5kbGUgbmV0d29yayBlcnJvcnMgaGVyZSAoaWYgbmVlZGVkKVxyXG4gICAgICBjb25zb2xlLmVycm9yKGBbRkVUQ0ggUEFUQ0hFUl0gTmV0d29yayBFcnJvciBmb3IgJHt1cmx9OmAsIGVycm9yKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfSBhcyB0eXBlb2Ygd2luZG93LmZldGNoO1xyXG59Il19
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Injection Token for the specific function to execute on a 401 Unauthorized error.
|
|
5
|
+
*/
|
|
6
|
+
export const ASSISTANT_UNAUTHORIZED_ACTION_TOKEN = new InjectionToken('Function to execute on 401 unauthorized');
|
|
7
|
+
export class GlobalErrorHandlerService {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.unauthorizedAction = inject(ASSISTANT_UNAUTHORIZED_ACTION_TOKEN, { optional: true });
|
|
10
|
+
/** Prevents infinite unauthorized attempts */
|
|
11
|
+
this._authAttempted = false;
|
|
12
|
+
/** Tracks if a re-authentication process is currently in progress */
|
|
13
|
+
this._reauthInProgress = false;
|
|
14
|
+
this.authEventListener = null;
|
|
15
|
+
this.setupAuthEventListener();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Sets up a global listener for the `authenticated` event.
|
|
19
|
+
* When re-authentication succeeds (authenticated === true),
|
|
20
|
+
* reset the auth lock so another 401 can trigger again later.
|
|
21
|
+
*/
|
|
22
|
+
setupAuthEventListener() {
|
|
23
|
+
this.authEventListener = (event) => {
|
|
24
|
+
const detail = event.detail;
|
|
25
|
+
if (detail?.authenticated) {
|
|
26
|
+
console.info('[GLOBAL HANDLER] Authentication succeeded. Resetting 401 lock.');
|
|
27
|
+
this._authAttempted = false;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
window.addEventListener('authenticated', this.authEventListener);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Main entry point to handle fetch or HTTP errors globally.
|
|
34
|
+
*/
|
|
35
|
+
handleFetchError(url, status, statusText) {
|
|
36
|
+
console.error(`[GLOBAL HANDLER] Status: ${status} on ${url}. ${statusText}`);
|
|
37
|
+
if (status === 401) {
|
|
38
|
+
this.handleUnauthorized();
|
|
39
|
+
}
|
|
40
|
+
else if (status >= 500) {
|
|
41
|
+
console.warn('[GLOBAL HANDLER] Server error (5xx). Please try again later.');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Handles 401 errors by triggering re-authentication only once
|
|
46
|
+
* until authentication is restored (via the DOM event).
|
|
47
|
+
*/
|
|
48
|
+
async handleUnauthorized() {
|
|
49
|
+
if (this._authAttempted) {
|
|
50
|
+
console.warn('[GLOBAL HANDLER] 401 received, but auth already attempted. Ignoring new attempt.');
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (this._reauthInProgress) {
|
|
54
|
+
console.warn('[GLOBAL HANDLER] Re-authentication already in progress. Ignoring multiple network calls that might hit 401 simultaneously. only the first triggers the handler');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!this.unauthorizedAction) {
|
|
58
|
+
console.warn('[GLOBAL HANDLER] Unauthorized (401). No action defined.');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this._authAttempted = true;
|
|
62
|
+
this._reauthInProgress = true;
|
|
63
|
+
console.log('[GLOBAL HANDLER] Unauthorized (401). Triggering the handler...');
|
|
64
|
+
try {
|
|
65
|
+
await Promise.resolve(this.unauthorizedAction());
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('[GLOBAL HANDLER] Error during unauthorizedAction:', error);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
this._reauthInProgress = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Clean up global event listener when Angular destroys this service.
|
|
76
|
+
*/
|
|
77
|
+
ngOnDestroy() {
|
|
78
|
+
if (this.authEventListener) {
|
|
79
|
+
window.removeEventListener('authenticated', this.authEventListener);
|
|
80
|
+
this.authEventListener = null;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
84
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
|
|
87
|
+
type: Injectable,
|
|
88
|
+
args: [{
|
|
89
|
+
providedIn: 'root',
|
|
90
|
+
}]
|
|
91
|
+
}], ctorParameters: () => [] });
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWVycm9yLWhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2ZldGNoLXBhdGNoZXIvZ2xvYmFsLWVycm9yLWhhbmRsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRW5FOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQ25FLHlDQUF5QyxDQUMxQyxDQUFDO0FBS0YsTUFBTSxPQUFPLHlCQUF5QjtJQVdwQztRQVZRLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxtQ0FBbUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTdGLDhDQUE4QztRQUN0QyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUUvQixxRUFBcUU7UUFDN0Qsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCLHNCQUFpQixHQUFvQyxJQUFJLENBQUM7UUFHaEUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0I7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUksS0FBaUQsQ0FBQyxNQUFNLENBQUM7WUFDekUsSUFBSSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxVQUFrQjtRQUM5RCxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixNQUFNLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFFN0UsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxrQkFBa0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrRkFBa0YsQ0FBQyxDQUFDO1lBQ2pHLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLGdLQUFnSyxDQUFDLENBQUM7WUFDL0ssT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU5QixPQUFPLENBQUMsR0FBRyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVFLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQzsrR0F2RlUseUJBQXlCO21IQUF6Qix5QkFBeUIsY0FGeEIsTUFBTTs7NEZBRVAseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBJbmplY3Rpb24gVG9rZW4gZm9yIHRoZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBleGVjdXRlIG9uIGEgNDAxIFVuYXV0aG9yaXplZCBlcnJvci5cclxuICovXHJcbmV4cG9ydCBjb25zdCBBU1NJU1RBTlRfVU5BVVRIT1JJWkVEX0FDVElPTl9UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjwoKSA9PiB2b2lkPihcclxuICAnRnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiA0MDEgdW5hdXRob3JpemVkJ1xyXG4pO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2Uge1xyXG4gIHByaXZhdGUgdW5hdXRob3JpemVkQWN0aW9uID0gaW5qZWN0KEFTU0lTVEFOVF9VTkFVVEhPUklaRURfQUNUSU9OX1RPS0VOLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAvKiogUHJldmVudHMgaW5maW5pdGUgdW5hdXRob3JpemVkIGF0dGVtcHRzICovXHJcbiAgcHJpdmF0ZSBfYXV0aEF0dGVtcHRlZCA9IGZhbHNlO1xyXG5cclxuICAvKiogVHJhY2tzIGlmIGEgcmUtYXV0aGVudGljYXRpb24gcHJvY2VzcyBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cclxuICBwcml2YXRlIF9yZWF1dGhJblByb2dyZXNzID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgYXV0aEV2ZW50TGlzdGVuZXI6ICgoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuc2V0dXBBdXRoRXZlbnRMaXN0ZW5lcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB1cCBhIGdsb2JhbCBsaXN0ZW5lciBmb3IgdGhlIGBhdXRoZW50aWNhdGVkYCBldmVudC5cclxuICAgKiBXaGVuIHJlLWF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRzIChhdXRoZW50aWNhdGVkID09PSB0cnVlKSxcclxuICAgKiByZXNldCB0aGUgYXV0aCBsb2NrIHNvIGFub3RoZXIgNDAxIGNhbiB0cmlnZ2VyIGFnYWluIGxhdGVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBBdXRoRXZlbnRMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMuYXV0aEV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IGRldGFpbCA9IChldmVudCBhcyBDdXN0b21FdmVudDx7IGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gfT4pLmRldGFpbDtcclxuICAgICAgaWYgKGRldGFpbD8uYXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW0dMT0JBTCBIQU5ETEVSXSBBdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQuIFJlc2V0dGluZyA0MDEgbG9jay4nKTtcclxuICAgICAgICB0aGlzLl9hdXRoQXR0ZW1wdGVkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2F1dGhlbnRpY2F0ZWQnLCB0aGlzLmF1dGhFdmVudExpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1haW4gZW50cnkgcG9pbnQgdG8gaGFuZGxlIGZldGNoIG9yIEhUVFAgZXJyb3JzIGdsb2JhbGx5LlxyXG4gICAqL1xyXG4gIGhhbmRsZUZldGNoRXJyb3IodXJsOiBzdHJpbmcsIHN0YXR1czogbnVtYmVyLCBzdGF0dXNUZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoYFtHTE9CQUwgSEFORExFUl0gU3RhdHVzOiAke3N0YXR1c30gb24gJHt1cmx9LiAke3N0YXR1c1RleHR9YCk7XHJcblxyXG4gICAgaWYgKHN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlVW5hdXRob3JpemVkKCk7XHJcbiAgICB9IGVsc2UgaWYgKHN0YXR1cyA+PSA1MDApIHtcclxuICAgICAgY29uc29sZS53YXJuKCdbR0xPQkFMIEhBTkRMRVJdIFNlcnZlciBlcnJvciAoNXh4KS4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgNDAxIGVycm9ycyBieSB0cmlnZ2VyaW5nIHJlLWF1dGhlbnRpY2F0aW9uIG9ubHkgb25jZVxyXG4gICAqIHVudGlsIGF1dGhlbnRpY2F0aW9uIGlzIHJlc3RvcmVkICh2aWEgdGhlIERPTSBldmVudCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVVbmF1dGhvcml6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fYXV0aEF0dGVtcHRlZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1tHTE9CQUwgSEFORExFUl0gNDAxIHJlY2VpdmVkLCBidXQgYXV0aCBhbHJlYWR5IGF0dGVtcHRlZC4gSWdub3JpbmcgbmV3IGF0dGVtcHQuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVhdXRoSW5Qcm9ncmVzcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ1tHTE9CQUwgSEFORExFUl0gUmUtYXV0aGVudGljYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcy4gSWdub3JpbmcgbXVsdGlwbGUgbmV0d29yayBjYWxscyB0aGF0IG1pZ2h0IGhpdCA0MDEgc2ltdWx0YW5lb3VzbHkuIG9ubHkgdGhlIGZpcnN0IHRyaWdnZXJzIHRoZSBoYW5kbGVyJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMudW5hdXRob3JpemVkQWN0aW9uKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignW0dMT0JBTCBIQU5ETEVSXSBVbmF1dGhvcml6ZWQgKDQwMSkuIE5vIGFjdGlvbiBkZWZpbmVkLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYXV0aEF0dGVtcHRlZCA9IHRydWU7XHJcbiAgICB0aGlzLl9yZWF1dGhJblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygnW0dMT0JBTCBIQU5ETEVSXSBVbmF1dGhvcml6ZWQgKDQwMSkuIFRyaWdnZXJpbmcgdGhlIGhhbmRsZXIuLi4nKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy51bmF1dGhvcml6ZWRBY3Rpb24oKSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbR0xPQkFMIEhBTkRMRVJdIEVycm9yIGR1cmluZyB1bmF1dGhvcml6ZWRBY3Rpb246JywgZXJyb3IpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5fcmVhdXRoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYW4gdXAgZ2xvYmFsIGV2ZW50IGxpc3RlbmVyIHdoZW4gQW5ndWxhciBkZXN0cm95cyB0aGlzIHNlcnZpY2UuXHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hdXRoRXZlbnRMaXN0ZW5lcikge1xyXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYXV0aGVudGljYXRlZCcsIHRoaXMuYXV0aEV2ZW50TGlzdGVuZXIpO1xyXG4gICAgICB0aGlzLmF1dGhFdmVudExpc3RlbmVyID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles unauthorized HTTP responses (401) by clearing session data and reloading the page.
|
|
3
|
+
*
|
|
4
|
+
* This function is triggered when a 401 Unauthorized response is detected during API calls.
|
|
5
|
+
* It performs cleanup operations by removing stored credentials from session storage
|
|
6
|
+
* and forces a page reload to redirect the user to the login flow.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
* This function directly manipulates the browser's session storage and window location,
|
|
10
|
+
* making it suitable for client-side applications only.
|
|
11
|
+
*
|
|
12
|
+
*/
|
|
13
|
+
export const handleUnauthorizedLogic = () => {
|
|
14
|
+
console.log("[TOKEN LOGIC] 401 Unauthorized detected. Executing function from Token.");
|
|
15
|
+
// // Custom logic: Clear session data and force a page reload
|
|
16
|
+
sessionStorage.removeItem('sinequa-credentials');
|
|
17
|
+
window.location.reload();
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXVuYXV0aG9yaXplZC1sb2dpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L2ZldGNoLXBhdGNoZXIvaGFuZGxlLXVuYXV0aG9yaXplZC1sb2dpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEdBQVMsRUFBRTtJQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7SUFFdkYsOERBQThEO0lBQzlELGNBQWMsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQTtJQUNoRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBIYW5kbGVzIHVuYXV0aG9yaXplZCBIVFRQIHJlc3BvbnNlcyAoNDAxKSBieSBjbGVhcmluZyBzZXNzaW9uIGRhdGEgYW5kIHJlbG9hZGluZyB0aGUgcGFnZS5cclxuICpcclxuICogVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiBhIDQwMSBVbmF1dGhvcml6ZWQgcmVzcG9uc2UgaXMgZGV0ZWN0ZWQgZHVyaW5nIEFQSSBjYWxscy5cclxuICogSXQgcGVyZm9ybXMgY2xlYW51cCBvcGVyYXRpb25zIGJ5IHJlbW92aW5nIHN0b3JlZCBjcmVkZW50aWFscyBmcm9tIHNlc3Npb24gc3RvcmFnZVxyXG4gKiBhbmQgZm9yY2VzIGEgcGFnZSByZWxvYWQgdG8gcmVkaXJlY3QgdGhlIHVzZXIgdG8gdGhlIGxvZ2luIGZsb3cuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIFRoaXMgZnVuY3Rpb24gZGlyZWN0bHkgbWFuaXB1bGF0ZXMgdGhlIGJyb3dzZXIncyBzZXNzaW9uIHN0b3JhZ2UgYW5kIHdpbmRvdyBsb2NhdGlvbixcclxuICogbWFraW5nIGl0IHN1aXRhYmxlIGZvciBjbGllbnQtc2lkZSBhcHBsaWNhdGlvbnMgb25seS5cclxuICpcclxuICovXHJcbmV4cG9ydCBjb25zdCBoYW5kbGVVbmF1dGhvcml6ZWRMb2dpYyA9ICgpOiB2b2lkID0+IHtcclxuICBjb25zb2xlLmxvZyhcIltUT0tFTiBMT0dJQ10gNDAxIFVuYXV0aG9yaXplZCBkZXRlY3RlZC4gRXhlY3V0aW5nIGZ1bmN0aW9uIGZyb20gVG9rZW4uXCIpO1xyXG5cclxuICAvLyAvLyBDdXN0b20gbG9naWM6IENsZWFyIHNlc3Npb24gZGF0YSBhbmQgZm9yY2UgYSBwYWdlIHJlbG9hZFxyXG4gIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3NpbmVxdWEtY3JlZGVudGlhbHMnKVxyXG4gIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxufTsiXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const ASSISTANT_MARKDOWN_IT_PLUGINS = new InjectionToken('ASSISTANT_MARKDOWN_IT_PLUGINS', {
|
|
3
|
+
providedIn: 'root',
|
|
4
|
+
factory: () => [], // default to empty array
|
|
5
|
+
});
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Rvd24taXQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvbWFya2Rvd24taXQvbWFya2Rvd24taXQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxjQUFjLENBQzdELCtCQUErQixFQUMvQjtJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUseUJBQXlCO0NBQzdDLENBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSBNYXJrZG93bkl0IGZyb20gJ21hcmtkb3duLWl0JztcblxuZXhwb3J0IHR5cGUgTWFya2Rvd25JdFBsdWdpbiA9IChtZDogTWFya2Rvd25JdCwgLi4ucGFyYW1zOiBhbnlbXSkgPT4gdm9pZDtcblxuZXhwb3J0IGNvbnN0IEFTU0lTVEFOVF9NQVJLRE9XTl9JVF9QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuPE1hcmtkb3duSXRQbHVnaW5bXT4oXG4gICdBU1NJU1RBTlRfTUFSS0RPV05fSVRfUExVR0lOUycsXG4gIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gW10sIC8vIGRlZmF1bHQgdG8gZW1wdHkgYXJyYXlcbiAgfVxuKTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function markdownItCodeBlockPlugin(md) {
|
|
2
|
+
const defaultFenceRenderer = md.renderer.rules.fence;
|
|
3
|
+
md.renderer.rules.fence = (tokens, idx, options, env, self) => {
|
|
4
|
+
const token = tokens[idx];
|
|
5
|
+
const info = token.info ? md.utils.unescapeAll(token.info).trim() : '';
|
|
6
|
+
const langName = info.split(/(\s+)/g)[0];
|
|
7
|
+
const defaultRendered = defaultFenceRenderer(tokens, idx, options, env, self);
|
|
8
|
+
// We add a wrapper and a copy button.
|
|
9
|
+
// The button will have an attribute `[copy-to-clipboard]` which can be handled by an Angular directive
|
|
10
|
+
// to implement the copy functionality. The code to be copied is projected into the component.
|
|
11
|
+
return `<code-block langname="${langName}">${defaultRendered}</code-block>`;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1ibG9jay5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tYXJrZG93bi1pdC9wbHVnaW5zL2NvZGUtYmxvY2sucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxFQUFjO0lBQ3RELE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBTSxDQUFDO0lBRXRELEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM1RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFOUUsc0NBQXNDO1FBQ3RDLHVHQUF1RztRQUN2Ryw4RkFBOEY7UUFDOUYsT0FBTyx5QkFBeUIsUUFBUSxLQUFLLGVBQWUsZUFBZSxDQUFDO0lBQzlFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBNYXJrZG93bkl0IGZyb20gXCJtYXJrZG93bi1pdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gbWFya2Rvd25JdENvZGVCbG9ja1BsdWdpbihtZDogTWFya2Rvd25JdCkge1xuICBjb25zdCBkZWZhdWx0RmVuY2VSZW5kZXJlciA9IG1kLnJlbmRlcmVyLnJ1bGVzLmZlbmNlITtcblxuICBtZC5yZW5kZXJlci5ydWxlcy5mZW5jZSA9ICh0b2tlbnMsIGlkeCwgb3B0aW9ucywgZW52LCBzZWxmKSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaWR4XTtcbiAgICBjb25zdCBpbmZvID0gdG9rZW4uaW5mbyA/IG1kLnV0aWxzLnVuZXNjYXBlQWxsKHRva2VuLmluZm8pLnRyaW0oKSA6ICcnO1xuICAgIGNvbnN0IGxhbmdOYW1lID0gaW5mby5zcGxpdCgvKFxccyspL2cpWzBdO1xuICAgIGNvbnN0IGRlZmF1bHRSZW5kZXJlZCA9IGRlZmF1bHRGZW5jZVJlbmRlcmVyKHRva2VucywgaWR4LCBvcHRpb25zLCBlbnYsIHNlbGYpO1xuXG4gICAgLy8gV2UgYWRkIGEgd3JhcHBlciBhbmQgYSBjb3B5IGJ1dHRvbi5cbiAgICAvLyBUaGUgYnV0dG9uIHdpbGwgaGF2ZSBhbiBhdHRyaWJ1dGUgYFtjb3B5LXRvLWNsaXBib2FyZF1gIHdoaWNoIGNhbiBiZSBoYW5kbGVkIGJ5IGFuIEFuZ3VsYXIgZGlyZWN0aXZlXG4gICAgLy8gdG8gaW1wbGVtZW50IHRoZSBjb3B5IGZ1bmN0aW9uYWxpdHkuIFRoZSBjb2RlIHRvIGJlIGNvcGllZCBpcyBwcm9qZWN0ZWQgaW50byB0aGUgY29tcG9uZW50LlxuICAgIHJldHVybiBgPGNvZGUtYmxvY2sgbGFuZ25hbWU9XCIke2xhbmdOYW1lfVwiPiR7ZGVmYXVsdFJlbmRlcmVkfTwvY29kZS1ibG9jaz5gO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A markdown-it plugin to convert [n] where n is a number into a <document-reference id="n">n</document-reference> HTML tag.
|
|
3
|
+
*
|
|
4
|
+
* For example, when attachment 123 is found in the referencesMap, [123] will be converted to <document-reference id="123">123</document-reference>.
|
|
5
|
+
* If the attachment is not found, it will remain as plain text [123] in a span tag : <span>[123]</span>
|
|
6
|
+
*/
|
|
7
|
+
export function markdownItDocumentReferencePlugin(md) {
|
|
8
|
+
function referenceifyNumber(state, silent) {
|
|
9
|
+
const referencesMap = state.env.referencesMap || new Map();
|
|
10
|
+
const char = state.src.charCodeAt(state.pos);
|
|
11
|
+
// Check if the current character is '['
|
|
12
|
+
if (char !== 0x5B /* [ */) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const start = state.pos + 1;
|
|
16
|
+
let end = -1;
|
|
17
|
+
// Find the closing ']'
|
|
18
|
+
for (let i = start; i < state.src.length; i++) {
|
|
19
|
+
if (state.src.charCodeAt(i) === 0x5D /* ] */) {
|
|
20
|
+
end = i;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (end === -1 || end === start) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
const content = state.src.slice(start, end);
|
|
28
|
+
// Match if content is a number or number.number (optionally allow whitespace)
|
|
29
|
+
if (!/^\s*\d+(?:\.\d+)?\s*$/.test(content.trim())) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (!silent) {
|
|
33
|
+
const n = content.trim();
|
|
34
|
+
// Open <reference>
|
|
35
|
+
const attachment = referencesMap.get(n);
|
|
36
|
+
if (attachment) {
|
|
37
|
+
// add attachment if found in the references map from env (set in the component)
|
|
38
|
+
state.env.references(n.split('.')[0]);
|
|
39
|
+
const tokenOpen = state.push('reference_open', 'document-reference', 1);
|
|
40
|
+
// base64 encode the attachment if needed
|
|
41
|
+
if (typeof attachment === 'object') {
|
|
42
|
+
tokenOpen.attrs = [
|
|
43
|
+
['id', n],
|
|
44
|
+
['attachment', btoa(encodeURIComponent(JSON.stringify(attachment)))]
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
// Text content
|
|
48
|
+
const tokenText = state.push('text', '', 0);
|
|
49
|
+
tokenText.content = n;
|
|
50
|
+
// Close </reference>
|
|
51
|
+
state.push('reference_close', 'document-reference', -1);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// If no attachment found, just create a span text node
|
|
55
|
+
state.push('reference_open', 'span', 1);
|
|
56
|
+
const tokenText = state.push('text', '', 0);
|
|
57
|
+
tokenText.content = `[${n}]`;
|
|
58
|
+
state.push('reference_close', 'span', -1);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
state.pos = end + 1;
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
md.inline.ruler.after('text', 'referenceify_number', referenceifyNumber);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L21hcmtkb3duLWl0L3BsdWdpbnMvZG9jdW1lbnQtcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQ0FBaUMsQ0FBQyxFQUFjO0lBQzlELFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLE1BQU07UUFDdkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0Msd0NBQXdDO1FBQ3hDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMxQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUViLHVCQUF1QjtRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDN0MsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDUixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXpCLG1CQUFtQjtZQUNuQixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUcsVUFBVSxFQUFDLENBQUM7Z0JBQ2IsZ0ZBQWdGO2dCQUNoRixLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hFLHlDQUF5QztnQkFDekMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbkMsU0FBUyxDQUFDLEtBQUssR0FBRzt3QkFDaEIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNULENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDckUsQ0FBQztnQkFDSixDQUFDO2dCQUVELGVBQWU7Z0JBQ2YsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQkFFdEIscUJBQXFCO2dCQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHVEQUF1RDtnQkFDdkQsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgTWFya2Rvd25JdCBmcm9tIFwibWFya2Rvd24taXRcIjtcbi8qKlxuICogQSBtYXJrZG93bi1pdCBwbHVnaW4gdG8gY29udmVydCBbbl0gd2hlcmUgbiBpcyBhIG51bWJlciBpbnRvIGEgPGRvY3VtZW50LXJlZmVyZW5jZSBpZD1cIm5cIj5uPC9kb2N1bWVudC1yZWZlcmVuY2U+IEhUTUwgdGFnLlxuICpcbiAqIEZvciBleGFtcGxlLCB3aGVuIGF0dGFjaG1lbnQgMTIzIGlzIGZvdW5kIGluIHRoZSByZWZlcmVuY2VzTWFwLCBbMTIzXSB3aWxsIGJlIGNvbnZlcnRlZCB0byA8ZG9jdW1lbnQtcmVmZXJlbmNlIGlkPVwiMTIzXCI+MTIzPC9kb2N1bWVudC1yZWZlcmVuY2U+LlxuICogSWYgdGhlIGF0dGFjaG1lbnQgaXMgbm90IGZvdW5kLCBpdCB3aWxsIHJlbWFpbiBhcyBwbGFpbiB0ZXh0IFsxMjNdIGluIGEgc3BhbiB0YWcgOiA8c3Bhbj5bMTIzXTwvc3Bhbj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duSXREb2N1bWVudFJlZmVyZW5jZVBsdWdpbihtZDogTWFya2Rvd25JdCkge1xuICBmdW5jdGlvbiByZWZlcmVuY2VpZnlOdW1iZXIoc3RhdGUsIHNpbGVudCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZXNNYXAgPSBzdGF0ZS5lbnYucmVmZXJlbmNlc01hcCB8fCBuZXcgTWFwKCk7XG4gICAgY29uc3QgY2hhciA9IHN0YXRlLnNyYy5jaGFyQ29kZUF0KHN0YXRlLnBvcyk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgJ1snXG4gICAgaWYgKGNoYXIgIT09IDB4NUIgLyogWyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gc3RhdGUucG9zICsgMTtcbiAgICBsZXQgZW5kID0gLTE7XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zaW5nICddJ1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHN0YXRlLnNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHN0YXRlLnNyYy5jaGFyQ29kZUF0KGkpID09PSAweDVEIC8qIF0gKi8pIHtcbiAgICAgICAgZW5kID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEgfHwgZW5kID09PSBzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnQgPSBzdGF0ZS5zcmMuc2xpY2Uoc3RhcnQsIGVuZCk7XG5cbiAgICAvLyBNYXRjaCBpZiBjb250ZW50IGlzIGEgbnVtYmVyIG9yIG51bWJlci5udW1iZXIgKG9wdGlvbmFsbHkgYWxsb3cgd2hpdGVzcGFjZSlcbiAgICBpZiAoIS9eXFxzKlxcZCsoPzpcXC5cXGQrKT9cXHMqJC8udGVzdChjb250ZW50LnRyaW0oKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgY29uc3QgbiA9IGNvbnRlbnQudHJpbSgpO1xuXG4gICAgICAvLyBPcGVuIDxyZWZlcmVuY2U+XG4gICAgICBjb25zdCBhdHRhY2htZW50ID0gcmVmZXJlbmNlc01hcC5nZXQobik7XG4gICAgICBpZihhdHRhY2htZW50KXtcbiAgICAgICAgLy8gYWRkIGF0dGFjaG1lbnQgaWYgZm91bmQgaW4gdGhlIHJlZmVyZW5jZXMgbWFwIGZyb20gZW52IChzZXQgaW4gdGhlIGNvbXBvbmVudClcbiAgICAgICAgc3RhdGUuZW52LnJlZmVyZW5jZXMobi5zcGxpdCgnLicpWzBdKTtcbiAgICAgICAgY29uc3QgdG9rZW5PcGVuID0gc3RhdGUucHVzaCgncmVmZXJlbmNlX29wZW4nLCAnZG9jdW1lbnQtcmVmZXJlbmNlJywgMSk7XG4gICAgICAgIC8vIGJhc2U2NCBlbmNvZGUgdGhlIGF0dGFjaG1lbnQgaWYgbmVlZGVkXG4gICAgICAgIGlmICh0eXBlb2YgYXR0YWNobWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0b2tlbk9wZW4uYXR0cnMgPSBbXG4gICAgICAgICAgICBbJ2lkJywgbl0sXG4gICAgICAgICAgICBbJ2F0dGFjaG1lbnQnLCBidG9hKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShhdHRhY2htZW50KSkpXVxuICAgICAgICAgIF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUZXh0IGNvbnRlbnRcbiAgICAgICAgY29uc3QgdG9rZW5UZXh0ID0gc3RhdGUucHVzaCgndGV4dCcsICcnLCAwKTtcbiAgICAgICAgdG9rZW5UZXh0LmNvbnRlbnQgPSBuO1xuXG4gICAgICAgIC8vIENsb3NlIDwvcmVmZXJlbmNlPlxuICAgICAgICBzdGF0ZS5wdXNoKCdyZWZlcmVuY2VfY2xvc2UnLCAnZG9jdW1lbnQtcmVmZXJlbmNlJywgLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgbm8gYXR0YWNobWVudCBmb3VuZCwganVzdCBjcmVhdGUgYSBzcGFuIHRleHQgbm9kZVxuICAgICAgICBzdGF0ZS5wdXNoKCdyZWZlcmVuY2Vfb3BlbicsICdzcGFuJywgMSk7XG4gICAgICAgIGNvbnN0IHRva2VuVGV4dCA9IHN0YXRlLnB1c2goJ3RleHQnLCAnJywgMCk7XG4gICAgICAgIHRva2VuVGV4dC5jb250ZW50ID0gYFske259XWA7XG4gICAgICAgIHN0YXRlLnB1c2goJ3JlZmVyZW5jZV9jbG9zZScsICdzcGFuJywgLTEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRlLnBvcyA9IGVuZCArIDE7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBtZC5pbmxpbmUucnVsZXIuYWZ0ZXIoJ3RleHQnLCAncmVmZXJlbmNlaWZ5X251bWJlcicsIHJlZmVyZW5jZWlmeU51bWJlcik7XG59XG4iXX0=
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A markdown-it plugin to convert [Img-x.y.z], where x, y and z are numbers, into a <image-reference id="x.y.z">Img-x.y.z</image-reference> HTML tag.
|
|
3
|
+
*
|
|
4
|
+
* For example, when attachment x is found in the referencesMap and which contains the image z of the part y, [Img-x.y.z] will be converted to <image-reference id="x.y.z">Img-x.y.z</image-reference>.
|
|
5
|
+
* If the attachment x, the part y or the image z is not found, it will remain as plain text [Img-x.y.z] in a span tag : <span>[Img-x.y.z]</span>
|
|
6
|
+
*/
|
|
7
|
+
export const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
|
|
8
|
+
const EMBEDDED_IMAGE_REGEX = /\[(Img-([0-9]+(?:\.[0-9]+){2}))\]/g;
|
|
9
|
+
export function markdownItImageReferencePlugin(md) {
|
|
10
|
+
md.core.ruler.after("inline", EMBEDDED_IMAGE_NAME, (state) => {
|
|
11
|
+
const getEmbeddedImageReference = state?.env?.getEmbeddedImageReference;
|
|
12
|
+
state.tokens.forEach((blockToken) => {
|
|
13
|
+
if (blockToken.type !== "inline" || !blockToken.children)
|
|
14
|
+
return;
|
|
15
|
+
const newChildren = [];
|
|
16
|
+
blockToken.children.forEach((token) => {
|
|
17
|
+
if (token.type !== "text") {
|
|
18
|
+
newChildren.push(token);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
let lastIndex = 0;
|
|
22
|
+
let match;
|
|
23
|
+
const text = token.content;
|
|
24
|
+
EMBEDDED_IMAGE_REGEX.lastIndex = 0; // Reset regex state
|
|
25
|
+
while ((match = EMBEDDED_IMAGE_REGEX.exec(text)) !== null) {
|
|
26
|
+
// Add leading text
|
|
27
|
+
if (match.index > lastIndex) {
|
|
28
|
+
const t = new state.Token("text", "", 0);
|
|
29
|
+
t.content = text.slice(lastIndex, match.index);
|
|
30
|
+
newChildren.push(t);
|
|
31
|
+
}
|
|
32
|
+
// Add embedded image reference token
|
|
33
|
+
const refToken = new state.Token(EMBEDDED_IMAGE_NAME, "", 0);
|
|
34
|
+
refToken.content = match[2]; // e.g., "1.2.3"
|
|
35
|
+
refToken.meta = { full: match[1] }; // e.g., "Img-1.2.3"
|
|
36
|
+
refToken.attrs = [];
|
|
37
|
+
if (getEmbeddedImageReference) {
|
|
38
|
+
const attachment = getEmbeddedImageReference(match[2]);
|
|
39
|
+
if (attachment) {
|
|
40
|
+
refToken.attrs.push(['attachment', btoa(encodeURIComponent(JSON.stringify(attachment)))]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
newChildren.push(refToken);
|
|
44
|
+
lastIndex = match.index + match[0].length;
|
|
45
|
+
}
|
|
46
|
+
// Add trailing text
|
|
47
|
+
if (lastIndex < text.length) {
|
|
48
|
+
const t = new state.Token("text", "", 0);
|
|
49
|
+
t.content = text.slice(lastIndex);
|
|
50
|
+
newChildren.push(t);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
blockToken.children = newChildren;
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
// Optional: renderer for the custom token
|
|
57
|
+
md.renderer.rules[EMBEDDED_IMAGE_NAME] = (tokens, idx) => {
|
|
58
|
+
const imgId = tokens[idx].content;
|
|
59
|
+
const attrs = tokens[idx].attrs || [];
|
|
60
|
+
const attachment = attrs[0];
|
|
61
|
+
if (!attachment) {
|
|
62
|
+
return `<span>[Img-${imgId}]</span>`;
|
|
63
|
+
}
|
|
64
|
+
return `<image-reference id="${imgId}" attachment="${attachment[1]}" class="embedded-image-ref">Img-${imgId}</image-reference>`;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L21hcmtkb3duLWl0L3BsdWdpbnMvaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7R0FLRztBQUVILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLDBCQUEwQixDQUFDO0FBQzlELE1BQU0sb0JBQW9CLEdBQUcsb0NBQW9DLENBQUM7QUFFbEUsTUFBTSxVQUFVLDhCQUE4QixDQUFDLEVBQWM7SUFDM0QsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzNELE1BQU0seUJBQXlCLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQztRQUN4RSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ2xDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBRWpFLE1BQU0sV0FBVyxHQUFZLEVBQUUsQ0FBQztZQUVoQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNwQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQzFCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLElBQUksS0FBNkIsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFFM0Isb0JBQW9CLENBQUMs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QyxDQUFDLENBQUMsb0NBQW9DLEtBQUssb0JBQW9CLENBQUM7SUFDbEksQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSAnbWFya2Rvd24taXQvbGliL3Rva2VuLm1qcyc7XG4vKipcbiAqIEEgbWFya2Rvd24taXQgcGx1Z2luIHRvIGNvbnZlcnQgW0ltZy14Lnkuel0sIHdoZXJlIHgsIHkgYW5kIHogYXJlIG51bWJlcnMsIGludG8gYSA8aW1hZ2UtcmVmZXJlbmNlIGlkPVwieC55LnpcIj5JbWcteC55Lno8L2ltYWdlLXJlZmVyZW5jZT4gSFRNTCB0YWcuXG4gKlxuICogRm9yIGV4YW1wbGUsIHdoZW4gYXR0YWNobWVudCB4IGlzIGZvdW5kIGluIHRoZSByZWZlcmVuY2VzTWFwIGFuZCB3aGljaCBjb250YWlucyB0aGUgaW1hZ2UgeiBvZiB0aGUgcGFydCB5LCBbSW1nLXgueS56XSB3aWxsIGJlIGNvbnZlcnRlZCB0byA8aW1hZ2UtcmVmZXJlbmNlIGlkPVwieC55LnpcIj5JbWcteC55Lno8L2ltYWdlLXJlZmVyZW5jZT4uXG4gKiBJZiB0aGUgYXR0YWNobWVudCB4LCB0aGUgcGFydCB5IG9yIHRoZSBpbWFnZSB6IGlzIG5vdCBmb3VuZCwgaXQgd2lsbCByZW1haW4gYXMgcGxhaW4gdGV4dCBbSW1nLXgueS56XSBpbiBhIHNwYW4gdGFnIDogPHNwYW4+W0ltZy14Lnkuel08L3NwYW4+XG4gKi9cblxuZXhwb3J0IGNvbnN0IEVNQkVEREVEX0lNQUdFX05BTUUgPSBcImVtYmVkZGVkLWltYWdlLXJlZmVyZW5jZVwiO1xuY29uc3QgRU1CRURERURfSU1BR0VfUkVHRVggPSAvXFxbKEltZy0oWzAtOV0rKD86XFwuWzAtOV0rKXsyfSkpXFxdL2c7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkl0SW1hZ2VSZWZlcmVuY2VQbHVnaW4obWQ6IE1hcmtkb3duSXQpIHtcbiAgbWQuY29yZS5ydWxlci5hZnRlcihcImlubGluZVwiLCBFTUJFRERFRF9JTUFHRV9OQU1FLCAoc3RhdGUpID0+IHtcbiAgICBjb25zdCBnZXRFbWJlZGRlZEltYWdlUmVmZXJlbmNlID0gc3RhdGU/LmVudj8uZ2V0RW1iZWRkZWRJbWFnZVJlZmVyZW5jZTtcbiAgICBzdGF0ZS50b2tlbnMuZm9yRWFjaCgoYmxvY2tUb2tlbikgPT4ge1xuICAgICAgaWYgKGJsb2NrVG9rZW4udHlwZSAhPT0gXCJpbmxpbmVcIiB8fCAhYmxvY2tUb2tlbi5jaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBuZXdDaGlsZHJlbjogVG9rZW5bXSA9IFtdO1xuXG4gICAgICBibG9ja1Rva2VuLmNoaWxkcmVuLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBcInRleHRcIikge1xuICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godG9rZW4pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYXN0SW5kZXggPSAwO1xuICAgICAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0b2tlbi5jb250ZW50O1xuXG4gICAgICAgIEVNQkVEREVEX0lNQUdFX1JFR0VYLmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHJlZ2V4IHN0YXRlXG4gICAgICAgIHdoaWxlICgobWF0Y2ggPSBFTUJFRERFRF9JTUFHRV9SRUdFWC5leGVjKHRleHQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFkZCBsZWFkaW5nIHRleHRcbiAgICAgICAgICBpZiAobWF0Y2guaW5kZXggPiBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgc3RhdGUuVG9rZW4oXCJ0ZXh0XCIsIFwiXCIsIDApO1xuICAgICAgICAgICAgdC5jb250ZW50ID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLmluZGV4KTtcbiAgICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQWRkIGVtYmVkZGVkIGltYWdlIHJlZmVyZW5jZSB0b2tlblxuICAgICAgICAgIGNvbnN0IHJlZlRva2VuID0gbmV3IHN0YXRlLlRva2VuKEVNQkVEREVEX0lNQUdFX05BTUUsIFwiXCIsIDApO1xuICAgICAgICAgIHJlZlRva2VuLmNvbnRlbnQgPSBtYXRjaFsyXTsgLy8gZS5nLiwgXCIxLjIuM1wiXG4gICAgICAgICAgcmVmVG9rZW4ubWV0YSA9IHsgZnVsbDogbWF0Y2hbMV0gfTsgLy8gZS5nLiwgXCJJbWctMS4yLjNcIlxuICAgICAgICAgIHJlZlRva2VuLmF0dHJzID0gW107XG4gICAgICAgICAgaWYgKGdldEVtYmVkZGVkSW1hZ2VSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBnZXRFbWJlZGRlZEltYWdlUmVmZXJlbmNlKG1hdGNoWzJdKTtcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XG4gICAgICAgICAgICAgIHJlZlRva2VuLmF0dHJzLnB1c2goWydhdHRhY2htZW50JywgYnRvYShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoYXR0YWNobWVudCkpKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKHJlZlRva2VuKTtcblxuICAgICAgICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRyYWlsaW5nIHRleHRcbiAgICAgICAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IG5ldyBzdGF0ZS5Ub2tlbihcInRleHRcIiwgXCJcIiwgMCk7XG4gICAgICAgICAgdC5jb250ZW50ID0gdGV4dC5zbGljZShsYXN0SW5kZXgpO1xuICAgICAgICAgIG5ld0NoaWxkcmVuLnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBibG9ja1Rva2VuLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE9wdGlvbmFsOiByZW5kZXJlciBmb3IgdGhlIGN1c3RvbSB0b2tlblxuICBtZC5yZW5kZXJlci5ydWxlc1tFTUJFRERFRF9JTUFHRV9OQU1FXSA9ICh0b2tlbnMsIGlkeCkgPT4ge1xuICAgIGNvbnN0IGltZ0lkID0gdG9rZW5zW2lkeF0uY29udGVudDtcbiAgICBjb25zdCBhdHRycyA9IHRva2Vuc1tpZHhdLmF0dHJzIHx8IFtdO1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhdHRyc1swXTtcbiAgICBpZiAoIWF0dGFjaG1lbnQpIHtcbiAgICAgIHJldHVybiBgPHNwYW4+W0ltZy0ke2ltZ0lkfV08L3NwYW4+YDtcbiAgICB9XG4gICAgcmV0dXJuIGA8aW1hZ2UtcmVmZXJlbmNlIGlkPVwiJHtpbWdJZH1cIiBhdHRhY2htZW50PVwiJHthdHRhY2htZW50WzFdfVwiIGNsYXNzPVwiZW1iZWRkZWQtaW1hZ2UtcmVmXCI+SW1nLSR7aW1nSWR9PC9pbWFnZS1yZWZlcmVuY2U+YDtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This plugin overrides the default link renderer to add `target="_blank"` and `rel="noopener noreferrer"` to all links.
|
|
3
|
+
*/
|
|
4
|
+
export function markdownItLinkPlugin(md) {
|
|
5
|
+
const defaultRender = md.renderer.rules.link_open || function (tokens, idx, options, env, self) {
|
|
6
|
+
return self.renderToken(tokens, idx, options);
|
|
7
|
+
};
|
|
8
|
+
md.renderer.rules.link_open = function (tokens, idx, options, env, self) {
|
|
9
|
+
tokens[idx].attrPush(['target', '_blank']);
|
|
10
|
+
tokens[idx].attrPush(['rel', 'noopener noreferrer']);
|
|
11
|
+
// pass token to default renderer.
|
|
12
|
+
return defaultRender(tokens, idx, options, env, self);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9tYXJrZG93bi1pdC9wbHVnaW5zL2xpbmsucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQWM7SUFDakQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLFVBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUk7UUFDM0YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUk7UUFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBRXJELGtDQUFrQztRQUNsQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE1hcmtkb3duSXQgZnJvbSBcIm1hcmtkb3duLWl0XCI7XG5cbi8qKlxuICogVGhpcyBwbHVnaW4gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IGxpbmsgcmVuZGVyZXIgdG8gYWRkIGB0YXJnZXQ9XCJfYmxhbmtcImAgYW5kIGByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJgIHRvIGFsbCBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duSXRMaW5rUGx1Z2luKG1kOiBNYXJrZG93bkl0KSB7XG4gIGNvbnN0IGRlZmF1bHRSZW5kZXIgPSBtZC5yZW5kZXJlci5ydWxlcy5saW5rX29wZW4gfHwgZnVuY3Rpb24odG9rZW5zLCBpZHgsIG9wdGlvbnMsIGVudiwgc2VsZikge1xuICAgIHJldHVybiBzZWxmLnJlbmRlclRva2VuKHRva2VucywgaWR4LCBvcHRpb25zKTtcbiAgfTtcblxuICBtZC5yZW5kZXJlci5ydWxlcy5saW5rX29wZW4gPSBmdW5jdGlvbih0b2tlbnMsIGlkeCwgb3B0aW9ucywgZW52LCBzZWxmKSB7XG4gICAgdG9rZW5zW2lkeF0uYXR0clB1c2goWyd0YXJnZXQnLCAnX2JsYW5rJ10pO1xuICAgIHRva2Vuc1tpZHhdLmF0dHJQdXNoKFsncmVsJywgJ25vb3BlbmVyIG5vcmVmZXJyZXInXSk7XG5cbiAgICAvLyBwYXNzIHRva2VuIHRvIGRlZmF1bHQgcmVuZGVyZXIuXG4gICAgcmV0dXJuIGRlZmF1bHRSZW5kZXIodG9rZW5zLCBpZHgsIG9wdGlvbnMsIGVudiwgc2VsZik7XG4gIH07XG59XG4iXX0=
|