@wemake4u/feel-editor 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/THIRD_PARTY_LICENSES.txt +13 -0
- package/esm2022/lib/assets/builtins.json +506 -0
- package/esm2022/lib/components/feel-editor.component.mjs +34 -177
- package/esm2022/lib/utils/parseBuiltins.mjs +25 -0
- package/fesm2022/wemake4u-feel-editor.mjs +564 -175
- package/fesm2022/wemake4u-feel-editor.mjs.map +1 -1
- package/lib/components/feel-editor.component.d.ts +10 -43
- package/lib/utils/parseBuiltins.d.ts +9 -0
- package/package.json +4 -2
|
@@ -1,65 +1,14 @@
|
|
|
1
1
|
/// <reference path="../types/feel-editor.d.ts" />
|
|
2
|
-
import { Component,
|
|
2
|
+
import { Component, Input } from '@angular/core';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
import { ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
5
|
import FeelEditor from '@bpmn-io/feel-editor';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { indentLess, indentMore, history, historyKeymap } from '@codemirror/commands';
|
|
10
|
-
import * as state from '@codemirror/state';
|
|
6
|
+
import { getDefaultBuiltins } from '../utils/parseBuiltins';
|
|
7
|
+
import { CodeEditorComponent, createValueAccessorProvider } from '@wemake4u/code-editor';
|
|
11
8
|
import * as i0 from "@angular/core";
|
|
12
9
|
import * as i1 from "@angular/common";
|
|
13
|
-
export class FeelEditorComponent {
|
|
14
|
-
|
|
15
|
-
change = new EventEmitter();
|
|
16
|
-
keydown = new EventEmitter();
|
|
17
|
-
lint = new EventEmitter();
|
|
18
|
-
embedded = false;
|
|
19
|
-
minHeight;
|
|
20
|
-
maxHeight;
|
|
21
|
-
get disabled() {
|
|
22
|
-
return this._disabled;
|
|
23
|
-
}
|
|
24
|
-
set disabled(value) {
|
|
25
|
-
if (this._disabled === value)
|
|
26
|
-
return;
|
|
27
|
-
this._disabled = value;
|
|
28
|
-
this.refreshEditor();
|
|
29
|
-
}
|
|
30
|
-
get readonly() {
|
|
31
|
-
return this._readonly;
|
|
32
|
-
}
|
|
33
|
-
set readonly(value) {
|
|
34
|
-
if (this._readonly === value)
|
|
35
|
-
return;
|
|
36
|
-
this._readonly = value;
|
|
37
|
-
this.refreshEditor();
|
|
38
|
-
}
|
|
39
|
-
get lineNumbers() {
|
|
40
|
-
return this._lineNumbers;
|
|
41
|
-
}
|
|
42
|
-
set lineNumbers(value) {
|
|
43
|
-
if (this._lineNumbers === value)
|
|
44
|
-
return;
|
|
45
|
-
this._lineNumbers = value;
|
|
46
|
-
this.refreshEditor();
|
|
47
|
-
}
|
|
48
|
-
get placeholder() {
|
|
49
|
-
return this._placeholder;
|
|
50
|
-
}
|
|
51
|
-
set placeholder(value) {
|
|
52
|
-
this._placeholder = value;
|
|
53
|
-
if (this._editor) {
|
|
54
|
-
this._editor.setPlaceholder(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
get value() {
|
|
58
|
-
return this._value;
|
|
59
|
-
}
|
|
60
|
-
set value(value) {
|
|
61
|
-
this.writeValue(value);
|
|
62
|
-
}
|
|
10
|
+
export class FeelEditorComponent extends CodeEditorComponent {
|
|
11
|
+
//#region dialect
|
|
63
12
|
get dialect() {
|
|
64
13
|
return this._dialect;
|
|
65
14
|
}
|
|
@@ -69,6 +18,8 @@ export class FeelEditorComponent {
|
|
|
69
18
|
this._dialect = value;
|
|
70
19
|
this.refreshEditor();
|
|
71
20
|
}
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region builtins
|
|
72
23
|
get builtins() {
|
|
73
24
|
return this._builtins;
|
|
74
25
|
}
|
|
@@ -78,149 +29,55 @@ export class FeelEditorComponent {
|
|
|
78
29
|
this._builtins = value;
|
|
79
30
|
this.refreshEditor();
|
|
80
31
|
}
|
|
32
|
+
getBuiltins() {
|
|
33
|
+
if (Array.isArray(this._builtins)) {
|
|
34
|
+
return [...getDefaultBuiltins(), ...this._builtins];
|
|
35
|
+
}
|
|
36
|
+
return this._builtins;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region variables
|
|
81
40
|
get variables() {
|
|
82
41
|
return this._variables;
|
|
83
42
|
}
|
|
84
43
|
set variables(value) {
|
|
85
44
|
this._variables = value;
|
|
86
|
-
if (this.
|
|
87
|
-
this.
|
|
45
|
+
if (this._feelEditor) {
|
|
46
|
+
this._feelEditor.setVariables(value || []);
|
|
88
47
|
}
|
|
89
48
|
}
|
|
90
|
-
|
|
91
|
-
this.isViewInit = true;
|
|
92
|
-
this.createEditor();
|
|
93
|
-
}
|
|
94
|
-
writeValue(value) {
|
|
95
|
-
this._value = value || '';
|
|
96
|
-
if (this._editor) {
|
|
97
|
-
this._editor.setValue(this._value);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
registerOnChange(fn) {
|
|
101
|
-
this.onChange = fn;
|
|
102
|
-
}
|
|
103
|
-
registerOnTouched(fn) {
|
|
104
|
-
this.onTouched = fn;
|
|
105
|
-
}
|
|
106
|
-
setDisabledState(isDisabled) {
|
|
107
|
-
this.disabled = isDisabled;
|
|
108
|
-
}
|
|
49
|
+
//#endregion
|
|
109
50
|
//#region Private Members
|
|
110
|
-
|
|
111
|
-
_editor;
|
|
112
|
-
_value = '';
|
|
113
|
-
_readonly = false;
|
|
114
|
-
_disabled = false;
|
|
115
|
-
_lineNumbers = false;
|
|
116
|
-
_placeholder = "";
|
|
51
|
+
_feelEditor;
|
|
117
52
|
_dialect = "expression";
|
|
118
53
|
_builtins;
|
|
119
54
|
_variables;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (!this.isViewInit || !this.editorContainerRef?.nativeElement)
|
|
124
|
-
return;
|
|
125
|
-
this._editor = new FeelEditor({
|
|
126
|
-
container: this.editorContainerRef.nativeElement,
|
|
127
|
-
placeholder: this._placeholder,
|
|
128
|
-
readOnly: (this._readonly || this._disabled),
|
|
55
|
+
createEditorView(container) {
|
|
56
|
+
this._feelEditor = new FeelEditor({
|
|
57
|
+
container: container,
|
|
129
58
|
dialect: this.dialect,
|
|
130
|
-
value: this.
|
|
131
|
-
builtins: this.
|
|
132
|
-
variables: this._variables,
|
|
133
|
-
|
|
134
|
-
this._value = value;
|
|
135
|
-
this.onChange(value);
|
|
136
|
-
this.change.emit(value);
|
|
137
|
-
},
|
|
138
|
-
onKeyDown: (event) => this.keydown.emit(event),
|
|
139
|
-
onLint: (issues) => this.lint.emit(issues),
|
|
140
|
-
extensions: [...(this._lineNumbers ? [lineNumbers()] : []), EditorView.lineWrapping],
|
|
141
|
-
});
|
|
142
|
-
this.configureEditor(this._editor);
|
|
143
|
-
this.editorContainerRef?.nativeElement.classList.toggle('disabled', this._disabled);
|
|
144
|
-
}
|
|
145
|
-
destroyEditor() {
|
|
146
|
-
if (this._editor) {
|
|
147
|
-
this._editor = undefined;
|
|
148
|
-
this.editorContainerRef.nativeElement.innerHTML = '';
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
refreshEditor() {
|
|
152
|
-
this.destroyEditor();
|
|
153
|
-
this.createEditor();
|
|
154
|
-
}
|
|
155
|
-
configureEditor(editor) {
|
|
156
|
-
if (!editor._cmEditor)
|
|
157
|
-
return;
|
|
158
|
-
const customKeymap = keymap.of([
|
|
159
|
-
{
|
|
160
|
-
key: "Shift-+",
|
|
161
|
-
run: indentMore
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
key: "Shift--",
|
|
165
|
-
run: indentLess
|
|
166
|
-
}
|
|
167
|
-
]);
|
|
168
|
-
editor._cmEditor.dispatch({
|
|
169
|
-
effects: state.StateEffect.appendConfig.of([
|
|
170
|
-
history(),
|
|
171
|
-
keymap.of(historyKeymap),
|
|
172
|
-
customKeymap
|
|
173
|
-
])
|
|
59
|
+
value: this.value,
|
|
60
|
+
builtins: this.getBuiltins() ?? undefined,
|
|
61
|
+
variables: this._variables ?? undefined,
|
|
62
|
+
extensions: this.getExtensions()
|
|
174
63
|
});
|
|
64
|
+
return this._feelEditor._cmEditor;
|
|
175
65
|
}
|
|
176
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps:
|
|
177
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
useExisting: forwardRef(() => FeelEditorComponent),
|
|
181
|
-
multi: true
|
|
182
|
-
}
|
|
183
|
-
], viewQueries: [{ propertyName: "editorContainerRef", first: true, predicate: ["editorContainer"], descendants: true, static: true }], ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeelEditorComponent, isStandalone: true, selector: "feel-editor", inputs: { dialect: "dialect", builtins: "builtins", variables: "variables" }, providers: [
|
|
68
|
+
createValueAccessorProvider(FeelEditorComponent)
|
|
69
|
+
], usesInheritance: true, ngImport: i0, template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }] });
|
|
184
70
|
}
|
|
185
71
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeelEditorComponent, decorators: [{
|
|
186
72
|
type: Component,
|
|
187
73
|
args: [{ selector: 'feel-editor', standalone: true, imports: [CommonModule, ReactiveFormsModule], providers: [
|
|
188
|
-
|
|
189
|
-
provide: NG_VALUE_ACCESSOR,
|
|
190
|
-
useExisting: forwardRef(() => FeelEditorComponent),
|
|
191
|
-
multi: true
|
|
192
|
-
}
|
|
74
|
+
createValueAccessorProvider(FeelEditorComponent)
|
|
193
75
|
], template: "<div #editorContainer\r\n class=\"feel-editor-container\"\r\n (blur)=\"onTouched()\"\r\n [ngClass]=\"embedded ? 'feel-editor-embedded' : 'feel-editor-standalone'\"\r\n [style.min-height]=\"minHeight\"\r\n [style.max-height]=\"maxHeight\">\r\n</div>\r\n", styles: [".feel-editor-container{height:100%;overflow-y:auto}.feel-editor-standalone{border:1px solid #ccc;padding:5px}.feel-editor-embedded{border:0px;padding:0}.feel-editor-container.disabled{pointer-events:none;opacity:.6}\n"] }]
|
|
194
|
-
}], propDecorators: {
|
|
195
|
-
type: ViewChild,
|
|
196
|
-
args: ['editorContainer', { static: true }]
|
|
197
|
-
}], change: [{
|
|
198
|
-
type: Output
|
|
199
|
-
}], keydown: [{
|
|
200
|
-
type: Output
|
|
201
|
-
}], lint: [{
|
|
202
|
-
type: Output
|
|
203
|
-
}], embedded: [{
|
|
204
|
-
type: Input
|
|
205
|
-
}], minHeight: [{
|
|
206
|
-
type: Input
|
|
207
|
-
}], maxHeight: [{
|
|
208
|
-
type: Input
|
|
209
|
-
}], disabled: [{
|
|
210
|
-
type: Input
|
|
211
|
-
}], readonly: [{
|
|
212
|
-
type: Input
|
|
213
|
-
}], lineNumbers: [{
|
|
214
|
-
type: Input
|
|
215
|
-
}], placeholder: [{
|
|
216
|
-
type: Input
|
|
217
|
-
}], value: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], dialect: [{
|
|
76
|
+
}], propDecorators: { dialect: [{
|
|
220
77
|
type: Input
|
|
221
78
|
}], builtins: [{
|
|
222
79
|
type: Input
|
|
223
80
|
}], variables: [{
|
|
224
81
|
type: Input
|
|
225
82
|
}] } });
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmVlbC1lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZlZWwtZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9mZWVsLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFFbEQsT0FBTyxFQUNMLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUNoRCxZQUFZLEVBQzNCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxVQUFzRCxNQUFNLHNCQUFzQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRixPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDOzs7QUFnQjNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDa0Isa0JBQWtCLENBQWM7SUFFdEUsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDcEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBQzVDLElBQUksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lB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VUFBVSxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsQ0FBQzs0QkFDbEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEJBRytDLGtCQUFrQjtzQkFBakUsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXBDLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFFRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFPRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsUUFBUTtzQkFEWCxLQUFLO2dCQWFGLFdBQVc7c0JBRGQsS0FBSztnQkFhRixXQUFXO3NCQURkLEtBQUs7Z0JBYUYsS0FBSztzQkFEUixLQUFLO2dCQVVGLE9BQU87c0JBRFYsS0FBSztnQkFhRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uL3R5cGVzL2ZlZWwtZWRpdG9yLmQudHNcIiAvPlxyXG5cclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPdXRwdXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZFxyXG4gICwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEZlZWxFZGl0b3IsIHsgRmVlbERpYWxlY3QsIEZlZWxCdWlsdGluLCBGZWVsVmFyaWFibGUgfSBmcm9tICdAYnBtbi1pby9mZWVsLWVkaXRvcic7XHJcbmltcG9ydCB7IGxpbmVOdW1iZXJzLCBFZGl0b3JWaWV3IH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XHJcbmltcG9ydCB7IGtleW1hcCB9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xyXG5pbXBvcnQgeyBpbmRlbnRMZXNzLCBpbmRlbnRNb3JlLCBoaXN0b3J5LCBoaXN0b3J5S2V5bWFwIH0gZnJvbSAnQGNvZGVtaXJyb3IvY29tbWFuZHMnXHJcbmltcG9ydCAqIGFzIHN0YXRlIGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZmVlbC1lZGl0b3InLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWVsLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmVlbC1lZGl0b3IuY29tcG9uZW50LmNzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGZWVsRWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGZWVsRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvckNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkga2V5ZG93biA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgbGludCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBJbnB1dCgpIGVtYmVkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWluSGVpZ2h0Pzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heEhlaWdodD86IHN0cmluZztcclxuXHJcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9kaXNhYmxlZCA9PT0gdmFsdWUpXHJcbiAgICAgIHJldHVybjtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlZnJlc2hFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fcmVhZG9ubHkgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xyXG4gICAgdGhpcy5yZWZyZXNoRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgbGluZU51bWJlcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGluZU51bWJlcnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBsaW5lTnVtYmVycyh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJzID09PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5fbGluZU51bWJlcnMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xyXG4gICAgICB0aGlzLl9lZGl0b3Iuc2V0UGxhY2Vob2xkZXIodmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpYWxlY3QoKTogRmVlbERpYWxlY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RpYWxlY3Q7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaWFsZWN0KHZhbHVlOiBGZWVsRGlhbGVjdCkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxlY3QgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLl9kaWFsZWN0ID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlZnJlc2hFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIGdldCBidWlsdGlucygpOiBGZWVsQnVpbHRpbltdIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9idWlsdGlucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGJ1aWx0aW5zKHZhbHVlOiBGZWVsQnVpbHRpbltdIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fYnVpbHRpbnMgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47ICAgIFxyXG4gICAgdGhpcy5fYnVpbHRpbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHZhcmlhYmxlcygpOiBGZWVsVmFyaWFibGVbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFyaWFibGVzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgdmFyaWFibGVzKHZhbHVlOiBGZWVsVmFyaWFibGVbXSB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fdmFyaWFibGVzID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRvci5zZXRWYXJpYWJsZXModmFsdWUgfHwgW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1ZpZXdJbml0ID0gdHJ1ZTtcclxuICAgIHRoaXMuY3JlYXRlRWRpdG9yKCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMuX2VkaXRvcikge1xyXG4gICAgICB0aGlzLl9lZGl0b3Iuc2V0VmFsdWUodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBQcml2YXRlIE1lbWJlcnNcclxuXHJcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2VkaXRvcj86IEZlZWxFZGl0b3I7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XHJcblxyXG4gIHByaXZhdGUgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2xpbmVOdW1iZXJzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBwcml2YXRlIF9kaWFsZWN0OiBGZWVsRGlhbGVjdCA9IFwiZXhwcmVzc2lvblwiO1xyXG5cclxuICBwcml2YXRlIF9idWlsdGluczogRmVlbEJ1aWx0aW5bXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfdmFyaWFibGVzOiBGZWVsVmFyaWFibGVbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuXHJcbiAgcHVibGljIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNWaWV3SW5pdCB8fCAhdGhpcy5lZGl0b3JDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9lZGl0b3IgPSBuZXcgRmVlbEVkaXRvcih7XHJcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5lZGl0b3JDb250YWluZXJSZWYubmF0aXZlRWxlbWVudCxcclxuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuX3BsYWNlaG9sZGVyLFxyXG4gICAgICByZWFkT25seTogKHRoaXMuX3JlYWRvbmx5IHx8IHRoaXMuX2Rpc2FibGVkKSxcclxuICAgICAgZGlhbGVjdDogdGhpcy5kaWFsZWN0LFxyXG4gICAgICB2YWx1ZTogdGhpcy5fdmFsdWUsXHJcbiAgICAgIGJ1aWx0aW5zOiB0aGlzLl9idWlsdGlucyxcclxuICAgICAgdmFyaWFibGVzOiB0aGlzLl92YXJpYWJsZXMsXHJcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uS2V5RG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmtleWRvd24uZW1pdChldmVudCksXHJcbiAgICAgIG9uTGludDogKGlzc3VlczogYW55W10pID0+IHRoaXMubGludC5lbWl0KGlzc3VlcyksXHJcbiAgICAgIGV4dGVuc2lvbnM6IFsuLi4odGhpcy5fbGluZU51bWJlcnMgPyBbbGluZU51bWJlcnMoKV0gOiBbXSksIEVkaXRvclZpZXcubGluZVdyYXBwaW5nXSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJlRWRpdG9yKHRoaXMuX2VkaXRvcik7XHJcblxyXG4gICAgdGhpcy5lZGl0b3JDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzYWJsZWQnLCB0aGlzLl9kaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRlc3Ryb3lFZGl0b3IoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fZWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuX2VkaXRvciA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5lZGl0b3JDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnJztcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlZnJlc2hFZGl0b3IoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3lFZGl0b3IoKTtcclxuICAgIHRoaXMuY3JlYXRlRWRpdG9yKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbmZpZ3VyZUVkaXRvcihlZGl0b3I6IGFueSkge1xyXG5cclxuICAgIGlmICghZWRpdG9yLl9jbUVkaXRvcilcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGN1c3RvbUtleW1hcCA9IGtleW1hcC5vZihbXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6IFwiU2hpZnQtK1wiLFxyXG4gICAgICAgIHJ1bjogaW5kZW50TW9yZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiBcIlNoaWZ0LS1cIixcclxuICAgICAgICBydW46IGluZGVudExlc3NcclxuICAgICAgfVxyXG4gICAgXSk7XHJcblxyXG4gICAgZWRpdG9yLl9jbUVkaXRvci5kaXNwYXRjaCh7XHJcbiAgICAgIGVmZmVjdHM6IHN0YXRlLlN0YXRlRWZmZWN0LmFwcGVuZENvbmZpZy5vZihbXHJcbiAgICAgICAgaGlzdG9yeSgpLFxyXG4gICAgICAgIGtleW1hcC5vZihoaXN0b3J5S2V5bWFwKSxcclxuICAgICAgICBjdXN0b21LZXltYXBcclxuICAgICAgXSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiAjZWRpdG9yQ29udGFpbmVyXHJcbiAgICAgY2xhc3M9XCJmZWVsLWVkaXRvci1jb250YWluZXJcIlxyXG4gICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICBbbmdDbGFzc109XCJlbWJlZGRlZCA/ICdmZWVsLWVkaXRvci1lbWJlZGRlZCcgOiAnZmVlbC1lZGl0b3Itc3RhbmRhbG9uZSdcIlxyXG4gICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiXHJcbiAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlbC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmVlbC1lZGl0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZlZWwtZWRpdG9yL3NyYy9saWIvY29tcG9uZW50cy9mZWVsLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrREFBa0Q7QUFFbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sVUFBc0QsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBWXpGLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFFMUQsaUJBQWlCO0lBRWpCLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDSSxPQUFPLENBQUMsS0FBa0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUs7WUFDekIsT0FBTztRQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsWUFBWTtJQUVaLGtCQUFrQjtJQUVsQixJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQ0ksUUFBUSxDQUFDLEtBQXVDO1FBQ2xELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLO1lBQzFCLE9BQU87UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtJQUVaLG1CQUFtQjtJQUVuQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVELElBQ0ksU0FBUyxDQUFDLEtBQXdDO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWix5QkFBeUI7SUFFakIsV0FBVyxDQUFnQztJQUUzQyxRQUFRLEdBQWdCLFlBQVksQ0FBQztJQUVyQyxTQUFTLENBQW1DO0lBRTVDLFVBQVUsQ0FBb0M7SUFFN0MsZ0JBQWdCLENBQUMsU0FBYztRQUV0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDO1lBQ2hDLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTO1lBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLFNBQVM7WUFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7U0FDakMsQ0FBQyxDQUFDO1FBRUgsT0FBUSxJQUFJLENBQUMsV0FBbUIsQ0FBRSxTQUFTLENBQUM7SUFDOUMsQ0FBQzt3R0FoRlUsbUJBQW1COzRGQUFuQixtQkFBbUIsd0lBSm5CO1lBQ1QsMkJBQTJCLENBQUMsbUJBQW1CLENBQUM7U0FDakQsaURDakJILGtSQU9BLGtSRE9ZLFlBQVksNEhBQUUsbUJBQW1COzs0RkFLaEMsbUJBQW1CO2tCQVYvQixTQUFTOytCQUNFLGFBQWEsY0FHWCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsYUFDakM7d0JBQ1QsMkJBQTJCLHFCQUFxQjtxQkFDakQ7OEJBV0csT0FBTztzQkFEVixLQUFLO2dCQWlCRixRQUFRO3NCQURYLEtBQUs7Z0JBeUJGLFNBQVM7c0JBRFosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi90eXBlcy9mZWVsLWVkaXRvci5kLnRzXCIgLz5cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IEZlZWxFZGl0b3IsIHsgRmVlbERpYWxlY3QsIEZlZWxCdWlsdGluLCBGZWVsVmFyaWFibGUgfSBmcm9tICdAYnBtbi1pby9mZWVsLWVkaXRvcic7XHJcbmltcG9ydCB7IGdldERlZmF1bHRCdWlsdGlucyB9IGZyb20gJy4uL3V0aWxzL3BhcnNlQnVpbHRpbnMnO1xyXG5pbXBvcnQgeyBDb2RlRWRpdG9yQ29tcG9uZW50LCBjcmVhdGVWYWx1ZUFjY2Vzc29yUHJvdmlkZXIgfSBmcm9tICdAd2VtYWtlNHUvY29kZS1lZGl0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmZWVsLWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZlZWwtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mZWVsLWVkaXRvci5jb21wb25lbnQuY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIGNyZWF0ZVZhbHVlQWNjZXNzb3JQcm92aWRlcihGZWVsRWRpdG9yQ29tcG9uZW50KVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZlZWxFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBDb2RlRWRpdG9yQ29tcG9uZW50IHtcclxuXHJcbiAgLy8jcmVnaW9uIGRpYWxlY3RcclxuXHJcbiAgZ2V0IGRpYWxlY3QoKTogRmVlbERpYWxlY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RpYWxlY3Q7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaWFsZWN0KHZhbHVlOiBGZWVsRGlhbGVjdCkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxlY3QgPT09IHZhbHVlKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB0aGlzLl9kaWFsZWN0ID0gdmFsdWU7XHJcbiAgICB0aGlzLnJlZnJlc2hFZGl0b3IoKTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gYnVpbHRpbnNcclxuXHJcbiAgZ2V0IGJ1aWx0aW5zKCk6IEZlZWxCdWlsdGluW10gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9idWlsdGlucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGJ1aWx0aW5zKHZhbHVlOiBGZWVsQnVpbHRpbltdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX2J1aWx0aW5zID09PSB2YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5fYnVpbHRpbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMucmVmcmVzaEVkaXRvcigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCdWlsdGlucygpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuX2J1aWx0aW5zKSkge1xyXG4gICAgICByZXR1cm4gWy4uLmdldERlZmF1bHRCdWlsdGlucygpLCAuLi50aGlzLl9idWlsdGluc107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2J1aWx0aW5zO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiB2YXJpYWJsZXNcclxuXHJcbiAgZ2V0IHZhcmlhYmxlcygpOiBGZWVsVmFyaWFibGVbXSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlcztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHZhcmlhYmxlcyh2YWx1ZTogRmVlbFZhcmlhYmxlW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl92YXJpYWJsZXMgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9mZWVsRWRpdG9yKSB7XHJcbiAgICAgIHRoaXMuX2ZlZWxFZGl0b3Iuc2V0VmFyaWFibGVzKHZhbHVlIHx8IFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gUHJpdmF0ZSBNZW1iZXJzXHJcblxyXG4gIHByaXZhdGUgX2ZlZWxFZGl0b3I6IEZlZWxFZGl0b3IgfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcml2YXRlIF9kaWFsZWN0OiBGZWVsRGlhbGVjdCA9IFwiZXhwcmVzc2lvblwiO1xyXG5cclxuICBwcml2YXRlIF9idWlsdGluczogRmVlbEJ1aWx0aW5bXSB8IG51bGwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByaXZhdGUgX3ZhcmlhYmxlczogRmVlbFZhcmlhYmxlW10gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBvdmVycmlkZSBjcmVhdGVFZGl0b3JWaWV3KGNvbnRhaW5lcjogYW55KSB7XHJcblxyXG4gICAgdGhpcy5fZmVlbEVkaXRvciA9IG5ldyBGZWVsRWRpdG9yKHtcclxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXHJcbiAgICAgIGRpYWxlY3Q6IHRoaXMuZGlhbGVjdCxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgIGJ1aWx0aW5zOiB0aGlzLmdldEJ1aWx0aW5zKCkgPz8gdW5kZWZpbmVkLFxyXG4gICAgICB2YXJpYWJsZXM6IHRoaXMuX3ZhcmlhYmxlcyA/PyB1bmRlZmluZWQsXHJcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuZ2V0RXh0ZW5zaW9ucygpXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gKHRoaXMuX2ZlZWxFZGl0b3IgYXMgYW55KSAuX2NtRWRpdG9yO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiAjZWRpdG9yQ29udGFpbmVyXHJcbiAgICAgY2xhc3M9XCJmZWVsLWVkaXRvci1jb250YWluZXJcIlxyXG4gICAgIChibHVyKT1cIm9uVG91Y2hlZCgpXCJcclxuICAgICBbbmdDbGFzc109XCJlbWJlZGRlZCA/ICdmZWVsLWVkaXRvci1lbWJlZGRlZCcgOiAnZmVlbC1lZGl0b3Itc3RhbmRhbG9uZSdcIlxyXG4gICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiXHJcbiAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCI+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { domify } from 'min-dom';
|
|
2
|
+
import defaultBuiltins from '../assets/builtins.json';
|
|
3
|
+
export function parseBuiltins(builtins) {
|
|
4
|
+
return builtins.map(parseBuiltin);
|
|
5
|
+
}
|
|
6
|
+
export function parseBuiltin(builtin) {
|
|
7
|
+
const { name, description } = builtin;
|
|
8
|
+
const match = name.match(/^([\w\s]+)\((.*)\)$/);
|
|
9
|
+
const functionName = match ? match[1] : "";
|
|
10
|
+
const functionArguments = match ? match[2] : "";
|
|
11
|
+
const params = functionArguments ? functionArguments.split(', ').map((name) => ({ name })) : [];
|
|
12
|
+
return {
|
|
13
|
+
name: functionName,
|
|
14
|
+
type: 'function',
|
|
15
|
+
params,
|
|
16
|
+
info: () => {
|
|
17
|
+
return domify(`<div class="description">${description}<div>`);
|
|
18
|
+
},
|
|
19
|
+
boost: 0
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function getDefaultBuiltins() {
|
|
23
|
+
return parseBuiltins(defaultBuiltins);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VCdWlsdGlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZlZWwtZWRpdG9yL3NyYy9saWIvdXRpbHMvcGFyc2VCdWlsdGlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sZUFBZSxNQUFNLHlCQUF5QixDQUFDO0FBT3RELE1BQU0sVUFBVSxhQUFhLENBQUMsUUFBdUI7SUFDbkQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQW9CO0lBRS9DLE1BQU0sRUFDSixJQUFJLEVBQ0osV0FBVyxFQUNaLEdBQUcsT0FBTyxDQUFDO0lBRVosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRS9DLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFeEcsT0FBTztRQUNMLElBQUksRUFBRSxZQUFZO1FBQ2xCLElBQUksRUFBRSxVQUFVO1FBQ2hCLE1BQU07UUFDTixJQUFJLEVBQUUsR0FBRyxFQUFFO1lBQ1QsT0FBTyxNQUFNLENBQUMsNEJBQTRCLFdBQVcsT0FBTyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELEtBQUssRUFBRSxDQUFDO0tBQ1QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCO0lBQ2hDLE9BQU8sYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkb21pZnkgfSBmcm9tICdtaW4tZG9tJztcclxuaW1wb3J0IHsgRmVlbEJ1aWx0aW4gfSBmcm9tICdAYnBtbi1pby9mZWVsLWVkaXRvcic7XHJcbmltcG9ydCBkZWZhdWx0QnVpbHRpbnMgZnJvbSAnLi4vYXNzZXRzL2J1aWx0aW5zLmpzb24nO1xyXG5cclxuaW50ZXJmYWNlIEJ1aWx0aW5JbmZvIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQnVpbHRpbnMoYnVpbHRpbnM6IEJ1aWx0aW5JbmZvW10pOiBGZWVsQnVpbHRpbltdIHtcclxuICByZXR1cm4gYnVpbHRpbnMubWFwKHBhcnNlQnVpbHRpbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJ1aWx0aW4oYnVpbHRpbjogQnVpbHRpbkluZm8pOiBGZWVsQnVpbHRpbiB7XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIG5hbWUsXHJcbiAgICBkZXNjcmlwdGlvblxyXG4gIH0gPSBidWlsdGluO1xyXG5cclxuICBjb25zdCBtYXRjaCA9IG5hbWUubWF0Y2goL14oW1xcd1xcc10rKVxcKCguKilcXCkkLyk7XHJcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gbWF0Y2ggPyBtYXRjaFsxXSA6IFwiXCI7XHJcbiAgY29uc3QgZnVuY3Rpb25Bcmd1bWVudHMgPSBtYXRjaCA/IG1hdGNoWzJdOiBcIlwiO1xyXG5cclxuICBjb25zdCBwYXJhbXMgPSBmdW5jdGlvbkFyZ3VtZW50cyA/IGZ1bmN0aW9uQXJndW1lbnRzLnNwbGl0KCcsICcpLm1hcCgobmFtZTogc3RyaW5nKSA9PiAoeyBuYW1lIH0pKSA6IFtdO1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgbmFtZTogZnVuY3Rpb25OYW1lLFxyXG4gICAgdHlwZTogJ2Z1bmN0aW9uJyxcclxuICAgIHBhcmFtcyxcclxuICAgIGluZm86ICgpID0+IHtcclxuICAgICAgcmV0dXJuIGRvbWlmeShgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHtkZXNjcmlwdGlvbn08ZGl2PmApO1xyXG4gICAgfSxcclxuICAgIGJvb3N0OiAwXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRCdWlsdGlucygpOiBGZWVsQnVpbHRpbltdIHtcclxuICByZXR1cm4gcGFyc2VCdWlsdGlucyhkZWZhdWx0QnVpbHRpbnMpO1xyXG59XHJcbiJdfQ==
|