sliftutils 1.2.22 → 1.2.24
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/.claude/settings.local.json +7 -0
- package/dist/test.ts.cache +13 -0
- package/misc/dist/apiKeys.tsx.cache +145 -0
- package/misc/dist/openrouter.ts.cache +119 -0
- package/misc/dist/yaml.ts.cache +45 -0
- package/misc/dist/yamlBase.ts.cache +2406 -0
- package/misc/openrouter.ts +29 -1
- package/package.json +3 -2
- package/render-utils/dist/Input.tsx.cache +319 -0
- package/render-utils/dist/InputLabel.tsx.cache +220 -0
- package/render-utils/dist/modal.tsx.cache +69 -0
- package/render-utils/dist/observer.tsx.cache +6 -3
- package/storage/FileFolderAPI.tsx +38 -16
- package/test.ts +10 -0
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
12
|
+
//exports.InputLabelURL = exports.InputLabel = exports.endGuessDateRange = exports.startGuessDateRange = void 0;
|
|
13
|
+
const preact_1 = __importDefault(require("preact"));
|
|
14
|
+
const Input_1 = require("./Input");
|
|
15
|
+
const typesafecss_1 = require("typesafecss");
|
|
16
|
+
const caching_1 = require("socket-function/src/caching");
|
|
17
|
+
const observer_1 = require("./observer");
|
|
18
|
+
const mobx_1 = require("mobx");
|
|
19
|
+
function roundToDecimals(value, decimals) {
|
|
20
|
+
return Math.round(value * 10 ** decimals) / 10 ** decimals;
|
|
21
|
+
}
|
|
22
|
+
exports.startGuessDateRange = +new Date(2010, 0, 1).getTime();
|
|
23
|
+
exports.endGuessDateRange = +new Date(2050, 0, 1).getTime();
|
|
24
|
+
let InputLabel = class InputLabel extends preact_1.default.Component {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.synced = (0, mobx_1.observable)({
|
|
28
|
+
editting: false,
|
|
29
|
+
editInputValue: "",
|
|
30
|
+
editUpdateSeqNum: 0,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
render() {
|
|
34
|
+
var _a, _b, _c, _d;
|
|
35
|
+
let props = { ...this.props };
|
|
36
|
+
function addValueMapping(mapper) {
|
|
37
|
+
const baseOnChange = props.onChange;
|
|
38
|
+
if (baseOnChange) {
|
|
39
|
+
props.onChange = e => {
|
|
40
|
+
baseOnChange({ currentTarget: { value: mapper(e.currentTarget.value) } });
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const baseOnChangeValue = props.onChangeValue;
|
|
44
|
+
if (baseOnChangeValue) {
|
|
45
|
+
props.onChangeValue = e => {
|
|
46
|
+
baseOnChangeValue(mapper(e));
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const baseOnBlur = props.onBlur;
|
|
50
|
+
if (baseOnBlur) {
|
|
51
|
+
props.onBlur = e => {
|
|
52
|
+
baseOnBlur({ currentTarget: { value: mapper(e.currentTarget.value) } });
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const baseOnInput = props.onInput;
|
|
56
|
+
if (baseOnInput) {
|
|
57
|
+
props.onInput = e => {
|
|
58
|
+
baseOnInput({ currentTarget: { value: mapper(e.currentTarget.value) } });
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
let label = props.label || props.children;
|
|
63
|
+
props.title = props.tooltip;
|
|
64
|
+
if ("value" in props) {
|
|
65
|
+
props.value = (_a = props.value) !== null && _a !== void 0 ? _a : "";
|
|
66
|
+
}
|
|
67
|
+
if ((!props.type || props.type === "number") && props.useDateUI) {
|
|
68
|
+
let value = String(props.value);
|
|
69
|
+
props.type = "datetime-local";
|
|
70
|
+
props.edit = false;
|
|
71
|
+
props.textarea = false;
|
|
72
|
+
props.number = false;
|
|
73
|
+
props.forceInputValueUpdatesWhenFocused = true;
|
|
74
|
+
// NOTE: When using forceInputValueUpdatesWhenFocused we need hot, otherwise the user's updates
|
|
75
|
+
// won't be visible.
|
|
76
|
+
props.hot = true;
|
|
77
|
+
if (isJSNumber(value)) {
|
|
78
|
+
value = formatDateTimeForInput(+value);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
value = "";
|
|
82
|
+
}
|
|
83
|
+
props.value = value;
|
|
84
|
+
addValueMapping(value => (new Date(value).getTime() || Date.now()));
|
|
85
|
+
}
|
|
86
|
+
if (props.fontSize !== undefined) {
|
|
87
|
+
props.style = { ...props.style, fontSize: props.fontSize };
|
|
88
|
+
}
|
|
89
|
+
if (props.integer) {
|
|
90
|
+
props.number = true;
|
|
91
|
+
}
|
|
92
|
+
if (props.number) {
|
|
93
|
+
props.type = "number";
|
|
94
|
+
}
|
|
95
|
+
if (props.checkbox) {
|
|
96
|
+
props.type = "checkbox";
|
|
97
|
+
}
|
|
98
|
+
if (props.percent) {
|
|
99
|
+
props.value = (Number(props.value) || 0) * 100;
|
|
100
|
+
addValueMapping(value => String(+value / 100));
|
|
101
|
+
props.maxDecimals = (_b = props.maxDecimals) !== null && _b !== void 0 ? _b : 2;
|
|
102
|
+
props.number = (_c = props.number) !== null && _c !== void 0 ? _c : true;
|
|
103
|
+
props.type = "number";
|
|
104
|
+
}
|
|
105
|
+
let maxDecimals = props.maxDecimals;
|
|
106
|
+
if (typeof maxDecimals === "number") {
|
|
107
|
+
props.value = roundToDecimals(Number(props.value), maxDecimals);
|
|
108
|
+
}
|
|
109
|
+
function formatDateTimeForInput(value) {
|
|
110
|
+
value -= new Date(value).getTimezoneOffset() * 60 * 1000;
|
|
111
|
+
return new Date(value).toISOString().slice(0, -1);
|
|
112
|
+
}
|
|
113
|
+
let style = { ...props.style };
|
|
114
|
+
if (props.type === "number") {
|
|
115
|
+
let fontSize = (_d = props.fontSize) !== null && _d !== void 0 ? _d : 12;
|
|
116
|
+
style.width = 40 + String(props.value).length * (fontSize * 0.75);
|
|
117
|
+
}
|
|
118
|
+
let onClick;
|
|
119
|
+
if (props.edit) {
|
|
120
|
+
let baseBlur = props.onBlur;
|
|
121
|
+
props.onBlur = e => {
|
|
122
|
+
this.synced.editting = false;
|
|
123
|
+
baseBlur === null || baseBlur === void 0 ? void 0 : baseBlur(e);
|
|
124
|
+
};
|
|
125
|
+
onClick = (e) => {
|
|
126
|
+
e.stopPropagation();
|
|
127
|
+
this.synced.editting = true;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
let stateEditting = this.synced.editting;
|
|
131
|
+
let sizeBasedOnContents = props.edit;
|
|
132
|
+
if (props.edit && !stateEditting) {
|
|
133
|
+
sizeBasedOnContents = false;
|
|
134
|
+
}
|
|
135
|
+
if (sizeBasedOnContents) {
|
|
136
|
+
let baseChange = props.onChange;
|
|
137
|
+
props.onChange = e => {
|
|
138
|
+
this.synced.editUpdateSeqNum++;
|
|
139
|
+
baseChange === null || baseChange === void 0 ? void 0 : baseChange(e);
|
|
140
|
+
};
|
|
141
|
+
this.synced.editUpdateSeqNum;
|
|
142
|
+
}
|
|
143
|
+
let input = preact_1.default.createElement(Input_1.Input, { ...props, label: String(label), style: style, className: (props.flavor === "large" && "large "
|
|
144
|
+
|| props.flavor === "none" && " "
|
|
145
|
+
|| "tiny ")
|
|
146
|
+
+ (props.class || props.className)
|
|
147
|
+
+ (sizeBasedOnContents && typesafecss_1.css.absolute.pos(0, 0).fillBoth.resize("none") || ""), onInput: e => {
|
|
148
|
+
var _a;
|
|
149
|
+
if (props.edit) {
|
|
150
|
+
this.synced.editInputValue = e.currentTarget.value;
|
|
151
|
+
}
|
|
152
|
+
(_a = props.onInput) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
153
|
+
} });
|
|
154
|
+
if (props.edit && !stateEditting) {
|
|
155
|
+
input = preact_1.default.createElement("span", { className: typesafecss_1.css.hbox(2) + " inputPlaceholder trigger-hover "
|
|
156
|
+
+ props.editClass },
|
|
157
|
+
preact_1.default.createElement("span", { className: typesafecss_1.css.whiteSpace("pre-wrap")
|
|
158
|
+
+ (props.class || props.className) }, props.value),
|
|
159
|
+
preact_1.default.createElement("span", { className: typesafecss_1.css.opacity(0.1).opacity(1, "hover") }, pencilSVG()));
|
|
160
|
+
}
|
|
161
|
+
return (preact_1.default.createElement("label", { onClick: onClick, className: typesafecss_1.css.hbox(5).relative
|
|
162
|
+
+ " trigger-hover "
|
|
163
|
+
+ props.outerClass
|
|
164
|
+
+ (props.flavor === "large" && typesafecss_1.css.fontSize(18, "soft"))
|
|
165
|
+
+ (props.fillWidth && typesafecss_1.css.fillWidth)
|
|
166
|
+
+ typesafecss_1.css.position("relative", "soft") },
|
|
167
|
+
sizeBasedOnContents &&
|
|
168
|
+
preact_1.default.createElement("span", { className: typesafecss_1.css.whiteSpace("pre-wrap")
|
|
169
|
+
//.opacity(0)
|
|
170
|
+
//.pointerEvents("none")
|
|
171
|
+
+ (props.editClass)
|
|
172
|
+
+ " " + (props.class || props.className) },
|
|
173
|
+
this.synced.editInputValue || props.value || props.placeholder,
|
|
174
|
+
" |"),
|
|
175
|
+
label && preact_1.default.createElement("span", { className: typesafecss_1.css.fontWeight("bold").flexShrink0 }, label),
|
|
176
|
+
input));
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
exports.InputLabel = InputLabel;
|
|
180
|
+
exports.InputLabel = InputLabel = __decorate([
|
|
181
|
+
observer_1.observer
|
|
182
|
+
], InputLabel);
|
|
183
|
+
const pencilSVG = (0, caching_1.lazy)(() => {
|
|
184
|
+
const src = "data:image/svg+xml;base64," + Buffer.from(`
|
|
185
|
+
<svg width="24" height="24" viewBox="-1 1 23 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
186
|
+
<path d="M5.98012 19.3734L8.60809 18.7164C8.62428 18.7124 8.64043 18.7084 8.65654 18.7044C8.87531 18.65 9.08562 18.5978 9.27707 18.4894C9.46852 18.381 9.62153 18.2275 9.7807 18.0679C9.79242 18.0561 9.80418 18.0444 9.81598 18.0325L17.0101 10.8385L17.0101 10.8385L17.0369 10.8117C17.3472 10.5014 17.6215 10.2272 17.8128 9.97638C18.0202 9.70457 18.1858 9.39104 18.1858 9C18.1858 8.60896 18.0202 8.29543 17.8128 8.02361C17.6215 7.77285 17.3472 7.49863 17.0369 7.18835L17.01 7.16152L16.8385 6.98995L16.8117 6.96314C16.5014 6.6528 16.2272 6.37853 15.9764 6.1872C15.7046 5.97981 15.391 5.81421 15 5.81421C14.609 5.81421 14.2954 5.97981 14.0236 6.1872C13.7729 6.37853 13.4986 6.65278 13.1884 6.96311L13.1615 6.98995L5.96745 14.184C5.95565 14.1958 5.94386 14.2076 5.93211 14.2193C5.77249 14.3785 5.61904 14.5315 5.51064 14.7229C5.40225 14.9144 5.34999 15.1247 5.29562 15.3435C5.29162 15.3596 5.28761 15.3757 5.28356 15.3919L4.62003 18.046C4.61762 18.0557 4.61518 18.0654 4.61272 18.0752C4.57411 18.2293 4.53044 18.4035 4.51593 18.5518C4.49978 18.7169 4.50127 19.0162 4.74255 19.2574C4.98383 19.4987 5.28307 19.5002 5.44819 19.4841C5.59646 19.4696 5.77072 19.4259 5.92479 19.3873C5.9346 19.3848 5.94433 19.3824 5.95396 19.38L5.95397 19.38L5.9801 19.3734L5.98012 19.3734Z" stroke="#33363F" stroke-width="1.2" fill="hsl(330, 50%, 60%)" />
|
|
187
|
+
<path d="M12.5 7.5L5.92819 14.0718C5.71566 14.2843 5.60939 14.3906 5.53953 14.5212C5.46966 14.6517 5.44019 14.7991 5.38124 15.0938L4.64709 18.7646C4.58057 19.0972 4.5473 19.2635 4.64191 19.3581C4.73652 19.4527 4.90283 19.4194 5.23544 19.3529L8.90621 18.6188C9.20093 18.5598 9.3483 18.5303 9.47885 18.4605C9.60939 18.3906 9.71566 18.2843 9.92819 18.0718L16.5 11.5L12.5 7.5Z" fill="hsl(45, 100%, 50%)" />
|
|
188
|
+
<path d="M12.5 7.5L16.5 11.5" stroke="#33363F" stroke-width="1.2" />
|
|
189
|
+
</svg>
|
|
190
|
+
`).toString("base64");
|
|
191
|
+
return preact_1.default.createElement("img", { draggable: false, src: src });
|
|
192
|
+
});
|
|
193
|
+
let InputLabelURL = class InputLabelURL extends preact_1.default.Component {
|
|
194
|
+
render() {
|
|
195
|
+
this.props.persisted.value;
|
|
196
|
+
let props = { ...this.props };
|
|
197
|
+
if (props.type === "number" || props.number) {
|
|
198
|
+
return preact_1.default.createElement(InputLabel, { ...props, value: Number(props.persisted.value) || 0, onChange: e => { var _a; props.persisted.value = +e.currentTarget.value; (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e); } });
|
|
199
|
+
}
|
|
200
|
+
else if (props.type === "checkbox" || this.props.checkbox) {
|
|
201
|
+
return preact_1.default.createElement(InputLabel, { ...props, checked: Boolean(props.persisted.value) || false, onFocus: e => e.currentTarget.blur(), onChange: e => {
|
|
202
|
+
var _a;
|
|
203
|
+
props.persisted.value = e.currentTarget.checked ? "1" : "";
|
|
204
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
205
|
+
} });
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return preact_1.default.createElement(InputLabel, { ...props, value: String(props.persisted.value) || "", onChange: e => { var _a; props.persisted.value = e.currentTarget.value; (_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e); } });
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
exports.InputLabelURL = InputLabelURL;
|
|
213
|
+
exports.InputLabelURL = InputLabelURL = __decorate([
|
|
214
|
+
observer_1.observer
|
|
215
|
+
], InputLabelURL);
|
|
216
|
+
function isJSNumber(value) {
|
|
217
|
+
return !isNaN(+value);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRMYWJlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIklucHV0TGFiZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixtQ0FBZ0M7QUFDaEMsNkNBQWtDO0FBQ2xDLHlEQUFtRDtBQUNuRCx5Q0FBc0M7QUFDdEMsK0JBQWtDO0FBa0VsQyxTQUFTLGVBQWUsQ0FBQyxLQUFhLEVBQUUsUUFBZ0I7SUFDcEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQztBQUMvRCxDQUFDO0FBRVksUUFBQSxtQkFBbUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEQsUUFBQSxpQkFBaUIsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7QUFHMUQsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLGdCQUFNLENBQUMsU0FBMEI7SUFBMUQ7O1FBQ0gsV0FBTSxHQUFHLElBQUEsaUJBQVUsRUFBQztZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLENBQUM7U0FDdEIsQ0FBQyxDQUFDO0lBa01QLENBQUM7SUFoTUcsTUFBTTs7UUFDRixJQUFJLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTlCLFNBQVMsZUFBZSxDQUFDLE1BQWlDO1lBQ3RELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDcEMsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDZixLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFO29C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QUFDLE1BQUEsS0FBSyxDQUFDLFFBQVEsc0RBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksQ0FBQztRQUN6SyxDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUE7QUF0Qlksc0NBQWE7d0JBQWIsYUFBYTtJQUR6QixtQkFBUTtHQUNJLGFBQWEsQ0FzQnpCO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUM3QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwcmVhY3QgZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiLi9JbnB1dFwiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcInR5cGVzYWZlY3NzXCI7XG5pbXBvcnQgeyBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlclwiO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSB9IGZyb20gXCJtb2J4XCI7XG5cbi8vIElNUE9SVEFOVCEgSW5wdXRQcm9wcyBpcyBpbiBib3RoIElucHV0TGFiZWwudHN4IGFuZCBJbnB1dC50c3gsIHNvIHRoZSB0eXBlcyBleHBvcnQgY29ycmVjdGx5XG5leHBvcnQgdHlwZSBJbnB1dFByb3BzID0gKFxuICAgIHByZWFjdC5KU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD5cbiAgICAmIHtcbiAgICAgICAgLyoqIE9OTFkgdGhyb3R0bGVzIG9uQ2hhbmdlVmFsdWUgKi9cbiAgICAgICAgdGhyb3R0bGU/OiBudW1iZXI7XG5cbiAgICAgICAgZmxhdm9yPzogXCJsYXJnZVwiIHwgXCJzbWFsbFwiIHwgXCJub25lXCI7XG4gICAgICAgIGZvY3VzT25Nb3VudD86IGJvb2xlYW47XG4gICAgICAgIHRleHRhcmVhPzogYm9vbGVhbjtcbiAgICAgICAgLyoqIFVwZGF0ZSBvbiBrZXkgc3Ryb2tlLCBub3Qgb24gYmx1ciAoanVzdCBkb2VzIG9uSW5wdXQgPSBvbkNoYW5nZSwgYXMgb25JbnB1dCBhbHJlYWR5IGRvZXMgdGhpcykgKi9cbiAgICAgICAgaG90PzogYm9vbGVhbjtcbiAgICAgICAgLyoqIFVwZGF0ZXMgYXJyb3cga2V5cyB3aXRoIG1vZGlmaWVyIGJlaGF2aW9yIHRvIHVzZSBsYXJnZXIgbnVtYmVycywgaW5zdGVhZCBvZiBkZWNpbWFscy4gKi9cbiAgICAgICAgaW50ZWdlcj86IGJvb2xlYW47XG5cbiAgICAgICAgLyoqIE9ubHkgd29ya3Mgd2l0aCBudW1iZXIvaW50ZWdlciAqL1xuICAgICAgICByZXZlcnNlQXJyb3dLZXlEaXJlY3Rpb24/OiBib29sZWFuO1xuXG4gICAgICAgIGlucHV0UmVmPzogKHg6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsKSA9PiB2b2lkO1xuICAgICAgICAvKiogRG9uJ3QgYmx1ciBvbiBlbnRlciBrZXkgKi9cbiAgICAgICAgbm9FbnRlcktleUJsdXI/OiBib29sZWFuO1xuICAgICAgICBub0ZvY3VzU2VsZWN0PzogYm9vbGVhbjtcbiAgICAgICAgaW5wdXRLZXk/OiBzdHJpbmc7XG4gICAgICAgIGZpbGxXaWR0aD86IGJvb2xlYW47XG5cblxuICAgICAgICBhdXRvY29tcGxldGVWYWx1ZXM/OiBzdHJpbmdbXTtcblxuICAgICAgICAvKiogRm9yY2VzIHRoZSBpbnB1dCB0byB1cGRhdGUgd2hlbiBmb2N1c2VkLiBVc3VhbGx5IHdlIGhvbGQgdXBkYXRlcywgdG8gcHJldmVudCB0aGUgdXNlcidzXG4gICAgICAgICAqICAgICAgdHlwaW5nIHRvIGJlIGludGVycnVwdGVkIGJ5IGJhY2tncm91bmQgdXBkYXRlcy5cbiAgICAgICAgICogICAgICBOT1RFOiBcImhvdFwiIGlzIHVzdWFsbHkgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGlzLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yY2VJbnB1dFZhbHVlVXBkYXRlc1doZW5Gb2N1c2VkPzogYm9vbGVhbjtcblxuICAgICAgICAvLyBOT1RFOiBXZSB0cmlnZ2VyIG9uQ2hhbmdlIChhbmQgb25DaGFuZ2VWYWx1ZSkgd2hlbmV2ZXJcbiAgICAgICAgLy8gICAgICBlLmN0cmxLZXkgJiYgKGUuY29kZS5zdGFydHNXaXRoKFwiS2V5XCIpIHx8IGUuY29kZSA9PT0gXCJFbnRlclwiKSB8fCBlLmNvZGUgPT09IFwiRW50ZXJcIiAmJiBlLnNoaWZ0S2V5XG4gICAgICAgIC8vICBUaGlzIGlzIGJlY2F1c2UgY3RybCB1c3VhbGx5IG1lYW5zIGEgaG90a2V5LCBhbmQgaG90a2V5cyB1c3VhbGx5IHdhbnQgY29tbWl0dGVkIHZhbHVlcy5cbiAgICAgICAgb25DaGFuZ2VWYWx1ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH1cbilcblxuZXhwb3J0IHR5cGUgSW5wdXRMYWJlbFByb3BzID0gT21pdDxJbnB1dFByb3BzLCBcImxhYmVsXCIgfCBcInRpdGxlXCI+ICYge1xuICAgIGxhYmVsPzogcHJlYWN0LkNvbXBvbmVudENoaWxkO1xuICAgIG51bWJlcj86IGJvb2xlYW47XG4gICAgLyoqIEEgbnVtYmVyLCBBTkQsIGFuIGludGVnZXIuIENoYW5nZXMgYmVoYXZpb3IgYXJyb3cgYXJyb3cga2V5cyBhcyB3ZWxsICovXG4gICAgaW50ZWdlcj86IGJvb2xlYW47XG4gICAgY2hlY2tib3g/OiBib29sZWFuO1xuICAgIC8vIFNob3cgdGV4dCBhbmQgYSBwZW5jaWwsIG9ubHkgc2hvd2luZyB0aGUgaW5wdXQgb24gY2xpY2tcbiAgICBlZGl0PzogYm9vbGVhbjtcbiAgICBhbHdheXNTaG93UGVuY2lsPzogYm9vbGVhbjtcbiAgICBvdXRlckNsYXNzPzogc3RyaW5nO1xuICAgIG1heERlY2ltYWxzPzogbnVtYmVyO1xuICAgIHBlcmNlbnQ/OiBib29sZWFuO1xuICAgIGVkaXRDbGFzcz86IHN0cmluZztcblxuICAgIGZvbnRTaXplPzogbnVtYmVyO1xuXG4gICAgdG9vbHRpcD86IHN0cmluZztcblxuICAgIGZpbGxXaWR0aD86IGJvb2xlYW47XG5cbiAgICB1c2VEYXRlVUk/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gcm91bmRUb0RlY2ltYWxzKHZhbHVlOiBudW1iZXIsIGRlY2ltYWxzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwICoqIGRlY2ltYWxzKSAvIDEwICoqIGRlY2ltYWxzO1xufVxuXG5leHBvcnQgY29uc3Qgc3RhcnRHdWVzc0RhdGVSYW5nZSA9ICtuZXcgRGF0ZSgyMDEwLCAwLCAxKS5nZXRUaW1lKCk7XG5leHBvcnQgY29uc3QgZW5kR3Vlc3NEYXRlUmFuZ2UgPSArbmV3IERhdGUoMjA1MCwgMCwgMSkuZ2V0VGltZSgpO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBJbnB1dExhYmVsIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDxJbnB1dExhYmVsUHJvcHM+IHtcbiAgICBzeW5jZWQgPSBvYnNlcnZhYmxlKHtcbiAgICAgICAgZWRpdHRpbmc6IGZhbHNlLFxuICAgICAgICBlZGl0SW5wdXRWYWx1ZTogXCJcIixcbiAgICAgICAgZWRpdFVwZGF0ZVNlcU51bTogMCxcbiAgICB9KTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHByb3BzID0geyAuLi50aGlzLnByb3BzIH07XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkVmFsdWVNYXBwaW5nKG1hcHBlcjogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgYmFzZU9uQ2hhbmdlID0gcHJvcHMub25DaGFuZ2U7XG4gICAgICAgICAgICBpZiAoYmFzZU9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZU9uQ2hhbmdlKHsgY3VycmVudFRhcmdldDogeyB2YWx1ZTogbWFwcGVyKGUuY3VycmVudFRhcmdldC52YWx1ZSkgfSB9IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJhc2VPbkNoYW5nZVZhbHVlID0gcHJvcHMub25DaGFuZ2VWYWx1ZTtcbiAgICAgICAgICAgIGlmIChiYXNlT25DaGFuZ2VWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlVmFsdWUgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZU9uQ2hhbmdlVmFsdWUobWFwcGVyKGUpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmFzZU9uQmx1ciA9IHByb3BzLm9uQmx1cjtcbiAgICAgICAgICAgIGlmIChiYXNlT25CbHVyKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25CbHVyID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VPbkJsdXIoeyBjdXJyZW50VGFyZ2V0OiB7IHZhbHVlOiBtYXBwZXIoZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSB9IH0gYXMgYW55KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYmFzZU9uSW5wdXQgPSBwcm9wcy5vbklucHV0O1xuICAgICAgICAgICAgaWYgKGJhc2VPbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcHJvcHMub25JbnB1dCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBiYXNlT25JbnB1dCh7IGN1cnJlbnRUYXJnZXQ6IHsgdmFsdWU6IG1hcHBlcihlLmN1cnJlbnRUYXJnZXQudmFsdWUpIH0gfSBhcyBhbnkpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGFiZWwgPSBwcm9wcy5sYWJlbCB8fCBwcm9wcy5jaGlsZHJlbjtcbiAgICAgICAgKHByb3BzIGFzIGFueSkudGl0bGUgPSBwcm9wcy50b29sdGlwO1xuICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIHByb3BzKSB7XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHByb3BzLnZhbHVlID8/IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKCFwcm9wcy50eXBlIHx8IHByb3BzLnR5cGUgPT09IFwibnVtYmVyXCIpICYmIHByb3BzLnVzZURhdGVVSSkge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gU3RyaW5nKHByb3BzLnZhbHVlKTtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcImRhdGV0aW1lLWxvY2FsXCI7XG4gICAgICAgICAgICBwcm9wcy5lZGl0ID0gZmFsc2U7XG4gICAgICAgICAgICBwcm9wcy50ZXh0YXJlYSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJvcHMubnVtYmVyID0gZmFsc2U7XG4gICAgICAgICAgICBwcm9wcy5mb3JjZUlucHV0VmFsdWVVcGRhdGVzV2hlbkZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gTk9URTogV2hlbiB1c2luZyBmb3JjZUlucHV0VmFsdWVVcGRhdGVzV2hlbkZvY3VzZWQgd2UgbmVlZCBob3QsIG90aGVyd2lzZSB0aGUgdXNlcidzIHVwZGF0ZXNcbiAgICAgICAgICAgIC8vICB3b24ndCBiZSB2aXNpYmxlLlxuICAgICAgICAgICAgcHJvcHMuaG90ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChpc0pTTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm9ybWF0RGF0ZVRpbWVGb3JJbnB1dCgrdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYWRkVmFsdWVNYXBwaW5nKHZhbHVlID0+IChuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpIHx8IERhdGUubm93KCkpIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLmZvbnRTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb3BzLnN0eWxlID0geyAuLi5wcm9wcy5zdHlsZSBhcyBhbnksIGZvbnRTaXplOiBwcm9wcy5mb250U2l6ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5pbnRlZ2VyKSB7XG4gICAgICAgICAgICBwcm9wcy5udW1iZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5udW1iZXIpIHtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wcy5jaGVja2JveCkge1xuICAgICAgICAgICAgcHJvcHMudHlwZSA9IFwiY2hlY2tib3hcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcHMucGVyY2VudCkge1xuICAgICAgICAgICAgcHJvcHMudmFsdWUgPSAoTnVtYmVyKHByb3BzLnZhbHVlKSB8fCAwKSAqIDEwMDtcbiAgICAgICAgICAgIGFkZFZhbHVlTWFwcGluZyh2YWx1ZSA9PiBTdHJpbmcoK3ZhbHVlIC8gMTAwKSk7XG4gICAgICAgICAgICBwcm9wcy5tYXhEZWNpbWFscyA9IHByb3BzLm1heERlY2ltYWxzID8/IDI7XG4gICAgICAgICAgICBwcm9wcy5udW1iZXIgPSBwcm9wcy5udW1iZXIgPz8gdHJ1ZTtcbiAgICAgICAgICAgIHByb3BzLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtYXhEZWNpbWFscyA9IHByb3BzLm1heERlY2ltYWxzO1xuICAgICAgICBpZiAodHlwZW9mIG1heERlY2ltYWxzID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBwcm9wcy52YWx1ZSA9IHJvdW5kVG9EZWNpbWFscyhOdW1iZXIocHJvcHMudmFsdWUpLCBtYXhEZWNpbWFscyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmb3JtYXREYXRlVGltZUZvcklucHV0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHZhbHVlIC09IG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAgKiAxMDAwO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHlsZSA9IHsgLi4ucHJvcHMuc3R5bGUgYXMgYW55IH07XG4gICAgICAgIGlmIChwcm9wcy50eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBsZXQgZm9udFNpemUgPSBwcm9wcy5mb250U2l6ZSA/PyAxMjtcbiAgICAgICAgICAgIHN0eWxlLndpZHRoID0gNDAgKyBTdHJpbmcocHJvcHMudmFsdWUpLmxlbmd0aCAqIChmb250U2l6ZSAqIDAuNzUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbkNsaWNrOiAoKGU6IHByZWFjdC5KU1guVGFyZ2V0ZWRNb3VzZUV2ZW50PEhUTUxFbGVtZW50PikgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChwcm9wcy5lZGl0KSB7XG4gICAgICAgICAgICBsZXQgYmFzZUJsdXIgPSBwcm9wcy5vbkJsdXI7XG4gICAgICAgICAgICBwcm9wcy5vbkJsdXIgPSBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJhc2VCbHVyPy4oZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb25DbGljayA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0dGluZyA9IHRydWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXRlRWRpdHRpbmcgPSB0aGlzLnN5bmNlZC5lZGl0dGluZztcbiAgICAgICAgbGV0IHNpemVCYXNlZE9uQ29udGVudHMgPSBwcm9wcy5lZGl0O1xuICAgICAgICBpZiAocHJvcHMuZWRpdCAmJiAhc3RhdGVFZGl0dGluZykge1xuICAgICAgICAgICAgc2l6ZUJhc2VkT25Db250ZW50cyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaXplQmFzZWRPbkNvbnRlbnRzKSB7XG4gICAgICAgICAgICBsZXQgYmFzZUNoYW5nZSA9IHByb3BzLm9uQ2hhbmdlO1xuICAgICAgICAgICAgcHJvcHMub25DaGFuZ2UgPSBlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0VXBkYXRlU2VxTnVtKys7XG4gICAgICAgICAgICAgICAgYmFzZUNoYW5nZT8uKGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3luY2VkLmVkaXRVcGRhdGVTZXFOdW07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5wdXQgPSA8SW5wdXRcbiAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgIGxhYmVsPXtTdHJpbmcobGFiZWwpfVxuICAgICAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgIHByb3BzLmZsYXZvciA9PT0gXCJsYXJnZVwiICYmIFwibGFyZ2UgXCJcbiAgICAgICAgICAgICAgICAgICAgfHwgcHJvcHMuZmxhdm9yID09PSBcIm5vbmVcIiAmJiBcIiBcIlxuICAgICAgICAgICAgICAgICAgICB8fCBcInRpbnkgXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKyAocHJvcHMuY2xhc3MgfHwgcHJvcHMuY2xhc3NOYW1lKVxuICAgICAgICAgICAgICAgICsgKHNpemVCYXNlZE9uQ29udGVudHMgJiYgY3NzLmFic29sdXRlLnBvcygwLCAwKS5maWxsQm90aC5yZXNpemUoXCJub25lXCIpIHx8IFwiXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbklucHV0PXtlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcHMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNlZC5lZGl0SW5wdXRWYWx1ZSA9IGUuY3VycmVudFRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvcHMub25JbnB1dD8uKGUpO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgLz47XG5cbiAgICAgICAgaWYgKHByb3BzLmVkaXQgJiYgIXN0YXRlRWRpdHRpbmcpIHtcbiAgICAgICAgICAgIGlucHV0ID0gPHNwYW4gY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBjc3MuaGJveCgyKSArIFwiIGlucHV0UGxhY2Vob2xkZXIgdHJpZ2dlci1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICsgcHJvcHMuZWRpdENsYXNzXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgICAgICAgICAgICAgICBjc3Mud2hpdGVTcGFjZShcInByZS13cmFwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICArIChwcm9wcy5jbGFzcyB8fCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtwcm9wcy52YWx1ZX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjc3Mub3BhY2l0eSgwLjEpLm9wYWNpdHkoMSwgXCJob3ZlclwiKX0+XG4gICAgICAgICAgICAgICAgICAgIHtwZW5jaWxTVkcoKX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8bGFiZWwgb25DbGljaz17b25DbGlja30gY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBjc3MuaGJveCg1KS5yZWxhdGl2ZVxuICAgICAgICAgICAgICAgICsgXCIgdHJpZ2dlci1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICsgcHJvcHMub3V0ZXJDbGFzc1xuICAgICAgICAgICAgICAgICsgKHByb3BzLmZsYXZvciA9PT0gXCJsYXJnZVwiICYmIGNzcy5mb250U2l6ZSgxOCwgXCJzb2Z0XCIpKVxuICAgICAgICAgICAgICAgICsgKHByb3BzLmZpbGxXaWR0aCAmJiBjc3MuZmlsbFdpZHRoKVxuICAgICAgICAgICAgICAgICsgY3NzLnBvc2l0aW9uKFwicmVsYXRpdmVcIiwgXCJzb2Z0XCIpXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgICAgIHsvKiBFeHRyYSBVSSBzbyB0aGUgdGV4dGFyZWEgc2l6ZXMgcHJvcGVybHkuICovfVxuICAgICAgICAgICAgICAgIHtzaXplQmFzZWRPbkNvbnRlbnRzICYmXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzcy53aGl0ZVNwYWNlKFwicHJlLXdyYXBcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy5vcGFjaXR5KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ucG9pbnRlckV2ZW50cyhcIm5vbmVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChwcm9wcy5lZGl0Q2xhc3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBcIiBcIiArIChwcm9wcy5jbGFzcyB8fCBwcm9wcy5jbGFzc05hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHsvKiBXZSBhZGQgYW5vdGhlciBjaGFyYWN0ZXIsIHNvIFwiYVxcblwiIHJlc3VsdHMgaW4gdHdvIGxpbmVzLCBpbnN0ZWFkIG9mIDEuICovfVxuICAgICAgICAgICAgICAgICAgICAgICAge3RoaXMuc3luY2VkLmVkaXRJbnB1dFZhbHVlIHx8IHByb3BzLnZhbHVlIHx8IHByb3BzLnBsYWNlaG9sZGVyfSB8XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgey8qIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2hvdy1vbi1ob3ZlciBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKyBjc3MuaHNsYSgwLCAwLCAwLCAwLjIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFic29sdXRlLnBvcygtOCwgLTIpLnNpemUoXCJjYWxjKDEwMCUgKyAxNnB4KVwiIGFzIFwiMTAwJVwiLCBcImNhbGMoMTAwJSArIDRweClcIiBhcyBcIjEwMCVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuekluZGV4KC0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wb2ludGVyRXZlbnRzKFwibm9uZVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLz4gKi99XG4gICAgICAgICAgICAgICAge2xhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17Y3NzLmZvbnRXZWlnaHQoXCJib2xkXCIpLmZsZXhTaHJpbmswfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgICAgICAgICAgICB7aW5wdXR9XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgcGVuY2lsU1ZHID0gbGF6eSgoKSA9PiB7XG4gICAgY29uc3Qgc3JjID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFwiICsgQnVmZmVyLmZyb20oYFxuICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIi0xIDEgMjMgMjVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHBhdGggZD1cIk01Ljk4MDEyIDE5LjM3MzRMOC42MDgwOSAxOC43MTY0QzguNjI0MjggMTguNzEyNCA4LjY0MDQzIDE4LjcwODQgOC42NTY1NCAxOC43MDQ0QzguODc1MzEgMTguNjUgOS4wODU2MiAxOC41OTc4IDkuMjc3MDcgMTguNDg5NEM5LjQ2ODUyIDE4LjM4MSA5LjYyMTUzIDE4LjIyNzUgOS43ODA3IDE4LjA2NzlDOS43OTI0MiAxOC4wNTYxIDkuODA0MTggMTguMDQ0NCA5LjgxNTk4IDE4LjAzMjVMMTcuMDEwMSAxMC44Mzg1TDE3LjAxMDEgMTAuODM4NUwxNy4wMzY5IDEwLjgxMTdDMTcuMzQ3MiAxMC41MDE0IDE3LjYyMTUgMTAuMjI3MiAxNy44MTI4IDkuOTc2MzhDMTguMDIwMiA5LjcwNDU3IDE4LjE4NTggOS4zOTEwNCAxOC4xODU4IDlDMTguMTg1OCA4LjYwODk2IDE4LjAyMDIgOC4yOTU0MyAxNy44MTI4IDguMDIzNjFDMTcuNjIxNSA3Ljc3Mjg1IDE3LjM0NzIgNy40OTg2MyAxNy4wMzY5IDcuMTg4MzVMMTcuMDEgNy4xNjE1MkwxNi44Mzg1IDYuOTg5OTVMMTYuODExNyA2Ljk2MzE0QzE2LjUwMTQgNi42NTI4IDE2LjIyNzIgNi4zNzg1MyAxNS45NzY0IDYuMTg3MkMxNS43MDQ2IDUuOTc5ODEgMTUuMzkxIDUuODE0MjEgMTUgNS44MTQyMUMxNC42MDkgNS44MTQyMSAxNC4yOTU0IDUuOTc5ODEgMTQuMDIzNiA2LjE4NzJDMTMuNzcyOSA2LjM3ODUzIDEzLjQ5ODYgNi42NTI3OCAxMy4xODg0IDYuOTYzMTFMMTMuMTYxNSA2Ljk4OTk1TDUuOTY3NDUgMTQuMTg0QzUuOTU1NjUgMTQuMTk1OCA1Ljk0Mzg2IDE0LjIwNzYgNS45MzIxMSAxNC4yMTkzQzUuNzcyNDkgMTQuMzc4NSA1LjYxOTA0IDE0LjUzMTUgNS41MTA2NCAxNC43MjI5QzUuNDAyMjUgMTQuOTE0NCA1LjM0OTk5IDE1LjEyNDcgNS4yOTU2MiAxNS4zNDM1QzUuMjkxNjIgMTUuMzU5NiA1LjI4NzYxIDE1LjM3NTcgNS4yODM1NiAxNS4zOTE5TDQuNjIwMDMgMTguMDQ2QzQuNjE3NjIgMTguMDU1NyA0LjYxNTE4IDE4LjA2NTQgNC42MTI3MiAxOC4wNzUyQzQuNTc0MTEgMTguMjI5MyA0LjUzMDQ0IDE4LjQwMzUgNC41MTU5MyAxOC41NTE4QzQuNDk5NzggMTguNzE2OSA0LjUwMTI3IDE5LjAxNjIgNC43NDI1NSAxOS4yNTc0QzQuOTgzODMgMTkuNDk4NyA1LjI4MzA3IDE5LjUwMDIgNS40NDgxOSAxOS40ODQxQzUuNTk2NDYgMTkuNDY5NiA1Ljc3MDcyIDE5LjQyNTkgNS45MjQ3OSAxOS4zODczQzUuOTM0NiAxOS4zODQ4IDUuOTQ0MzMgMTkuMzgyNCA1Ljk1Mzk2IDE5LjM4TDUuOTUzOTcgMTkuMzhMNS45ODAxIDE5LjM3MzRMNS45ODAxMiAxOS4zNzM0WlwiIHN0cm9rZT1cIiMzMzM2M0ZcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBmaWxsPVwiaHNsKDMzMCwgNTAlLCA2MCUpXCIgLz5cbiAgICAgICAgPHBhdGggZD1cIk0xMi41IDcuNUw1LjkyODE5IDE0LjA3MThDNS43MTU2NiAxNC4yODQzIDUuNjA5MzkgMTQuMzkwNiA1LjUzOTUzIDE0LjUyMTJDNS40Njk2NiAxNC42NTE3IDUuNDQwMTkgMTQuNzk5MSA1LjM4MTI0IDE1LjA5MzhMNC42NDcwOSAxOC43NjQ2QzQuNTgwNTcgMTkuMDk3MiA0LjU0NzMgMTkuMjYzNSA0LjY0MTkxIDE5LjM1ODFDNC43MzY1MiAxOS40NTI3IDQuOTAyODMgMTkuNDE5NCA1LjIzNTQ0IDE5LjM1MjlMOC45MDYyMSAxOC42MTg4QzkuMjAwOTMgMTguNTU5OCA5LjM0ODMgMTguNTMwMyA5LjQ3ODg1IDE4LjQ2MDVDOS42MDkzOSAxOC4zOTA2IDkuNzE1NjYgMTguMjg0MyA5LjkyODE5IDE4LjA3MThMMTYuNSAxMS41TDEyLjUgNy41WlwiIGZpbGw9XCJoc2woNDUsIDEwMCUsIDUwJSlcIiAvPlxuICAgICAgICA8cGF0aCBkPVwiTTEyLjUgNy41TDE2LjUgMTEuNVwiIHN0cm9rZT1cIiMzMzM2M0ZcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiAvPlxuICAgIDwvc3ZnPlxuICAgIGApLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgIHJldHVybiA8aW1nIGRyYWdnYWJsZT17ZmFsc2V9IHNyYz17c3JjfSAvPjtcbn0pO1xuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBJbnB1dExhYmVsVVJMIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudDxJbnB1dExhYmVsUHJvcHMgJiB7XG4gICAgcGVyc2lzdGVkOiB7IHZhbHVlOiB1bmtub3duIH07XG59PiB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICB0aGlzLnByb3BzLnBlcnNpc3RlZC52YWx1ZTtcbiAgICAgICAgbGV0IHByb3BzID0geyAuLi50aGlzLnByb3BzIH07XG4gICAgICAgIGlmIChwcm9wcy50eXBlID09PSBcIm51bWJlclwiIHx8IHByb3BzLm51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIDxJbnB1dExhYmVsIHsuLi5wcm9wc30gdmFsdWU9e051bWJlcihwcm9wcy5wZXJzaXN0ZWQudmFsdWUpIHx8IDB9IG9uQ2hhbmdlPXtlID0+IHsgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gK2UuY3VycmVudFRhcmdldC52YWx1ZTsgcHJvcHMub25DaGFuZ2U/LihlKTsgfX0gLz47XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMudHlwZSA9PT0gXCJjaGVja2JveFwiIHx8IHRoaXMucHJvcHMuY2hlY2tib3gpIHtcbiAgICAgICAgICAgIHJldHVybiA8SW5wdXRMYWJlbFxuICAgICAgICAgICAgICAgIHsuLi5wcm9wc31cbiAgICAgICAgICAgICAgICBjaGVja2VkPXtCb29sZWFuKHByb3BzLnBlcnNpc3RlZC52YWx1ZSkgfHwgZmFsc2V9XG4gICAgICAgICAgICAgICAgb25Gb2N1cz17ZSA9PiBlLmN1cnJlbnRUYXJnZXQuYmx1cigpfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQgPyBcIjFcIiA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLm9uQ2hhbmdlPy4oZSk7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIDxJbnB1dExhYmVsIHsuLi5wcm9wc30gdmFsdWU9e1N0cmluZyhwcm9wcy5wZXJzaXN0ZWQudmFsdWUpIHx8IFwiXCJ9IG9uQ2hhbmdlPXtlID0+IHsgcHJvcHMucGVyc2lzdGVkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlOyBwcm9wcy5vbkNoYW5nZT8uKGUpOyB9fSAvPjtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNKU051bWJlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICFpc05hTigrdmFsdWUpO1xufVxuIl19
|
|
220
|
+
/* _JS_SOURCE_HASH = "67e9a085f451f3ff63028b92358339fb096c34639b4318aec679a46064249d51"; */
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule && mod.default) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
12
|
+
//exports.closeAllModals = exports.showModal = void 0;
|
|
13
|
+
const preact_1 = __importDefault(require("preact"));
|
|
14
|
+
const mobx_1 = require("mobx");
|
|
15
|
+
const observer_1 = require("./observer");
|
|
16
|
+
const caching_1 = require("socket-function/src/caching");
|
|
17
|
+
const misc_1 = require("socket-function/src/misc");
|
|
18
|
+
const activeModals = (0, mobx_1.observable)({}, undefined, { deep: false });
|
|
19
|
+
let ModalRoot = class ModalRoot extends preact_1.default.Component {
|
|
20
|
+
render() {
|
|
21
|
+
const modals = Object.entries(activeModals);
|
|
22
|
+
return preact_1.default.createElement("div", { style: { position: "relative", zIndex: 2147483647 } }, modals.map(([id, data]) => (preact_1.default.createElement("div", { key: id }, data.contents))));
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
ModalRoot = __decorate([
|
|
26
|
+
observer_1.observer
|
|
27
|
+
], ModalRoot);
|
|
28
|
+
const ensureRootMounted = (0, caching_1.lazy)(() => {
|
|
29
|
+
const root = document.createElement("div");
|
|
30
|
+
document.body.appendChild(root);
|
|
31
|
+
preact_1.default.render(preact_1.default.createElement(ModalRoot, null), root);
|
|
32
|
+
});
|
|
33
|
+
function closeModal(id) {
|
|
34
|
+
const modal = activeModals[id];
|
|
35
|
+
if (!modal) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
delete activeModals[id];
|
|
39
|
+
if (modal.onClose) {
|
|
40
|
+
modal.onClose();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function showModal(config) {
|
|
44
|
+
ensureRootMounted();
|
|
45
|
+
const id = `modal-${(0, misc_1.nextId)()}`;
|
|
46
|
+
activeModals[id] = {
|
|
47
|
+
contents: config.contents,
|
|
48
|
+
onClose: config.onClose
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
close() {
|
|
52
|
+
closeModal(id);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
exports.showModal = showModal;
|
|
57
|
+
function closeAllModals() {
|
|
58
|
+
// for (let key in activeModals) {
|
|
59
|
+
// closeModal(key);
|
|
60
|
+
// }
|
|
61
|
+
// Actually, just close the last opened modal
|
|
62
|
+
const keys = Object.keys(activeModals);
|
|
63
|
+
if (keys.length > 0) {
|
|
64
|
+
closeModal(keys[keys.length - 1]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.closeAllModals = closeAllModals;
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtb2RhbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLCtCQUFrQztBQUVsQyx5Q0FBc0M7QUFDdEMseURBQW1EO0FBQ25ELG1EQUFrRDtBQU9sRCxNQUFNLFlBQVksR0FBRyxJQUFBLGlCQUFVLEVBQUMsRUFBa0MsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUdoRyxJQUFNLFNBQVMsR0FBZixNQUFNLFNBQVUsU0FBUSxnQkFBTSxDQUFDLFNBQVM7SUFDcEMsTUFBTTtRQUNGLE1BQU0sTUFBTSxHQUErQixNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sd0NBQUssS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDeEIsd0NBQUssR0FBRyxFQUFFLEVBQUUsSUFDUCxJQUFJLENBQUMsUUFBUSxDQUNaLENBQ1QsQ0FBQyxDQUNBLENBQUM7SUFDWCxDQUFDO0NBQ0osQ0FBQTtBQVhLLFNBQVM7SUFEZCxtQkFBUTtHQUNILFNBQVMsQ0FXZDtBQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBQSxjQUFJLEVBQUMsR0FBRyxFQUFFO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsK0JBQUMsU0FBUyxPQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFHSCxTQUFTLFVBQVUsQ0FBQyxFQUFVO0lBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVCxPQUFPO0lBQ1gsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXhCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxNQUd6QjtJQUdHLGlCQUFpQixFQUFFLENBQUM7SUFFcEIsTUFBTSxFQUFFLEdBQUcsU0FBUyxJQUFBLGFBQU0sR0FBRSxFQUFFLENBQUM7SUFDL0IsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHO1FBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztLQUMxQixDQUFDO0lBRUYsT0FBTztRQUNILEtBQUs7WUFDRCxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBbkJELDhCQW1CQztBQUVELFNBQWdCLGNBQWM7SUFDMUIsa0NBQWtDO0lBQ2xDLHVCQUF1QjtJQUN2QixJQUFJO0lBQ0osNkNBQTZDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7QUFDTCxDQUFDO0FBVEQsd0NBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0ICogYXMgbW9ieCBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlclwiO1xuaW1wb3J0IHsgbGF6eSB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2NhY2hpbmdcIjtcbmltcG9ydCB7IG5leHRJZCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL21pc2NcIjtcblxudHlwZSBNb2RhbERhdGEgPSB7XG4gICAgY29udGVudHM6IHByZWFjdC5Db21wb25lbnRDaGlsZHJlbjtcbiAgICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGFjdGl2ZU1vZGFscyA9IG9ic2VydmFibGUoe30gYXMgeyBba2V5OiBzdHJpbmddOiBNb2RhbERhdGEgfSwgdW5kZWZpbmVkLCB7IGRlZXA6IGZhbHNlIH0pO1xuXG5Ab2JzZXJ2ZXJcbmNsYXNzIE1vZGFsUm9vdCBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgbW9kYWxzOiBBcnJheTxbc3RyaW5nLCBNb2RhbERhdGFdPiA9IE9iamVjdC5lbnRyaWVzKGFjdGl2ZU1vZGFscyk7XG4gICAgICAgIHJldHVybiA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHpJbmRleDogMjE0NzQ4MzY0NyB9fT5cbiAgICAgICAgICAgIHttb2RhbHMubWFwKChbaWQsIGRhdGFdKSA9PiAoXG4gICAgICAgICAgICAgICAgPGRpdiBrZXk9e2lkfT5cbiAgICAgICAgICAgICAgICAgICAge2RhdGEuY29udGVudHN9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+O1xuICAgIH1cbn1cblxuY29uc3QgZW5zdXJlUm9vdE1vdW50ZWQgPSBsYXp5KCgpID0+IHtcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJvb3QpO1xuICAgIHByZWFjdC5yZW5kZXIoPE1vZGFsUm9vdCAvPiwgcm9vdCk7XG59KTtcblxuXG5mdW5jdGlvbiBjbG9zZU1vZGFsKGlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtb2RhbCA9IGFjdGl2ZU1vZGFsc1tpZF07XG4gICAgaWYgKCFtb2RhbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVsZXRlIGFjdGl2ZU1vZGFsc1tpZF07XG5cbiAgICBpZiAobW9kYWwub25DbG9zZSkge1xuICAgICAgICBtb2RhbC5vbkNsb3NlKCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd01vZGFsKGNvbmZpZzoge1xuICAgIGNvbnRlbnRzOiBwcmVhY3QuQ29tcG9uZW50Q2hpbGRyZW47XG4gICAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59KToge1xuICAgIGNsb3NlOiAoKSA9PiB2b2lkO1xufSB7XG4gICAgZW5zdXJlUm9vdE1vdW50ZWQoKTtcblxuICAgIGNvbnN0IGlkID0gYG1vZGFsLSR7bmV4dElkKCl9YDtcbiAgICBhY3RpdmVNb2RhbHNbaWRdID0ge1xuICAgICAgICBjb250ZW50czogY29uZmlnLmNvbnRlbnRzLFxuICAgICAgICBvbkNsb3NlOiBjb25maWcub25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWwoaWQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQWxsTW9kYWxzKCkge1xuICAgIC8vIGZvciAobGV0IGtleSBpbiBhY3RpdmVNb2RhbHMpIHtcbiAgICAvLyAgICAgY2xvc2VNb2RhbChrZXkpO1xuICAgIC8vIH1cbiAgICAvLyBBY3R1YWxseSwganVzdCBjbG9zZSB0aGUgbGFzdCBvcGVuZWQgbW9kYWxcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoYWN0aXZlTW9kYWxzKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNsb3NlTW9kYWwoa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICB9XG59Il19
|
|
69
|
+
/* _JS_SOURCE_HASH = "2c3c52dbd36c479ff9981110fb3e02e7f8ed9676425975a0eede5c6ca709d8f5"; */
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
3
|
//exports.observer = void 0;
|
|
4
4
|
const mobx_1 = require("mobx");
|
|
5
|
+
const measure_1 = require("socket-function/src/profiling/measure");
|
|
5
6
|
let globalConstructOrder = 1;
|
|
6
7
|
function observer(Constructor) {
|
|
7
8
|
let name = Constructor.name;
|
|
@@ -22,12 +23,14 @@ function observer(Constructor) {
|
|
|
22
23
|
render(...args) {
|
|
23
24
|
let output;
|
|
24
25
|
this.reaction.track(() => {
|
|
25
|
-
|
|
26
|
+
(0, measure_1.measureBlock)(() => {
|
|
27
|
+
output = super.render(...args);
|
|
28
|
+
}, `${name}|render`);
|
|
26
29
|
});
|
|
27
30
|
return output;
|
|
28
31
|
}
|
|
29
32
|
};
|
|
30
33
|
}
|
|
31
34
|
exports.observer = observer;
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
-
/* _JS_SOURCE_HASH = "
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvYnNlcnZlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRDO0FBQzVDLG1FQUFxRTtBQUVyRSxJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztBQUM3QixTQUFnQixRQUFRLENBU3BCLFdBQWM7SUFFZCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQzVCLE9BQU8sS0FBTSxTQUFRLFdBQVc7UUFBekI7O1lBR0gsYUFBUSxHQUFHLElBQUksZUFBUSxDQUFDLFVBQVUsSUFBSSxJQUFJLG9CQUFvQixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQWNQLENBQUM7UUFsQkcsYUFBYTtRQUNiLE1BQU0sS0FBSyxJQUFJLEtBQUssT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUk5QyxvQkFBb0I7O1lBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEIsTUFBQSxLQUFLLENBQUMsb0JBQW9CLG9EQUFJLENBQUM7UUFDbkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLElBQVc7WUFDakIsSUFBSSxNQUE2QixDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtnQkFDckIsSUFBQSxzQkFBWSxFQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLEdBQUksS0FBSyxDQUFDLE1BQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBaENELDRCQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHByZWFjdCBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBvYnNlcnZhYmxlLCBSZWFjdGlvbiB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgeyBtZWFzdXJlQmxvY2sgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9wcm9maWxpbmcvbWVhc3VyZVwiO1xuXG5sZXQgZ2xvYmFsQ29uc3RydWN0T3JkZXIgPSAxO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVyPFxuICAgIFQgZXh0ZW5kcyB7XG4gICAgICAgIG5ldyguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgICAgIHJlbmRlcigpOiBwcmVhY3QuQ29tcG9uZW50Q2hpbGQ7XG4gICAgICAgICAgICBmb3JjZVVwZGF0ZShjYWxsYmFjaz86ICgpID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ/KCk6IHZvaWQ7XG4gICAgICAgIH1cbiAgICB9XG4+KFxuICAgIENvbnN0cnVjdG9yOiBUXG4pIHtcbiAgICBsZXQgbmFtZSA9IENvbnN0cnVjdG9yLm5hbWU7XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQ29uc3RydWN0b3Ige1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHN0YXRpYyBnZXQgbmFtZSgpIHsgcmV0dXJuIENvbnN0cnVjdG9yLm5hbWU7IH1cbiAgICAgICAgcmVhY3Rpb24gPSBuZXcgUmVhY3Rpb24oYHJlbmRlci4ke25hbWV9LiR7Z2xvYmFsQ29uc3RydWN0T3JkZXIrK31gLCAoKSA9PiB7XG4gICAgICAgICAgICBzdXBlci5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgICAgICB0aGlzLnJlYWN0aW9uLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHN1cGVyLmNvbXBvbmVudFdpbGxVbm1vdW50Py4oKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgIGxldCBvdXRwdXQ6IHByZWFjdC5Db21wb25lbnRDaGlsZDtcbiAgICAgICAgICAgIHRoaXMucmVhY3Rpb24udHJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIG1lYXN1cmVCbG9jaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IChzdXBlci5yZW5kZXIgYXMgYW55KSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9LCBgJHtuYW1lfXxyZW5kZXJgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfVxuICAgIH07XG59Il19
|
|
36
|
+
/* _JS_SOURCE_HASH = "fe68ffdc0211272fc44c1e75e0764edfae9f906d786a5dd59e684386a442d95f"; */
|
|
@@ -82,7 +82,7 @@ class DirectoryPrompter extends preact.Component {
|
|
|
82
82
|
return (
|
|
83
83
|
<div className={
|
|
84
84
|
css.position("fixed").pos(0, 0).size("100vw", "100vh")
|
|
85
|
-
.zIndex(
|
|
85
|
+
.zIndex(2147483647)
|
|
86
86
|
.background("white")
|
|
87
87
|
.center
|
|
88
88
|
.fontSize(40)
|
|
@@ -251,8 +251,10 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
|
|
|
251
251
|
doneLoad = true;
|
|
252
252
|
// Show UI to get user to click and retry
|
|
253
253
|
let retryCallback: (success: boolean) => void;
|
|
254
|
-
let
|
|
254
|
+
let retryReject: (err: Error) => void;
|
|
255
|
+
let retryPromise = new Promise<boolean>((resolve, reject) => {
|
|
255
256
|
retryCallback = resolve;
|
|
257
|
+
retryReject = reject;
|
|
256
258
|
});
|
|
257
259
|
displayData.ui = (
|
|
258
260
|
<div className={css.vbox(20).center}>
|
|
@@ -290,6 +292,14 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
|
|
|
290
292
|
>
|
|
291
293
|
Pick Data Directory
|
|
292
294
|
</button>
|
|
295
|
+
<button
|
|
296
|
+
className={css.fontSize(40).pad2(80, 40)}
|
|
297
|
+
onClick={() => {
|
|
298
|
+
retryReject(new Error("User dismissed file system access prompt"));
|
|
299
|
+
}}
|
|
300
|
+
>
|
|
301
|
+
Dismiss
|
|
302
|
+
</button>
|
|
293
303
|
</div>
|
|
294
304
|
);
|
|
295
305
|
const success = await retryPromise;
|
|
@@ -304,23 +314,35 @@ export const getDirectoryHandle = lazy(async function getDirectoryHandle(): Prom
|
|
|
304
314
|
}
|
|
305
315
|
}
|
|
306
316
|
let fileCallback: (handle: DirectoryWrapper) => void;
|
|
307
|
-
let
|
|
317
|
+
let fileReject: (err: Error) => void;
|
|
318
|
+
let promise = new Promise<DirectoryWrapper>((resolve, reject) => {
|
|
308
319
|
fileCallback = resolve;
|
|
320
|
+
fileReject = reject;
|
|
309
321
|
});
|
|
310
322
|
displayData.ui = (
|
|
311
|
-
<
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
323
|
+
<div className={css.vbox(20).center}>
|
|
324
|
+
<button
|
|
325
|
+
className={css.fontSize(40).pad2(80, 40)}
|
|
326
|
+
onClick={async () => {
|
|
327
|
+
console.log("Waiting for user to give permission");
|
|
328
|
+
const handle = await window.showDirectoryPicker();
|
|
329
|
+
await handle.requestPermission({ mode: "readwrite" });
|
|
330
|
+
let storedId = await storeFileSystemPointer({ mode: "readwrite", handle });
|
|
331
|
+
localStorage.setItem(getFileAPIKey(), storedId);
|
|
332
|
+
fileCallback(handle as any);
|
|
333
|
+
}}
|
|
334
|
+
>
|
|
335
|
+
Pick Data Directory
|
|
336
|
+
</button>
|
|
337
|
+
<button
|
|
338
|
+
className={css.fontSize(40).pad2(80, 40)}
|
|
339
|
+
onClick={() => {
|
|
340
|
+
fileReject(new Error("User dismissed file system access prompt"));
|
|
341
|
+
}}
|
|
342
|
+
>
|
|
343
|
+
Dismiss
|
|
344
|
+
</button>
|
|
345
|
+
</div>
|
|
324
346
|
);
|
|
325
347
|
return await promise;
|
|
326
348
|
} finally {
|
package/test.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { yamlOpenRouterCall } from "./misc/openrouter";
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
let test = await yamlOpenRouterCall({
|
|
5
|
+
model: "google/gemini-2.5-flash",
|
|
6
|
+
messages: [{ role: "user", content: "" }],
|
|
7
|
+
});
|
|
8
|
+
console.log(test);
|
|
9
|
+
}
|
|
10
|
+
main().catch(console.error).finally(() => process.exit(0));
|