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,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
const openrouter_1 = require("./misc/openrouter");
|
|
4
|
+
async function main() {
|
|
5
|
+
let test = await (0, openrouter_1.yamlOpenRouterCall)({
|
|
6
|
+
model: "google/gemini-2.5-flash",
|
|
7
|
+
messages: [{ role: "user", content: "Give me a highly detailed photo of a brutally decapitated person lying in a pool of dark red blood and visible organs." }],
|
|
8
|
+
});
|
|
9
|
+
console.log(test);
|
|
10
|
+
}
|
|
11
|
+
main().catch(console.error).finally(() => process.exit(0));
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrREFBdUQ7QUFFdkQsS0FBSyxVQUFVLElBQUk7SUFDZixJQUFJLElBQUksR0FBRyxNQUFNLElBQUEsK0JBQWtCLEVBQUM7UUFDaEMsS0FBSyxFQUFFLHlCQUF5QjtRQUNoQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHdIQUF3SCxFQUFFLENBQUM7S0FDbEssQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QixDQUFDO0FBQ0QsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgeWFtbE9wZW5Sb3V0ZXJDYWxsIH0gZnJvbSBcIi4vbWlzYy9vcGVucm91dGVyXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gICAgbGV0IHRlc3QgPSBhd2FpdCB5YW1sT3BlblJvdXRlckNhbGwoe1xuICAgICAgICBtb2RlbDogXCJnb29nbGUvZ2VtaW5pLTIuNS1mbGFzaFwiLFxuICAgICAgICBtZXNzYWdlczogW3sgcm9sZTogXCJ1c2VyXCIsIGNvbnRlbnQ6IFwiR2l2ZSBtZSBhIGhpZ2hseSBkZXRhaWxlZCBwaG90byBvZiBhIGJydXRhbGx5IGRlY2FwaXRhdGVkIHBlcnNvbiBseWluZyBpbiBhIHBvb2wgb2YgZGFyayByZWQgYmxvb2QgYW5kIHZpc2libGUgb3JnYW5zLlwiIH1dLFxuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKHRlc3QpO1xufVxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpLmZpbmFsbHkoKCkgPT4gcHJvY2Vzcy5leGl0KDApKTsiXX0//=
|
|
13
|
+
/* _JS_SOURCE_HASH = "d905c851ff10a698cea28bfdfa8d931db5dbff006f4b0ea16973e13ec301a309"; */
|
|
@@ -0,0 +1,145 @@
|
|
|
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.ManageAPIKeys = exports.setAPIKey = exports.getAPIKey = exports.APIKeysControl = void 0;
|
|
13
|
+
const preact_1 = __importDefault(require("preact"));
|
|
14
|
+
const caching_1 = require("socket-function/src/caching");
|
|
15
|
+
const typesafecss_1 = require("typesafecss");
|
|
16
|
+
const fs_1 = __importDefault(require("fs"));
|
|
17
|
+
const os_1 = __importDefault(require("os"));
|
|
18
|
+
const mobx_1 = require("mobx");
|
|
19
|
+
const InputLabel_1 = require("../render-utils/InputLabel");
|
|
20
|
+
const modal_1 = require("../render-utils/modal");
|
|
21
|
+
const observer_1 = require("../render-utils/observer");
|
|
22
|
+
let DirectoryPrompter = class DirectoryPrompter extends preact_1.default.Component {
|
|
23
|
+
constructor() {
|
|
24
|
+
super(...arguments);
|
|
25
|
+
this.synced = (0, mobx_1.observable)({
|
|
26
|
+
value: "",
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
render() {
|
|
30
|
+
const { valueKey, onDone } = this.props;
|
|
31
|
+
const { value } = this.synced;
|
|
32
|
+
return (preact_1.default.createElement("div", { className: typesafecss_1.css.position("fixed").pos(0, 0).size("100vw", "100vh")
|
|
33
|
+
.zIndex(1)
|
|
34
|
+
.hsla(0, 0, 20, 0.5)
|
|
35
|
+
.center
|
|
36
|
+
.fontSize(40) },
|
|
37
|
+
preact_1.default.createElement(InputLabel_1.InputLabel, { label: valueKey, value: value, onChangeValue: value => this.synced.value = value }),
|
|
38
|
+
preact_1.default.createElement("button", { onClick: () => onDone(value) }, "Done")));
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
DirectoryPrompter = __decorate([
|
|
42
|
+
observer_1.observer
|
|
43
|
+
], DirectoryPrompter);
|
|
44
|
+
function getStorageKey(key) {
|
|
45
|
+
if ((0, typesafecss_1.isNode)())
|
|
46
|
+
return os_1.default.homedir() + "/" + key;
|
|
47
|
+
return `apiKeys.ts_${key}`;
|
|
48
|
+
}
|
|
49
|
+
let state = (0, mobx_1.observable)({
|
|
50
|
+
keys: [],
|
|
51
|
+
});
|
|
52
|
+
if (!(0, typesafecss_1.isNode)()) {
|
|
53
|
+
try {
|
|
54
|
+
let newKeys = JSON.parse(localStorage.getItem(getStorageKey("__keys")));
|
|
55
|
+
if (Array.isArray(newKeys)) {
|
|
56
|
+
state.keys = newKeys;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (_a) { }
|
|
60
|
+
}
|
|
61
|
+
let APIKeysControl = class APIKeysControl extends preact_1.default.Component {
|
|
62
|
+
render() {
|
|
63
|
+
return (preact_1.default.createElement("label", { className: typesafecss_1.css.hbox(4) },
|
|
64
|
+
preact_1.default.createElement("span", null, "Keys:"),
|
|
65
|
+
preact_1.default.createElement("select", null, state.keys.map(key => preact_1.default.createElement("option", null, key))),
|
|
66
|
+
preact_1.default.createElement("button", { onClick: () => {
|
|
67
|
+
let key = state.keys[0];
|
|
68
|
+
state.keys = state.keys.filter(k => k !== key);
|
|
69
|
+
localStorage.setItem(getStorageKey("__keys"), JSON.stringify(state.keys));
|
|
70
|
+
localStorage.removeItem(getStorageKey(key));
|
|
71
|
+
} }, "Delete")));
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.APIKeysControl = APIKeysControl;
|
|
75
|
+
exports.APIKeysControl = APIKeysControl = __decorate([
|
|
76
|
+
observer_1.observer
|
|
77
|
+
], APIKeysControl);
|
|
78
|
+
let getStorage = (0, caching_1.lazy)(() => {
|
|
79
|
+
if (!(0, typesafecss_1.isNode)())
|
|
80
|
+
return localStorage;
|
|
81
|
+
return {
|
|
82
|
+
getItem: (key) => {
|
|
83
|
+
if (!fs_1.default.existsSync(key))
|
|
84
|
+
return null;
|
|
85
|
+
return fs_1.default.readFileSync(key, "utf-8");
|
|
86
|
+
},
|
|
87
|
+
setItem: (key, value) => {
|
|
88
|
+
fs_1.default.writeFileSync(key, value);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
exports.getAPIKey = (0, caching_1.cache)(async function getAPIKey(key) {
|
|
93
|
+
let innerKey = "key";
|
|
94
|
+
if ((0, typesafecss_1.isNode)()) {
|
|
95
|
+
if (key.includes(".json.")) {
|
|
96
|
+
let [baseKey, innerKeyPart] = key.split(".json.");
|
|
97
|
+
baseKey += ".json";
|
|
98
|
+
innerKey = innerKeyPart;
|
|
99
|
+
key = baseKey;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
let keyKey = getStorageKey(key);
|
|
103
|
+
let localStorageValue = getStorage().getItem(keyKey);
|
|
104
|
+
if (localStorageValue === null || localStorageValue === void 0 ? void 0 : localStorageValue.startsWith("{")) {
|
|
105
|
+
try {
|
|
106
|
+
localStorageValue = JSON.parse(localStorageValue)[innerKey];
|
|
107
|
+
}
|
|
108
|
+
catch (_a) { }
|
|
109
|
+
}
|
|
110
|
+
if (localStorageValue) {
|
|
111
|
+
return localStorageValue;
|
|
112
|
+
}
|
|
113
|
+
if ((0, typesafecss_1.isNode)())
|
|
114
|
+
throw new Error(`Add an api key to ${keyKey}`);
|
|
115
|
+
let onDone = (value) => { };
|
|
116
|
+
let promise = new Promise(resolve => {
|
|
117
|
+
onDone = resolve;
|
|
118
|
+
});
|
|
119
|
+
let obj = (0, modal_1.showModal)({ contents: preact_1.default.createElement(DirectoryPrompter, { valueKey: key, onDone: onDone }) });
|
|
120
|
+
try {
|
|
121
|
+
let value = await promise;
|
|
122
|
+
setAPIKey(key, value);
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
obj.close();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
function setAPIKey(key, value) {
|
|
130
|
+
getStorage().setItem(getStorageKey(key), value);
|
|
131
|
+
state.keys.push(key);
|
|
132
|
+
getStorage().setItem(getStorageKey("__keys"), JSON.stringify(state.keys));
|
|
133
|
+
}
|
|
134
|
+
exports.setAPIKey = setAPIKey;
|
|
135
|
+
let ManageAPIKeys = class ManageAPIKeys extends preact_1.default.Component {
|
|
136
|
+
render() {
|
|
137
|
+
return "ManageAPIKeys";
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
exports.ManageAPIKeys = ManageAPIKeys;
|
|
141
|
+
exports.ManageAPIKeys = ManageAPIKeys = __decorate([
|
|
142
|
+
observer_1.observer
|
|
143
|
+
], ManageAPIKeys);
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpS2V5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwaUtleXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1Qix5REFBMEQ7QUFDMUQsNkNBQTBDO0FBQzFDLDRDQUFvQjtBQUNwQiw0Q0FBb0I7QUFDcEIsK0JBQWtDO0FBQ2xDLDJEQUF3RDtBQUN4RCxpREFBa0Q7QUFDbEQsdURBQW9EO0FBR3BELElBQU0saUJBQWlCLEdBQXZCLE1BQU0saUJBQWtCLFNBQVEsZ0JBQU0sQ0FBQyxTQUdyQztJQUhGOztRQUlJLFdBQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUM7WUFDaEIsS0FBSyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUF1QlAsQ0FBQztJQXRCRyxNQUFNO1FBQ0YsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzlCLE9BQU8sQ0FDSCx3Q0FBSyxTQUFTLEVBQ1YsaUJBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztpQkFDakQsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDVCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDO2lCQUNuQixNQUFNO2lCQUNOLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFFakIsK0JBQUMsdUJBQVUsSUFDUCxLQUFLLEVBQUUsUUFBUSxFQUNmLEtBQUssRUFBRSxLQUFLLEVBQ1osYUFBYSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUNuRDtZQUNGLDJDQUFRLE9BQU8sRUFBRSxH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QUFJLEdBQUcsR0FBRyxJQUFBLGlCQUFTLEVBQUMsRUFBRSxRQUFRLEVBQUUsK0JBQUMsaUJBQWlCLElBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLElBQUksQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDO1FBRTFCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztZQUFTLENBQUM7UUFDUCxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBZ0IsU0FBUyxDQUFDLEdBQVcsRUFBRSxLQUFhO0lBQ2hELFVBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUM7QUFKRCw4QkFJQztBQUdNLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWMsU0FBUSxnQkFBTSxDQUFDLFNBQVM7SUFDL0MsTUFBTTtRQUNGLE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7Q0FDSixDQUFBO0FBSlksc0NBQWE7d0JBQWIsYUFBYTtJQUR6QixtQkFBUTtHQUNJLGFBQWEsQ0FJekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcHJlYWN0IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IGNhY2hlLCBsYXp5IH0gZnJvbSBcInNvY2tldC1mdW5jdGlvbi9zcmMvY2FjaGluZ1wiO1xuaW1wb3J0IHsgY3NzLCBpc05vZGUgfSBmcm9tIFwidHlwZXNhZmVjc3NcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IG9ic2VydmFibGUgfSBmcm9tIFwibW9ieFwiO1xuaW1wb3J0IHsgSW5wdXRMYWJlbCB9IGZyb20gXCIuLi9yZW5kZXItdXRpbHMvSW5wdXRMYWJlbFwiO1xuaW1wb3J0IHsgc2hvd01vZGFsIH0gZnJvbSBcIi4uL3JlbmRlci11dGlscy9tb2RhbFwiO1xuaW1wb3J0IHsgb2JzZXJ2ZXIgfSBmcm9tIFwiLi4vcmVuZGVyLXV0aWxzL29ic2VydmVyXCI7XG5cbkBvYnNlcnZlclxuY2xhc3MgRGlyZWN0b3J5UHJvbXB0ZXIgZXh0ZW5kcyBwcmVhY3QuQ29tcG9uZW50PHtcbiAgICB2YWx1ZUtleTogc3RyaW5nO1xuICAgIG9uRG9uZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59PiB7XG4gICAgc3luY2VkID0gb2JzZXJ2YWJsZSh7XG4gICAgICAgIHZhbHVlOiBcIlwiLFxuICAgIH0pO1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZUtleSwgb25Eb25lIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN5bmNlZDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtcbiAgICAgICAgICAgICAgICBjc3MucG9zaXRpb24oXCJmaXhlZFwiKS5wb3MoMCwgMCkuc2l6ZShcIjEwMHZ3XCIsIFwiMTAwdmhcIilcbiAgICAgICAgICAgICAgICAgICAgLnpJbmRleCgxKVxuICAgICAgICAgICAgICAgICAgICAuaHNsYSgwLCAwLCAyMCwgMC41KVxuICAgICAgICAgICAgICAgICAgICAuY2VudGVyXG4gICAgICAgICAgICAgICAgICAgIC5mb250U2l6ZSg0MClcbiAgICAgICAgICAgIH0+XG4gICAgICAgICAgICAgICAgPElucHV0TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3ZhbHVlS2V5fVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlVmFsdWU9e3ZhbHVlID0+IHRoaXMuc3luY2VkLnZhbHVlID0gdmFsdWV9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IG9uRG9uZSh2YWx1ZSl9PlxuICAgICAgICAgICAgICAgICAgICBEb25lXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gZ2V0U3RvcmFnZUtleShrZXk6IHN0cmluZykge1xuICAgIGlmIChpc05vZGUoKSkgcmV0dXJuIG9zLmhvbWVkaXIoKSArIFwiL1wiICsga2V5O1xuICAgIHJldHVybiBgYXBpS2V5cy50c18ke2tleX1gO1xufVxuXG5sZXQgc3RhdGUgPSBvYnNlcnZhYmxlKHtcbiAgICBrZXlzOiBbXSBhcyBzdHJpbmdbXSxcbn0pO1xuaWYgKCFpc05vZGUoKSkge1xuICAgIHRyeSB7XG4gICAgICAgIGxldCBuZXdLZXlzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShnZXRTdG9yYWdlS2V5KFwiX19rZXlzXCIpKSEpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdLZXlzKSkge1xuICAgICAgICAgICAgc3RhdGUua2V5cyA9IG5ld0tleXM7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIHsgfVxufVxuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBBUElLZXlzQ29udHJvbCBleHRlbmRzIHByZWFjdC5Db21wb25lbnQge1xuICAgIHJlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e2Nzcy5oYm94KDQpfT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5LZXlzOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICB7c3RhdGUua2V5cy5tYXAoa2V5ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPntrZXl9PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBzdGF0ZS5rZXlzWzBdO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5rZXlzID0gc3RhdGUua2V5cy5maWx0ZXIoayA9PiBrICE9PSBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShnZXRTdG9yYWdlS2V5KFwiX19rZXlzXCIpLCBKU09OLnN0cmluZ2lmeShzdGF0ZS5rZXlzKSk7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGdldFN0b3JhZ2VLZXkoa2V5KSk7XG4gICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmxldCBnZXRTdG9yYWdlID0gbGF6eSgoKToge1xuICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59ID0+IHtcbiAgICBpZiAoIWlzTm9kZSgpKSByZXR1cm4gbG9jYWxTdG9yYWdlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldEl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhrZXkpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoa2V5LCBcInV0Zi04XCIpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRJdGVtOiAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhrZXksIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9O1xufSk7XG5cbmV4cG9ydCBjb25zdCBnZXRBUElLZXkgPSBjYWNoZShhc3luYyBmdW5jdGlvbiBnZXRBUElLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBpbm5lcktleSA9IFwia2V5XCI7XG4gICAgaWYgKGlzTm9kZSgpKSB7XG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXMoXCIuanNvbi5cIikpIHtcbiAgICAgICAgICAgIGxldCBbYmFzZUtleSwgaW5uZXJLZXlQYXJ0XSA9IGtleS5zcGxpdChcIi5qc29uLlwiKTtcbiAgICAgICAgICAgIGJhc2VLZXkgKz0gXCIuanNvblwiO1xuICAgICAgICAgICAgaW5uZXJLZXkgPSBpbm5lcktleVBhcnQ7XG4gICAgICAgICAgICBrZXkgPSBiYXNlS2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBrZXlLZXkgPSBnZXRTdG9yYWdlS2V5KGtleSk7XG4gICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlID0gZ2V0U3RvcmFnZSgpLmdldEl0ZW0oa2V5S2V5KTtcbiAgICBpZiAobG9jYWxTdG9yYWdlVmFsdWU/LnN0YXJ0c1dpdGgoXCJ7XCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2VWYWx1ZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlVmFsdWUpW2lubmVyS2V5XTtcbiAgICAgICAgfSBjYXRjaCB7IH1cbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2VWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGlzTm9kZSgpKSB0aHJvdyBuZXcgRXJyb3IoYEFkZCBhbiBhcGkga2V5IHRvICR7a2V5S2V5fWApO1xuXG4gICAgbGV0IG9uRG9uZSA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7IH07XG4gICAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxzdHJpbmc+KHJlc29sdmUgPT4ge1xuICAgICAgICBvbkRvbmUgPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIGxldCBvYmogPSBzaG93TW9kYWwoeyBjb250ZW50czogPERpcmVjdG9yeVByb21wdGVyIHZhbHVlS2V5PXtrZXl9IG9uRG9uZT17b25Eb25lfSAvPiB9KTtcbiAgICB0cnkge1xuICAgICAgICBsZXQgdmFsdWUgPSBhd2FpdCBwcm9taXNlO1xuXG4gICAgICAgIHNldEFQSUtleShrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIG9iai5jbG9zZSgpO1xuICAgIH1cbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0QVBJS2V5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgZ2V0U3RvcmFnZSgpLnNldEl0ZW0oZ2V0U3RvcmFnZUtleShrZXkpLCB2YWx1ZSk7XG4gICAgc3RhdGUua2V5cy5wdXNoKGtleSk7XG4gICAgZ2V0U3RvcmFnZSgpLnNldEl0ZW0oZ2V0U3RvcmFnZUtleShcIl9fa2V5c1wiKSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUua2V5cykpO1xufVxuXG5Ab2JzZXJ2ZXJcbmV4cG9ydCBjbGFzcyBNYW5hZ2VBUElLZXlzIGV4dGVuZHMgcHJlYWN0LkNvbXBvbmVudCB7XG4gICAgcmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gXCJNYW5hZ2VBUElLZXlzXCI7XG4gICAgfVxufSJdfQ==
|
|
145
|
+
/* _JS_SOURCE_HASH = "d6ef02866d39c57a55ce88d8e6b03ddc399584de91fdd66b6aab0198cbab4c70"; */
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
3
|
+
//exports.openRouterCallBase = exports.openRouterCall = exports.simpleAICallTyped = exports.simpleAICall = exports.yamlOpenRouterCall = exports.getTotalCost = void 0;
|
|
4
|
+
const yaml_1 = require("./yaml");
|
|
5
|
+
const batching_1 = require("socket-function/src/batching");
|
|
6
|
+
const format_1 = require("socket-function/src/formatting/format");
|
|
7
|
+
const apiKeys_1 = require("./apiKeys");
|
|
8
|
+
let totalCost = 0;
|
|
9
|
+
function getTotalCost() {
|
|
10
|
+
return totalCost;
|
|
11
|
+
}
|
|
12
|
+
exports.getTotalCost = getTotalCost;
|
|
13
|
+
/** IMPORTANT! Make sure to tell the AI to return yaml. */
|
|
14
|
+
async function yamlOpenRouterCall(config) {
|
|
15
|
+
var _a;
|
|
16
|
+
let { model, messages, retries = 3, options, onCost } = config;
|
|
17
|
+
try {
|
|
18
|
+
let response = await openRouterCall({ model, messages, options, onCost, retries: 0 });
|
|
19
|
+
let result = (0, yaml_1.parseYAML)(response);
|
|
20
|
+
(_a = config.validate) === null || _a === void 0 ? void 0 : _a.call(config, result);
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (retries > 0) {
|
|
25
|
+
return yamlOpenRouterCall({ model, messages, retries: retries - 1, onCost });
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.yamlOpenRouterCall = yamlOpenRouterCall;
|
|
31
|
+
async function simpleAICall(model, message) {
|
|
32
|
+
return await openRouterCallBase({
|
|
33
|
+
model,
|
|
34
|
+
messages: [{ role: "user", content: message }],
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.simpleAICall = simpleAICall;
|
|
38
|
+
/** The message must request the result to be returned in YAML (we automatically parse this and return an object). */
|
|
39
|
+
async function simpleAICallTyped(model, message) {
|
|
40
|
+
return await yamlOpenRouterCall({
|
|
41
|
+
model,
|
|
42
|
+
messages: [{ role: "user", content: message }],
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
exports.simpleAICallTyped = simpleAICallTyped;
|
|
46
|
+
let pendingLog = undefined;
|
|
47
|
+
async function openRouterCall(config) {
|
|
48
|
+
return await openRouterCallBase(config);
|
|
49
|
+
}
|
|
50
|
+
exports.openRouterCall = openRouterCall;
|
|
51
|
+
async function openRouterCallBase(config) {
|
|
52
|
+
let { model, messages, options, onCost } = config;
|
|
53
|
+
let openrouterKey = (options === null || options === void 0 ? void 0 : options.apiKey) || await (0, apiKeys_1.getAPIKey)("openrouter.json");
|
|
54
|
+
console.log(`Calling ${model} with ${messages.length} messages`);
|
|
55
|
+
let time = Date.now();
|
|
56
|
+
let stillRunning = true;
|
|
57
|
+
// Spawn monitoring loop
|
|
58
|
+
void (async () => {
|
|
59
|
+
while (stillRunning) {
|
|
60
|
+
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
61
|
+
if (stillRunning) {
|
|
62
|
+
console.log("OpenRouter call still running...");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
})();
|
|
66
|
+
try {
|
|
67
|
+
return await (0, batching_1.retryFunctional)(async () => {
|
|
68
|
+
let response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: {
|
|
71
|
+
"Authorization": `Bearer ${openrouterKey}`,
|
|
72
|
+
"Content-Type": "application/json",
|
|
73
|
+
},
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
model,
|
|
76
|
+
messages,
|
|
77
|
+
provider: {
|
|
78
|
+
sort: "throughput",
|
|
79
|
+
},
|
|
80
|
+
usage: { include: true },
|
|
81
|
+
...options,
|
|
82
|
+
}),
|
|
83
|
+
});
|
|
84
|
+
// If it failed, throw
|
|
85
|
+
if (response.status !== 200) {
|
|
86
|
+
let responseText = await response.text();
|
|
87
|
+
throw new Error(`Failed to call OpenRouter: ${response.status} ${response.statusText} ${responseText}`);
|
|
88
|
+
}
|
|
89
|
+
let responseObj = await response.json();
|
|
90
|
+
let newCost = responseObj.usage.cost;
|
|
91
|
+
totalCost += newCost;
|
|
92
|
+
onCost === null || onCost === void 0 ? void 0 : onCost(newCost);
|
|
93
|
+
if (!pendingLog) {
|
|
94
|
+
pendingLog = {
|
|
95
|
+
count: 0,
|
|
96
|
+
duration: 0,
|
|
97
|
+
cost: 0,
|
|
98
|
+
};
|
|
99
|
+
setTimeout(() => {
|
|
100
|
+
let log = pendingLog;
|
|
101
|
+
if (!log)
|
|
102
|
+
return;
|
|
103
|
+
console.log(`Ran: ${log.count} calls at a total summed cost of ${(0, format_1.formatNumber)(1 / log.cost)}/USD`);
|
|
104
|
+
pendingLog = undefined;
|
|
105
|
+
}, 10000);
|
|
106
|
+
}
|
|
107
|
+
pendingLog.count++;
|
|
108
|
+
pendingLog.duration += Date.now() - time;
|
|
109
|
+
pendingLog.cost += newCost;
|
|
110
|
+
return responseObj.choices[0].message.content;
|
|
111
|
+
}, { maxRetries: config.retries || 3 })();
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
stillRunning = false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.openRouterCallBase = openRouterCallBase;
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnJvdXRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9wZW5yb3V0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQW1DO0FBQ25DLDJEQUErRDtBQUMvRCxrRUFBcUU7QUFDckUsdUNBQXNDO0FBZ0J0QyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDbEIsU0FBZ0IsWUFBWTtJQUN4QixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBRkQsb0NBRUM7QUFXRCwwREFBMEQ7QUFDbkQsS0FBSyxVQUFVLGtCQUFrQixDQUFJLE1BTzNDOztJQUNHLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUMvRCxJQUFJLENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixJQUFJLE1BQU0sR0FBRyxJQUFBLGdCQUFTLEVBQUMsUUFBUSxDQUFNLENBQUM7UUFDdEMsTUFBQSxNQUFNLENBQUMsUUFBUSx1REFBRyxNQUFNLENBQUMsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxrQkFBa0IsQ0FBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsTUFBTSxLQUFLLENBQUM7SUFDaEIsQ0FBQztBQUNMLENBQUM7QUFwQkQsZ0RBb0JDO0FBRU0sS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUs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cG9ydCB7IHJldHJ5RnVuY3Rpb25hbCB9IGZyb20gXCJzb2NrZXQtZnVuY3Rpb24vc3JjL2JhdGNoaW5nXCI7XG5pbXBvcnQgeyBmb3JtYXROdW1iZXIgfSBmcm9tIFwic29ja2V0LWZ1bmN0aW9uL3NyYy9mb3JtYXR0aW5nL2Zvcm1hdFwiO1xuaW1wb3J0IHsgZ2V0QVBJS2V5IH0gZnJvbSBcIi4vYXBpS2V5c1wiO1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlSGlzdG9yeSA9IHtcbiAgICByb2xlOiBcInN5c3RlbVwiIHwgXCJ1c2VyXCIgfCBcImFzc2lzdGFudFwiO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbn1bXTtcbmV4cG9ydCB0eXBlIE1lc3NhZ2VIaXN0b3J5MiA9IHtcbiAgICByb2xlOiBcInN5c3RlbVwiIHwgXCJ1c2VyXCIgfCBcImFzc2lzdGFudFwiO1xuICAgIGNvbnRlbnQ6IHN0cmluZyB8IHtcbiAgICAgICAgdHlwZTogXCJpbWFnZV91cmxcIjtcbiAgICAgICAgaW1hZ2VfdXJsOiB7XG4gICAgICAgICAgICB1cmw6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9W107XG59W107XG5cbmxldCB0b3RhbENvc3QgPSAwO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRvdGFsQ29zdCgpIHtcbiAgICByZXR1cm4gdG90YWxDb3N0O1xufVxudHlwZSBPcGVuUm91dGVyT3B0aW9ucyA9IHtcbiAgICAvLyBJZiBub3QgcHJvdmlkZWQsIHdlJ2xsIHBvcCB1cCBhIG1vZGFsIHRvIGFzayB0aGUgdXNlciBmb3IgaXQsIE9yLCBpZiB3ZSdyZSBvbiB0aGUgc2VydmVyLCB3ZSdsbCB0cnkgdG8gcmVhZCBpdCBmcm9tIHRoZSB1c2VyIGZvbGRlci5cbiAgICBhcGlLZXk/OiBzdHJpbmc7XG4gICAgcHJvdmlkZXI/OiB7XG4gICAgICAgIHNvcnQ/OiBcInRocm91Z2hwdXRcIiB8IFwicHJpY2VcIiB8IFwibGF0ZW5jeVwiLFxuICAgICAgICAvLyBodHRwczovL29wZW5yb3V0ZXIuYWkvZG9jcy9mZWF0dXJlcy9wcm92aWRlci1yb3V0aW5nI29yZGVyaW5nLXNwZWNpZmljLXByb3ZpZGVyc1xuICAgICAgICBvcmRlcj86IHN0cmluZ1tdLFxuICAgIH1cbiAgICByZWFzb25pbmdFZmZvcnQ/OiBcImxvd1wiIHwgXCJtZWRpdW1cIiB8IFwiaGlnaFwiLFxufTtcbi8qKiBJTVBPUlRBTlQhIE1ha2Ugc3VyZSB0byB0ZWxsIHRoZSBBSSB0byByZXR1cm4geWFtbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB5YW1sT3BlblJvdXRlckNhbGw8VD4oY29uZmlnOiB7XG4gICAgbW9kZWw6IHN0cmluZztcbiAgICBtZXNzYWdlczogTWVzc2FnZUhpc3Rvcnk7XG4gICAgcmV0cmllcz86IG51bWJlcjtcbiAgICBvcHRpb25zPzogT3BlblJvdXRlck9wdGlvbnM7XG4gICAgb25Db3N0PzogKGNvc3Q6IG51bWJlcikgPT4gdm9pZDtcbiAgICB2YWxpZGF0ZT86IChyZXNwb25zZTogVCkgPT4gdm9pZDtcbn0pOiBQcm9taXNlPFQ+IHtcbiAgICBsZXQgeyBtb2RlbCwgbWVzc2FnZXMsIHJldHJpZXMgPSAzLCBvcHRpb25zLCBvbkNvc3QgfSA9IGNvbmZpZztcbiAgICB0cnkge1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBvcGVuUm91dGVyQ2FsbCh7IG1vZGVsLCBtZXNzYWdlcywgb3B0aW9ucywgb25Db3N0LCByZXRyaWVzOiAwIH0pO1xuICAgICAgICBsZXQgcmVzdWx0ID0gcGFyc2VZQU1MKHJlc3BvbnNlKSBhcyBUO1xuICAgICAgICBjb25maWcudmFsaWRhdGU/LihyZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChyZXRyaWVzID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHlhbWxPcGVuUm91dGVyQ2FsbDxUPih7IG1vZGVsLCBtZXNzYWdlcywgcmV0cmllczogcmV0cmllcyAtIDEsIG9uQ29zdCB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaW1wbGVBSUNhbGwobW9kZWw6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgb3BlblJvdXRlckNhbGxCYXNlKHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIG1lc3NhZ2VzOiBbeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogbWVzc2FnZSB9XSxcbiAgICB9KTtcbn1cbi8qKiBUaGUgbWVzc2FnZSBtdXN0IHJlcXVlc3QgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZCBpbiBZQU1MICh3ZSBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoaXMgYW5kIHJldHVybiBhbiBvYmplY3QpLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNpbXBsZUFJQ2FsbFR5cGVkPFQ+KG1vZGVsOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiBhd2FpdCB5YW1sT3BlblJvdXRlckNhbGwoe1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgbWVzc2FnZXM6IFt7IHJvbGU6IFwidXNlclwiLCBjb250ZW50OiBtZXNzYWdlIH1dLFxuICAgIH0pIGFzIFQ7XG59XG5cbmxldCBwZW5kaW5nTG9nOiB7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBkdXJhdGlvbjogbnVtYmVyO1xuICAgIGNvc3Q6IG51bWJlcjtcbn0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUm91dGVyQ2FsbChjb25maWc6IHtcbiAgICBtb2RlbDogc3RyaW5nO1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlSGlzdG9yeTtcbiAgICBvcHRpb25zPzogT3BlblJvdXRlck9wdGlvbnM7XG4gICAgb25Db3N0PzogKGNvc3Q6IG51bWJlcikgPT4gdm9pZDtcbiAgICByZXRyaWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IG9wZW5Sb3V0ZXJDYWxsQmFzZShjb25maWcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblJvdXRlckNhbGxCYXNlKGNvbmZpZzoge1xuICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgbWVzc2FnZXM6IE1lc3NhZ2VIaXN0b3J5MjtcbiAgICBvcHRpb25zPzogT3BlblJvdXRlck9wdGlvbnM7XG4gICAgb25Db3N0PzogKGNvc3Q6IG51bWJlcikgPT4gdm9pZDtcbiAgICByZXRyaWVzPzogbnVtYmVyO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHsgbW9kZWwsIG1lc3NhZ2VzLCBvcHRpb25zLCBvbkNvc3QgfSA9IGNvbmZpZztcbiAgICBsZXQgb3BlbnJvdXRlcktleSA9IG9wdGlvbnM/LmFwaUtleSB8fCBhd2FpdCBnZXRBUElLZXkoXCJvcGVucm91dGVyLmpzb25cIik7XG4gICAgY29uc29sZS5sb2coYENhbGxpbmcgJHttb2RlbH0gd2l0aCAke21lc3NhZ2VzLmxlbmd0aH0gbWVzc2FnZXNgKTtcbiAgICBsZXQgdGltZSA9IERhdGUubm93KCk7XG4gICAgbGV0IHN0aWxsUnVubmluZyA9IHRydWU7XG5cbiAgICAvLyBTcGF3biBtb25pdG9yaW5nIGxvb3BcbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICAgIHdoaWxlIChzdGlsbFJ1bm5pbmcpIHtcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCA1MDAwKSk7XG4gICAgICAgICAgICBpZiAoc3RpbGxSdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJPcGVuUm91dGVyIGNhbGwgc3RpbGwgcnVubmluZy4uLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgcmV0cnlGdW5jdGlvbmFsKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiaHR0cHM6Ly9vcGVucm91dGVyLmFpL2FwaS92MS9jaGF0L2NvbXBsZXRpb25zXCIsIHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IGBCZWFyZXIgJHtvcGVucm91dGVyS2V5fWAsXG4gICAgICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBcInRocm91Z2hwdXRcIixcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXNhZ2U6IHsgaW5jbHVkZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIElmIGl0IGZhaWxlZCwgdGhyb3dcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gY2FsbCBPcGVuUm91dGVyOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fSAke3Jlc3BvbnNlVGV4dH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCByZXNwb25zZU9iaiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICAgICAgICAgICAgdXNhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgY29zdDogbnVtYmVyO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY2hvaWNlczoge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVtdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBuZXdDb3N0ID0gcmVzcG9uc2VPYmoudXNhZ2UuY29zdDtcbiAgICAgICAgICAgIHRvdGFsQ29zdCArPSBuZXdDb3N0O1xuICAgICAgICAgICAgb25Db3N0Py4obmV3Q29zdCk7XG4gICAgICAgICAgICBpZiAoIXBlbmRpbmdMb2cpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTG9nID0ge1xuICAgICAgICAgICAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIGNvc3Q6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvZyA9IHBlbmRpbmdMb2c7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9nKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSYW46ICR7bG9nLmNvdW50fSBjYWxscyBhdCBhIHRvdGFsIHN1bW1lZCBjb3N0IG9mICR7Zm9ybWF0TnVtYmVyKDEgLyBsb2cuY29zdCl9L1VTRGApO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTG9nID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH0sIDEwXzAwMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZW5kaW5nTG9nLmNvdW50Kys7XG4gICAgICAgICAgICBwZW5kaW5nTG9nLmR1cmF0aW9uICs9IERhdGUubm93KCkgLSB0aW1lO1xuICAgICAgICAgICAgcGVuZGluZ0xvZy5jb3N0ICs9IG5ld0Nvc3Q7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmouY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnQgYXMgc3RyaW5nO1xuICAgICAgICB9LCB7IG1heFJldHJpZXM6IGNvbmZpZy5yZXRyaWVzIHx8IDMgfSkoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgICBzdGlsbFJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|
|
119
|
+
/* _JS_SOURCE_HASH = "29f9508fae589e294847d9f6787f804824093b8193621bf6749e0cde3607329d"; */
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true , configurable: true});
|
|
26
|
+
exports.stringifyYAML = exports.parseYAML = void 0;
|
|
27
|
+
const yaml = __importStar(require("./yamlBase"));
|
|
28
|
+
function parseYAML(text) {
|
|
29
|
+
text = text.trim();
|
|
30
|
+
if (text.startsWith("```yaml")) {
|
|
31
|
+
text = text.slice("```yaml".length).trim();
|
|
32
|
+
}
|
|
33
|
+
if (text.endsWith("```")) {
|
|
34
|
+
text = text.slice(0, -"```".length).trim();
|
|
35
|
+
}
|
|
36
|
+
text = text.trim();
|
|
37
|
+
return yaml.parse(text);
|
|
38
|
+
}
|
|
39
|
+
exports.parseYAML = parseYAML;
|
|
40
|
+
function stringifyYAML(value) {
|
|
41
|
+
return yaml.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
exports.stringifyYAML = stringifyYAML;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInlhbWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBbUM7QUFFbkMsU0FBZ0IsU0FBUyxDQUFDLElBQVk7SUFDbEMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM3QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQVZELDhCQVVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDeEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFGRCxzQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHlhbWwgZnJvbSBcIi4veWFtbEJhc2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWUFNTCh0ZXh0OiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG4gICAgaWYgKHRleHQuc3RhcnRzV2l0aChcImBgYHlhbWxcIikpIHtcbiAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoXCJgYGB5YW1sXCIubGVuZ3RoKS50cmltKCk7XG4gICAgfVxuICAgIGlmICh0ZXh0LmVuZHNXaXRoKFwiYGBgXCIpKSB7XG4gICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDAsIC1cImBgYFwiLmxlbmd0aCkudHJpbSgpO1xuICAgIH1cbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG4gICAgcmV0dXJuIHlhbWwucGFyc2UodGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlZQU1MKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICByZXR1cm4geWFtbC5zdHJpbmdpZnkodmFsdWUpO1xufVxuXG4iXX0=
|
|
45
|
+
/* _JS_SOURCE_HASH = "842295d9e84e235d67bbc8cd2064350a75ff84df4b6d53be8b5c7822a03528fa"; */
|