@sinequa/assistant 3.9.5 → 3.9.6-rc2
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 +17 -25
- package/chat/chat-message/i18n/de.json +11 -0
- package/chat/chat-reference/chat-reference.component.d.ts +18 -8
- package/chat/chat-reference/i18n/de.json +4 -0
- package/chat/chat-settings-v3/i18n/de.json +14 -0
- package/chat/chat.component.d.ts +2 -1
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +2 -3
- package/chat/debug-message/i18n/de.json +3 -0
- package/chat/dialogs/i18n/de.json +19 -0
- package/chat/directives/copy-to-clipboard.directive.d.ts +8 -0
- package/chat/documents-upload/document-list/document-list.component.d.ts +4 -9
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +3 -17
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +3 -8
- package/chat/documents-upload/documents-upload.service.d.ts +7 -16
- package/chat/documents-upload/i18n/de.json +24 -0
- package/chat/i18n/de.json +42 -0
- package/chat/markdown-it-plugins/code-block.plugin.d.ts +2 -0
- package/chat/markdown-it-plugins/image-reference.plugin.d.ts +3 -0
- package/chat/markdown-it-plugins/link.plugin.d.ts +5 -0
- package/chat/markdown-it-plugins/page-reference.plugin.d.ts +3 -0
- package/chat/markdown-it-plugins/reference.plugin.d.ts +7 -0
- package/chat/public-api.d.ts +2 -1
- package/chat/references/i18n/de.json +6 -0
- package/chat/references/references.component.d.ts +43 -0
- package/chat/saved-chats/i18n/de.json +5 -0
- package/chat/services/app.service.d.ts +2 -1
- package/chat/services/custom-elements.service.d.ts +13 -0
- package/chat/smart-renderer/smart-renderer.d.ts +23 -0
- package/chat/token-progress-bar/i18n/de.json +4 -0
- package/chat/tooltip/tooltip.directive.d.ts +2 -2
- package/chat/types.d.ts +8 -42
- package/esm2022/chat/chat-message/chat-message.component.mjs +33 -135
- package/esm2022/chat/chat-reference/chat-reference.component.mjs +60 -26
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +1 -1
- package/esm2022/chat/chat.component.mjs +48 -12
- package/esm2022/chat/chat.service.mjs +3 -2
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +2 -2
- package/esm2022/chat/debug-message/debug-message.service.mjs +4 -7
- package/esm2022/chat/directives/copy-to-clipboard.directive.mjs +68 -0
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +21 -22
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +8 -31
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +12 -14
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +25 -44
- package/esm2022/chat/markdown-it-plugins/code-block.plugin.mjs +14 -0
- package/esm2022/chat/markdown-it-plugins/image-reference.plugin.mjs +58 -0
- package/esm2022/chat/markdown-it-plugins/link.plugin.mjs +15 -0
- package/esm2022/chat/markdown-it-plugins/page-reference.plugin.mjs +60 -0
- package/esm2022/chat/markdown-it-plugins/reference.plugin.mjs +68 -0
- package/esm2022/chat/public-api.mjs +3 -2
- package/esm2022/chat/references/references.component.mjs +290 -0
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +4 -3
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +9 -12
- package/esm2022/chat/services/app.service.mjs +8 -2
- package/esm2022/chat/services/assistant-configuration.service.mjs +9 -18
- package/esm2022/chat/services/assistant-metadata.service.mjs +3 -3
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +3 -6
- package/esm2022/chat/services/custom-elements.service.mjs +43 -0
- package/esm2022/chat/smart-renderer/smart-renderer.mjs +103 -0
- package/esm2022/chat/tooltip/tooltip.directive.mjs +9 -9
- package/esm2022/chat/types.mjs +2 -5
- package/fesm2022/sinequa-assistant-chat.mjs +908 -497
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/package.json +4 -6
- package/chat/prompt.component.d.ts +0 -25
- package/chat/unified-plugins/embedded-image-reference.plugin.d.ts +0 -3
- package/chat/unified-plugins/embedded-page-reference.plugin.d.ts +0 -3
- package/esm2022/chat/prompt.component.mjs +0 -88
- package/esm2022/chat/unified-plugins/embedded-image-reference.plugin.mjs +0 -56
- package/esm2022/chat/unified-plugins/embedded-page-reference.plugin.mjs +0 -57
package/package.json
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sinequa/assistant",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.6-rc2",
|
|
4
4
|
"author": "Sinequa",
|
|
5
5
|
"peerDependencies": {
|
|
6
|
-
"@fortawesome/fontawesome-free": "^
|
|
7
|
-
"bootstrap": "^5.
|
|
8
|
-
"
|
|
9
|
-
"prismjs": "^1.29.0",
|
|
10
|
-
"prismjs-components-importer": "^0.2.0"
|
|
6
|
+
"@fortawesome/fontawesome-free": "^6.4.2",
|
|
7
|
+
"bootstrap": "^5.3.1",
|
|
8
|
+
"highlight.js": "^11.7.0"
|
|
11
9
|
},
|
|
12
10
|
"i18n": [
|
|
13
11
|
{
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from "@angular/core";
|
|
2
|
-
import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
|
|
3
|
-
import { Subscription } from 'rxjs';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export type PromptOptions = {
|
|
6
|
-
title?: string;
|
|
7
|
-
message: string;
|
|
8
|
-
messageParams?: any;
|
|
9
|
-
rowCount?: number;
|
|
10
|
-
output?: string;
|
|
11
|
-
validators?: any;
|
|
12
|
-
};
|
|
13
|
-
export declare class ChatPrompt implements OnInit, OnDestroy {
|
|
14
|
-
protected formBuilder: UntypedFormBuilder;
|
|
15
|
-
inputControl: UntypedFormControl;
|
|
16
|
-
form: UntypedFormGroup;
|
|
17
|
-
formChanges: Subscription;
|
|
18
|
-
model: import("@angular/core").InputSignal<PromptOptions>;
|
|
19
|
-
constructor(formBuilder: UntypedFormBuilder);
|
|
20
|
-
ngOnInit(): void;
|
|
21
|
-
ngOnDestroy(): void;
|
|
22
|
-
get title(): string;
|
|
23
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ChatPrompt, never>;
|
|
24
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ChatPrompt, "sq-chat-prompt", never, { "model": { "alias": "model"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
25
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from "@angular/common";
|
|
2
|
-
import { Component, input } from "@angular/core";
|
|
3
|
-
import { ReactiveFormsModule, UntypedFormControl, Validators } from '@angular/forms';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/forms";
|
|
6
|
-
export class ChatPrompt {
|
|
7
|
-
constructor(formBuilder) {
|
|
8
|
-
this.formBuilder = formBuilder;
|
|
9
|
-
this.model = input({});
|
|
10
|
-
}
|
|
11
|
-
ngOnInit() {
|
|
12
|
-
this.inputControl = new UntypedFormControl(this.model().output, this.model().validators || Validators.required);
|
|
13
|
-
this.form = this.formBuilder.group({
|
|
14
|
-
input: this.inputControl
|
|
15
|
-
});
|
|
16
|
-
this.formChanges.add(this.form.valueChanges.subscribe(() => this.model().output = this.inputControl.value));
|
|
17
|
-
}
|
|
18
|
-
ngOnDestroy() {
|
|
19
|
-
this.formChanges.unsubscribe();
|
|
20
|
-
}
|
|
21
|
-
get title() {
|
|
22
|
-
return this.model().title ?? "msg#modal.prompt.title";
|
|
23
|
-
}
|
|
24
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatPrompt, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ChatPrompt, isStandalone: true, selector: "sq-chat-prompt", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
26
|
-
<dialog [title]="title" #dialog>
|
|
27
|
-
@if(title) {
|
|
28
|
-
<h5 class="modal-title">{{title}}</h5>
|
|
29
|
-
}
|
|
30
|
-
<form name="prompt" novalidate [formGroup]="form">
|
|
31
|
-
<div class="mb-3 sq-form-group">
|
|
32
|
-
<label class="form-label" for="input">{{model().message}}</label>
|
|
33
|
-
@if(!model().rowCount) {
|
|
34
|
-
<input type="text" class="form-control" id="input" formControlName="input" spellcheck="off">
|
|
35
|
-
}
|
|
36
|
-
@if(!!model().rowCount) {
|
|
37
|
-
<textarea type="text" class="form-control" id="input" formControlName="input" spellcheck="on" rows="{{model().rowCount}}"></textarea>
|
|
38
|
-
}
|
|
39
|
-
</div>
|
|
40
|
-
</form>
|
|
41
|
-
<section class="flex justify-end gap-2 mt-4">
|
|
42
|
-
<button class="btn btn-ghost outline-none w-24" (click)="dialog.close()">
|
|
43
|
-
Cancel
|
|
44
|
-
</button>
|
|
45
|
-
|
|
46
|
-
<button class="btn btn-primary w-24">
|
|
47
|
-
OK
|
|
48
|
-
</button>
|
|
49
|
-
</section>
|
|
50
|
-
</dialog>
|
|
51
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatPrompt, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{
|
|
56
|
-
selector: "sq-chat-prompt",
|
|
57
|
-
template: `
|
|
58
|
-
<dialog [title]="title" #dialog>
|
|
59
|
-
@if(title) {
|
|
60
|
-
<h5 class="modal-title">{{title}}</h5>
|
|
61
|
-
}
|
|
62
|
-
<form name="prompt" novalidate [formGroup]="form">
|
|
63
|
-
<div class="mb-3 sq-form-group">
|
|
64
|
-
<label class="form-label" for="input">{{model().message}}</label>
|
|
65
|
-
@if(!model().rowCount) {
|
|
66
|
-
<input type="text" class="form-control" id="input" formControlName="input" spellcheck="off">
|
|
67
|
-
}
|
|
68
|
-
@if(!!model().rowCount) {
|
|
69
|
-
<textarea type="text" class="form-control" id="input" formControlName="input" spellcheck="on" rows="{{model().rowCount}}"></textarea>
|
|
70
|
-
}
|
|
71
|
-
</div>
|
|
72
|
-
</form>
|
|
73
|
-
<section class="flex justify-end gap-2 mt-4">
|
|
74
|
-
<button class="btn btn-ghost outline-none w-24" (click)="dialog.close()">
|
|
75
|
-
Cancel
|
|
76
|
-
</button>
|
|
77
|
-
|
|
78
|
-
<button class="btn btn-primary w-24">
|
|
79
|
-
OK
|
|
80
|
-
</button>
|
|
81
|
-
</section>
|
|
82
|
-
</dialog>
|
|
83
|
-
`,
|
|
84
|
-
standalone: true,
|
|
85
|
-
imports: [CommonModule, ReactiveFormsModule],
|
|
86
|
-
}]
|
|
87
|
-
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }] });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3Byb21wdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQXNCLGtCQUFrQixFQUFvQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBNEMzSCxNQUFNLE9BQU8sVUFBVTtJQU9uQixZQUFzQixXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFGckQsVUFBSyxHQUFHLEtBQUssQ0FBZ0IsRUFBbUIsQ0FBQyxDQUFDO0lBRU0sQ0FBQztJQUV6RCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMvQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQ3hGLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssSUFBSSx3QkFBd0IsQ0FBQztJQUMxRCxDQUFDOytHQXpCUSxVQUFVO21HQUFWLFVBQVUsOE1BOUJUOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTBCVCwyREFFUyxZQUFZLDhCQUFFLG1CQUFtQjs7NEZBRWxDLFVBQVU7a0JBaEN0QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0EwQlQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBQcm9tcHRPcHRpb25zID0ge1xuICAgIHRpdGxlPzogc3RyaW5nLFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBtZXNzYWdlUGFyYW1zPzogYW55LFxuICAgIHJvd0NvdW50PzogbnVtYmVyLFxuICAgIG91dHB1dD86IHN0cmluZyxcbiAgICB2YWxpZGF0b3JzPzogYW55XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJzcS1jaGF0LXByb21wdFwiLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaWFsb2cgW3RpdGxlXT1cInRpdGxlXCIgI2RpYWxvZz5cbiAgICAgICAgICAgIEBpZih0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+e3t0aXRsZX19PC9oNT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxmb3JtIG5hbWU9XCJwcm9tcHRcIiBub3ZhbGlkYXRlIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHNxLWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiIGZvcj1cImlucHV0XCI+e3ttb2RlbCgpLm1lc3NhZ2V9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIEBpZighbW9kZWwoKS5yb3dDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5wdXRcIiBzcGVsbGNoZWNrPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmKCEhbW9kZWwoKS5yb3dDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImlucHV0XCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5wdXRcIiBzcGVsbGNoZWNrPVwib25cIiByb3dzPVwie3ttb2RlbCgpLnJvd0NvdW50fX1cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgZ2FwLTIgbXQtNFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdob3N0IG91dGxpbmUtbm9uZSB3LTI0XCIgKGNsaWNrKT1cImRpYWxvZy5jbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTI0XCI+XG4gICAgICAgICAgICAgICAgICAgT0tcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaWFsb2c+XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0UHJvbXB0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGlucHV0Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gICAgZm9ybUNoYW5nZXM6IFN1YnNjcmlwdGlvbjtcblxuICAgIG1vZGVsID0gaW5wdXQ8UHJvbXB0T3B0aW9ucz4oe30gYXMgUHJvbXB0T3B0aW9ucyk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmlucHV0Q29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5tb2RlbCgpLm91dHB1dCwgdGhpcy5tb2RlbCgpLnZhbGlkYXRvcnMgfHwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXRDb250cm9sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvcm1DaGFuZ2VzLmFkZChcbiAgICAgICAgICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMubW9kZWwoKS5vdXRwdXQgPSB0aGlzLmlucHV0Q29udHJvbC52YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5mb3JtQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCgpLnRpdGxlID8/IFwibXNnI21vZGFsLnByb21wdC50aXRsZVwiO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { CONTINUE, visit } from "unist-util-visit";
|
|
2
|
-
export const EMBEDDED_IMAGE_NAME = "embedded-image-reference";
|
|
3
|
-
const EMBEDDED_IMAGE_REGEX = /\[(Img-([0-9]+(?:\.[0-9]+){2}))\]/g;
|
|
4
|
-
export default function embeddedImageReferencePlugin(tree) {
|
|
5
|
-
visit(tree, "text", (node, index, parent) => {
|
|
6
|
-
const refs = Array.from(node.value.matchAll(EMBEDDED_IMAGE_REGEX));
|
|
7
|
-
if (refs.length === 0)
|
|
8
|
-
return CONTINUE;
|
|
9
|
-
const nodes = getContentNodes(node, refs);
|
|
10
|
-
if (nodes.length === 0)
|
|
11
|
-
return CONTINUE;
|
|
12
|
-
parent.children.splice(index, 1, ...nodes);
|
|
13
|
-
return index + nodes.length;
|
|
14
|
-
});
|
|
15
|
-
return tree;
|
|
16
|
-
}
|
|
17
|
-
/** Transform node text content into a set of node */
|
|
18
|
-
function getContentNodes(node, refs) {
|
|
19
|
-
let nodes = refs.reduce((acc, ref) => {
|
|
20
|
-
handleLeadingText(acc, node, ref);
|
|
21
|
-
acc.push({
|
|
22
|
-
type: EMBEDDED_IMAGE_NAME,
|
|
23
|
-
value: ref[2],
|
|
24
|
-
end: ref.index + ref[0].length,
|
|
25
|
-
});
|
|
26
|
-
return acc;
|
|
27
|
-
}, []);
|
|
28
|
-
handleTrailingText(node, refs, nodes);
|
|
29
|
-
return nodes;
|
|
30
|
-
}
|
|
31
|
-
/** Compute last block ending for leading text */
|
|
32
|
-
function handleLeadingText(acc, node, ref) {
|
|
33
|
-
const lastEnd = acc.at(-1)?.end ?? 0;
|
|
34
|
-
const leadingText = node.value.substring(lastEnd, ref.index);
|
|
35
|
-
if (leadingText !== "") {
|
|
36
|
-
acc.push({
|
|
37
|
-
type: "text",
|
|
38
|
-
value: leadingText,
|
|
39
|
-
end: ref.index,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
return acc;
|
|
43
|
-
}
|
|
44
|
-
/** Compute last block ending for trailing text */
|
|
45
|
-
function handleTrailingText(node, refs, nodes) {
|
|
46
|
-
const lastEnd = refs.at(-1)?.index ?? 0;
|
|
47
|
-
const trailingText = node.value.substring(lastEnd + (refs.at(-1)?.[0].length ?? 0));
|
|
48
|
-
if (trailingText !== "") {
|
|
49
|
-
nodes.push({
|
|
50
|
-
type: "text",
|
|
51
|
-
value: trailingText,
|
|
52
|
-
end: node.value.length,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlLnBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fzc2lzdGFudC9jaGF0L3VuaWZpZWQtcGx1Z2lucy9lbWJlZGRlZC1pbWFnZS1yZWZlcmVuY2UucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxvQ0FBb0MsQ0FBQztBQUVsRSxNQUFNLENBQUMsT0FBTyxVQUFVLDRCQUE0QixDQUFDLElBQVU7SUFDN0QsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFVLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFdkMsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUUzQyxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQscURBQXFEO0FBQ3JELFNBQVMsZUFBZSxDQUFDLElBQVUsRUFBRSxJQUF1QjtJQUMxRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25DLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbEMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxtQkFBbUI7WUFDekIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixHQUFHLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUNLLENBQUMsQ0FBQztRQUV2QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxFQUFtQyxDQUFjLENBQUM7SUFFckQsa0JBQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV0QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxpREFBaUQ7QUFDakQsU0FBUyxpQkFBaUIsQ0FDeEIsR0FBa0MsRUFDbEMsSUFBVSxFQUNWLEdBQW9CO0lBRXBCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0QsSUFBSSxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdkIsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFdBQVc7WUFDbEIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1NBQ2MsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxrREFBa0Q7QUFDbEQsU0FBUyxrQkFBa0IsQ0FDekIsSUFBVSxFQUNWLElBQXVCLEVBQ3ZCLEtBQWdCO0lBRWhCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUN2QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQ3pDLENBQUM7SUFFRixJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsWUFBWTtZQUNuQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1NBQ00sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudCwgUGFyZW50LCBUZXh0IH0gZnJvbSBcIm1kYXN0XCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcInVuaXN0XCI7XG5pbXBvcnQgeyBDT05USU5VRSwgdmlzaXQgfSBmcm9tIFwidW5pc3QtdXRpbC12aXNpdFwiO1xuXG5leHBvcnQgY29uc3QgRU1CRURERURfSU1BR0VfTkFNRSA9IFwiZW1iZWRkZWQtaW1hZ2UtcmVmZXJlbmNlXCI7XG5jb25zdCBFTUJFRERFRF9JTUFHRV9SRUdFWCA9IC9cXFsoSW1nLShbMC05XSsoPzpcXC5bMC05XSspezJ9KSlcXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRJbWFnZVJlZmVyZW5jZVBsdWdpbih0cmVlOiBOb2RlKSB7XG4gIHZpc2l0KHRyZWUsIFwidGV4dFwiLCAobm9kZTogVGV4dCwgaW5kZXg6IG51bWJlciwgcGFyZW50OiBQYXJlbnQpID0+IHtcbiAgICBjb25zdCByZWZzID0gQXJyYXkuZnJvbShub2RlLnZhbHVlLm1hdGNoQWxsKEVNQkVEREVEX0lNQUdFX1JFR0VYKSk7XG5cbiAgICBpZiAocmVmcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Q29udGVudE5vZGVzKG5vZGUsIHJlZnMpO1xuXG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIENPTlRJTlVFO1xuXG4gICAgcGFyZW50LmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSwgLi4ubm9kZXMpO1xuXG4gICAgcmV0dXJuIGluZGV4ICsgbm9kZXMubGVuZ3RoO1xuICB9KTtcblxuICByZXR1cm4gdHJlZTtcbn1cblxuLyoqIFRyYW5zZm9ybSBub2RlIHRleHQgY29udGVudCBpbnRvIGEgc2V0IG9mIG5vZGUgKi8gXG5mdW5jdGlvbiBnZXRDb250ZW50Tm9kZXMobm9kZTogVGV4dCwgcmVmczogUmVnRXhwRXhlY0FycmF5W10pOiBDb250ZW50W10ge1xuICBsZXQgbm9kZXMgPSByZWZzLnJlZHVjZSgoYWNjLCByZWYpID0+IHtcbiAgICBoYW5kbGVMZWFkaW5nVGV4dChhY2MsIG5vZGUsIHJlZik7XG5cbiAgICBhY2MucHVzaCh7XG4gICAgICB0eXBlOiBFTUJFRERFRF9JTUFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGVuZDogcmVmLmluZGV4ICsgcmVmWzBdLmxlbmd0aCxcbiAgICB9IGFzIGFueSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdIGFzIChDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KVtdKSBhcyBDb250ZW50W107XG5cbiAgaGFuZGxlVHJhaWxpbmdUZXh0KG5vZGUsIHJlZnMsIG5vZGVzKTtcblxuICByZXR1cm4gbm9kZXM7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciBsZWFkaW5nIHRleHQgKi9cbmZ1bmN0aW9uIGhhbmRsZUxlYWRpbmdUZXh0KFxuICBhY2M6IChDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KVtdLFxuICBub2RlOiBUZXh0LFxuICByZWY6IFJlZ0V4cEV4ZWNBcnJheVxuKTogQ29udGVudFtdIHtcbiAgY29uc3QgbGFzdEVuZCA9IGFjYy5hdCgtMSk/LmVuZCA/PyAwO1xuICBjb25zdCBsZWFkaW5nVGV4dCA9IG5vZGUudmFsdWUuc3Vic3RyaW5nKGxhc3RFbmQsIHJlZi5pbmRleCk7XG5cbiAgaWYgKGxlYWRpbmdUZXh0ICE9PSBcIlwiKSB7XG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogbGVhZGluZ1RleHQsXG4gICAgICBlbmQ6IHJlZi5pbmRleCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFjYztcbn1cblxuLyoqIENvbXB1dGUgbGFzdCBibG9jayBlbmRpbmcgZm9yIHRyYWlsaW5nIHRleHQgKi9cbmZ1bmN0aW9uIGhhbmRsZVRyYWlsaW5nVGV4dChcbiAgbm9kZTogVGV4dCxcbiAgcmVmczogUmVnRXhwRXhlY0FycmF5W10sXG4gIG5vZGVzOiBDb250ZW50W11cbik6IHZvaWQge1xuICBjb25zdCBsYXN0RW5kID0gcmVmcy5hdCgtMSk/LmluZGV4ID8/IDA7XG4gIGNvbnN0IHRyYWlsaW5nVGV4dCA9IG5vZGUudmFsdWUuc3Vic3RyaW5nKFxuICAgIGxhc3RFbmQgKyAocmVmcy5hdCgtMSk/LlswXS5sZW5ndGggPz8gMClcbiAgKTtcblxuICBpZiAodHJhaWxpbmdUZXh0ICE9PSBcIlwiKSB7XG4gICAgbm9kZXMucHVzaCh7XG4gICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgIHZhbHVlOiB0cmFpbGluZ1RleHQsXG4gICAgICBlbmQ6IG5vZGUudmFsdWUubGVuZ3RoLFxuICAgIH0gYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { CONTINUE, visit } from "unist-util-visit";
|
|
2
|
-
export const EMBEDDED_PAGE_NAME = "embedded-page-reference";
|
|
3
|
-
const EMBEDDED_PAGE_REGEX = /\[(Page-(\d+\.\d+))\]/g;
|
|
4
|
-
export default function embeddedPageReferencePlugin(tree) {
|
|
5
|
-
visit(tree, "text", (node, index, parent) => {
|
|
6
|
-
const refs = Array.from(node.value.matchAll(EMBEDDED_PAGE_REGEX));
|
|
7
|
-
if (refs.length === 0)
|
|
8
|
-
return CONTINUE;
|
|
9
|
-
const nodes = getContentNodes(node, refs);
|
|
10
|
-
if (nodes.length === 0)
|
|
11
|
-
return CONTINUE;
|
|
12
|
-
parent.children.splice(index, 1, ...nodes);
|
|
13
|
-
return index + nodes.length;
|
|
14
|
-
});
|
|
15
|
-
return tree;
|
|
16
|
-
}
|
|
17
|
-
/** Transform node text content into a set of node */
|
|
18
|
-
function getContentNodes(node, refs) {
|
|
19
|
-
let nodes = refs.reduce((acc, ref) => {
|
|
20
|
-
handleLeadingText(acc, node, ref);
|
|
21
|
-
acc.push({
|
|
22
|
-
type: EMBEDDED_PAGE_NAME,
|
|
23
|
-
value: ref[2],
|
|
24
|
-
boundingBox: ref[3],
|
|
25
|
-
end: ref.index + ref[0].length,
|
|
26
|
-
});
|
|
27
|
-
return acc;
|
|
28
|
-
}, []);
|
|
29
|
-
handleTrailingText(node, refs, nodes);
|
|
30
|
-
return nodes;
|
|
31
|
-
}
|
|
32
|
-
/** Compute last block ending for leading text */
|
|
33
|
-
function handleLeadingText(acc, node, ref) {
|
|
34
|
-
const lastEnd = acc.at(-1)?.end ?? 0;
|
|
35
|
-
const leadingText = node.value.substring(lastEnd, ref.index);
|
|
36
|
-
if (leadingText !== "") {
|
|
37
|
-
acc.push({
|
|
38
|
-
type: "text",
|
|
39
|
-
value: leadingText,
|
|
40
|
-
end: ref.index,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
return acc;
|
|
44
|
-
}
|
|
45
|
-
/** Compute last block ending for trailing text */
|
|
46
|
-
function handleTrailingText(node, refs, nodes) {
|
|
47
|
-
const lastEnd = refs.at(-1)?.index ?? 0;
|
|
48
|
-
const trailingText = node.value.substring(lastEnd + (refs.at(-1)?.[0].length ?? 0));
|
|
49
|
-
if (trailingText !== "") {
|
|
50
|
-
nodes.push({
|
|
51
|
-
type: "text",
|
|
52
|
-
value: trailingText,
|
|
53
|
-
end: node.value.length,
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2UucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvdW5pZmllZC1wbHVnaW5zL2VtYmVkZGVkLXBhZ2UtcmVmZXJlbmNlLnBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLHlCQUF5QixDQUFDO0FBQzVELE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7QUFFckQsTUFBTSxDQUFDLE9BQU8sVUFBVSwyQkFBMkIsQ0FBQyxJQUFVO0lBQzVELEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBVSxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUNoRSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXZDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUV4QyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFFM0MsT0FBTyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxTQUFTLGVBQWUsQ0FBQyxJQUFVLEVBQUUsSUFBdUI7SUFDMUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUNuQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2IsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07U0FDSyxDQUFDLENBQUM7UUFFdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBbUMsQ0FBYyxDQUFDO0lBRXJELGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFdEMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsaURBQWlEO0FBQ2pELFNBQVMsaUJBQWlCLENBQ3hCLEdBQWtDLEVBQ2xDLElBQVUsRUFDVixHQUFvQjtJQUVwQixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdELElBQUksV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxXQUFXO1lBQ2xCLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSztTQUNjLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsa0RBQWtEO0FBQ2xELFNBQVMsa0JBQWtCLENBQ3pCLElBQVUsRUFDVixJQUF1QixFQUN2QixLQUFnQjtJQUVoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDdkMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUN6QyxDQUFDO0lBRUYsSUFBSSxZQUFZLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFlBQVk7WUFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtTQUNNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnQsIFBhcmVudCwgVGV4dCB9IGZyb20gXCJtZGFzdFwiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCJ1bmlzdFwiO1xuaW1wb3J0IHsgQ09OVElOVUUsIHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIjtcblxuZXhwb3J0IGNvbnN0IEVNQkVEREVEX1BBR0VfTkFNRSA9IFwiZW1iZWRkZWQtcGFnZS1yZWZlcmVuY2VcIjtcbmNvbnN0IEVNQkVEREVEX1BBR0VfUkVHRVggPSAvXFxbKFBhZ2UtKFxcZCtcXC5cXGQrKSlcXF0vZztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW1iZWRkZWRQYWdlUmVmZXJlbmNlUGx1Z2luKHRyZWU6IE5vZGUpIHtcbiAgdmlzaXQodHJlZSwgXCJ0ZXh0XCIsIChub2RlOiBUZXh0LCBpbmRleDogbnVtYmVyLCBwYXJlbnQ6IFBhcmVudCkgPT4ge1xuICAgIGNvbnN0IHJlZnMgPSBBcnJheS5mcm9tKG5vZGUudmFsdWUubWF0Y2hBbGwoRU1CRURERURfUEFHRV9SRUdFWCkpO1xuXG4gICAgaWYgKHJlZnMubGVuZ3RoID09PSAwKSByZXR1cm4gQ09OVElOVUU7XG5cbiAgICBjb25zdCBub2RlcyA9IGdldENvbnRlbnROb2Rlcyhub2RlLCByZWZzKTtcblxuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHJldHVybiBDT05USU5VRTtcblxuICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEsIC4uLm5vZGVzKTtcblxuICAgIHJldHVybiBpbmRleCArIG5vZGVzLmxlbmd0aDtcbiAgfSk7XG5cbiAgcmV0dXJuIHRyZWU7XG59XG5cbi8qKiBUcmFuc2Zvcm0gbm9kZSB0ZXh0IGNvbnRlbnQgaW50byBhIHNldCBvZiBub2RlICovIFxuZnVuY3Rpb24gZ2V0Q29udGVudE5vZGVzKG5vZGU6IFRleHQsIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdKTogQ29udGVudFtdIHtcbiAgbGV0IG5vZGVzID0gcmVmcy5yZWR1Y2UoKGFjYywgcmVmKSA9PiB7XG4gICAgaGFuZGxlTGVhZGluZ1RleHQoYWNjLCBub2RlLCByZWYpO1xuXG4gICAgYWNjLnB1c2goe1xuICAgICAgdHlwZTogRU1CRURERURfUEFHRV9OQU1FLFxuICAgICAgdmFsdWU6IHJlZlsyXSxcbiAgICAgIGJvdW5kaW5nQm94OiByZWZbM10sXG4gICAgICBlbmQ6IHJlZi5pbmRleCArIHJlZlswXS5sZW5ndGgsXG4gICAgfSBhcyBhbnkgYXMgQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSk7XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSkgYXMgQ29udGVudFtdO1xuXG4gIGhhbmRsZVRyYWlsaW5nVGV4dChub2RlLCByZWZzLCBub2Rlcyk7XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKiogQ29tcHV0ZSBsYXN0IGJsb2NrIGVuZGluZyBmb3IgbGVhZGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVMZWFkaW5nVGV4dChcbiAgYWNjOiAoQ29udGVudCAmIHsgZW5kOiBudW1iZXIgfSlbXSxcbiAgbm9kZTogVGV4dCxcbiAgcmVmOiBSZWdFeHBFeGVjQXJyYXlcbik6IENvbnRlbnRbXSB7XG4gIGNvbnN0IGxhc3RFbmQgPSBhY2MuYXQoLTEpPy5lbmQgPz8gMDtcbiAgY29uc3QgbGVhZGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhsYXN0RW5kLCByZWYuaW5kZXgpO1xuXG4gIGlmIChsZWFkaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIGFjYy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgdmFsdWU6IGxlYWRpbmdUZXh0LFxuICAgICAgZW5kOiByZWYuaW5kZXgsXG4gICAgfSBhcyBDb250ZW50ICYgeyBlbmQ6IG51bWJlciB9KTtcbiAgfVxuXG4gIHJldHVybiBhY2M7XG59XG5cbi8qKiBDb21wdXRlIGxhc3QgYmxvY2sgZW5kaW5nIGZvciB0cmFpbGluZyB0ZXh0ICovXG5mdW5jdGlvbiBoYW5kbGVUcmFpbGluZ1RleHQoXG4gIG5vZGU6IFRleHQsXG4gIHJlZnM6IFJlZ0V4cEV4ZWNBcnJheVtdLFxuICBub2RlczogQ29udGVudFtdXG4pOiB2b2lkIHtcbiAgY29uc3QgbGFzdEVuZCA9IHJlZnMuYXQoLTEpPy5pbmRleCA/PyAwO1xuICBjb25zdCB0cmFpbGluZ1RleHQgPSBub2RlLnZhbHVlLnN1YnN0cmluZyhcbiAgICBsYXN0RW5kICsgKHJlZnMuYXQoLTEpPy5bMF0ubGVuZ3RoID8/IDApXG4gICk7XG5cbiAgaWYgKHRyYWlsaW5nVGV4dCAhPT0gXCJcIikge1xuICAgIG5vZGVzLnB1c2goe1xuICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICB2YWx1ZTogdHJhaWxpbmdUZXh0LFxuICAgICAgZW5kOiBub2RlLnZhbHVlLmxlbmd0aCxcbiAgICB9IGFzIENvbnRlbnQgJiB7IGVuZDogbnVtYmVyIH0pO1xuICB9XG59XG4iXX0=
|