@sami7786/opencode-image-proxy 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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -49
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ OpenCode plugin that proxies images through a vision-capable model, enabling ima
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
### From npm
|
|
8
|
-
Add this to opencode config (typically in
|
|
8
|
+
Add this to opencode config (typically in: `~/.config/opencode/opencode.json`)
|
|
9
9
|
```json
|
|
10
10
|
{
|
|
11
11
|
"$schema": "https://opencode.ai/config.json",
|
|
@@ -25,7 +25,7 @@ All model calls use OpenCode's existing authentication - no separate API keys ne
|
|
|
25
25
|
|
|
26
26
|
## Configuration
|
|
27
27
|
|
|
28
|
-
Create `~/.config/opencode/opencode-image-proxy.json`
|
|
28
|
+
Create `~/.config/opencode/opencode-image-proxy.json` (or `$XDG_CONFIG_HOME/opencode/opencode-image-proxy.json`)
|
|
29
29
|
|
|
30
30
|
<i> To see available models, run: ```opencode models``` </i>
|
|
31
31
|
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,qBAAqB,CAAA;AAkK9D,eAAO,MAAM,oBAAoB,EAAE,MA+DlC,CAAA;AAED,eAAe,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -24,36 +24,44 @@ const IMAGE_WRAPPER_SUFFIX = `]`;
|
|
|
24
24
|
const sessionsNeedingAnalysis = new Set();
|
|
25
25
|
let config = null;
|
|
26
26
|
let pluginContext = null;
|
|
27
|
+
function isNonEmptyString(value) {
|
|
28
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
29
|
+
}
|
|
27
30
|
function getConfigDir() {
|
|
28
31
|
const xdgConfig = process.env.XDG_CONFIG_HOME;
|
|
29
|
-
|
|
30
|
-
return join(xdgConfig, "opencode");
|
|
31
|
-
}
|
|
32
|
-
return join(homedir(), ".config", "opencode");
|
|
32
|
+
return join(xdgConfig ?? join(homedir(), ".config"), "opencode");
|
|
33
33
|
}
|
|
34
|
-
function
|
|
35
|
-
|
|
36
|
-
const defaultConfig = {
|
|
34
|
+
function getDefaultConfig() {
|
|
35
|
+
return {
|
|
37
36
|
imageIncapableModels: DEFAULT_IMAGE_INCAPABLE_MODELS,
|
|
38
|
-
imageReaderModel: { providerID: "
|
|
37
|
+
imageReaderModel: { providerID: "opencode", modelID: "kimi-k2.5-free" },
|
|
39
38
|
analysisPrompt: DEFAULT_ANALYSIS_PROMPT,
|
|
40
39
|
};
|
|
40
|
+
}
|
|
41
|
+
function normalizeStringArray(value, fallback) {
|
|
42
|
+
const raw = Array.isArray(value) ? value : fallback;
|
|
43
|
+
return raw.filter(isNonEmptyString).map((entry) => entry.trim());
|
|
44
|
+
}
|
|
45
|
+
function normalizeReaderModel(value, fallback) {
|
|
46
|
+
if (!value || typeof value !== "object")
|
|
47
|
+
return fallback;
|
|
48
|
+
const candidate = value;
|
|
49
|
+
const providerID = isNonEmptyString(candidate.providerID) ? candidate.providerID.trim() : fallback.providerID;
|
|
50
|
+
const modelID = isNonEmptyString(candidate.modelID) ? candidate.modelID.trim() : fallback.modelID;
|
|
51
|
+
return { providerID, modelID };
|
|
52
|
+
}
|
|
53
|
+
function loadConfig() {
|
|
54
|
+
const configPath = join(getConfigDir(), "opencode-image-proxy.json");
|
|
55
|
+
const defaultConfig = getDefaultConfig();
|
|
41
56
|
if (!existsSync(configPath)) {
|
|
42
57
|
return defaultConfig;
|
|
43
58
|
}
|
|
44
59
|
try {
|
|
45
60
|
const userConfig = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
46
61
|
return {
|
|
47
|
-
imageIncapableModels:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
imageReaderModel: userConfig.imageReaderModel
|
|
51
|
-
? {
|
|
52
|
-
providerID: userConfig.imageReaderModel.providerID ?? defaultConfig.imageReaderModel.providerID,
|
|
53
|
-
modelID: userConfig.imageReaderModel.modelID ?? defaultConfig.imageReaderModel.modelID,
|
|
54
|
-
}
|
|
55
|
-
: defaultConfig.imageReaderModel,
|
|
56
|
-
analysisPrompt: typeof userConfig.analysisPrompt === "string" ? userConfig.analysisPrompt : DEFAULT_ANALYSIS_PROMPT,
|
|
62
|
+
imageIncapableModels: normalizeStringArray(userConfig.imageIncapableModels, defaultConfig.imageIncapableModels),
|
|
63
|
+
imageReaderModel: normalizeReaderModel(userConfig.imageReaderModel, defaultConfig.imageReaderModel),
|
|
64
|
+
analysisPrompt: isNonEmptyString(userConfig.analysisPrompt) ? userConfig.analysisPrompt : defaultConfig.analysisPrompt,
|
|
57
65
|
};
|
|
58
66
|
}
|
|
59
67
|
catch {
|
|
@@ -65,24 +73,17 @@ function isImageIncapableModel(providerID, modelID) {
|
|
|
65
73
|
return false;
|
|
66
74
|
return (config ??= loadConfig()).imageIncapableModels.includes(`${providerID}/${modelID}`);
|
|
67
75
|
}
|
|
68
|
-
function
|
|
69
|
-
const match = url.match(/^data:([^;,]+)(?:;[^,]+)?;base64
|
|
70
|
-
|
|
71
|
-
return null;
|
|
72
|
-
try {
|
|
73
|
-
const data = Buffer.from(match[2], "base64");
|
|
74
|
-
return data.length ? { data, mime: match[1].toLowerCase() } : null;
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
76
|
+
function getMimeFromDataUrl(url) {
|
|
77
|
+
const match = url.match(/^data:([^;,]+)(?:;[^,]+)?;base64,/);
|
|
78
|
+
return match ? match[1].toLowerCase() : null;
|
|
79
79
|
}
|
|
80
|
-
async function analyzeImageViaOpencode(imageDataUrl, filename) {
|
|
80
|
+
async function analyzeImageViaOpencode(imageDataUrl, filename, mime) {
|
|
81
81
|
if (!pluginContext) {
|
|
82
82
|
return "[Image analysis failed: plugin context not initialized]";
|
|
83
83
|
}
|
|
84
84
|
const cfg = config ??= loadConfig();
|
|
85
85
|
const { client } = pluginContext;
|
|
86
|
+
const resolvedMime = mime ?? getMimeFromDataUrl(imageDataUrl) ?? "image/png";
|
|
86
87
|
try {
|
|
87
88
|
const session = await client.session.create({});
|
|
88
89
|
if (!session.data) {
|
|
@@ -95,15 +96,12 @@ async function analyzeImageViaOpencode(imageDataUrl, filename) {
|
|
|
95
96
|
model: cfg.imageReaderModel,
|
|
96
97
|
system: cfg.analysisPrompt,
|
|
97
98
|
parts: [
|
|
98
|
-
{
|
|
99
|
-
type: "text",
|
|
100
|
-
text: "What do you see in this image?",
|
|
101
|
-
},
|
|
99
|
+
{ type: "text", text: "What do you see in this image?" },
|
|
102
100
|
{
|
|
103
101
|
type: "file",
|
|
104
102
|
url: imageDataUrl,
|
|
105
103
|
filename: filename ?? "image.png",
|
|
106
|
-
mime:
|
|
104
|
+
mime: resolvedMime,
|
|
107
105
|
},
|
|
108
106
|
],
|
|
109
107
|
},
|
|
@@ -112,8 +110,7 @@ async function analyzeImageViaOpencode(imageDataUrl, filename) {
|
|
|
112
110
|
if (!response.data) {
|
|
113
111
|
return "[Image analysis failed: no response from vision model]";
|
|
114
112
|
}
|
|
115
|
-
const
|
|
116
|
-
const textParts = parts.filter((p) => p.type === "text" && p.text);
|
|
113
|
+
const textParts = (response.data.parts ?? []).filter((p) => p.type === "text" && p.text);
|
|
117
114
|
if (textParts.length === 0) {
|
|
118
115
|
return "[Image analysis failed: no text in response]";
|
|
119
116
|
}
|
|
@@ -156,15 +153,12 @@ export const OpencodeVisionPlugin = async (ctx) => {
|
|
|
156
153
|
return;
|
|
157
154
|
const imageAnalysisPromises = [];
|
|
158
155
|
for (let i = 0; i < msg.parts.length; i++) {
|
|
159
|
-
const
|
|
160
|
-
if (
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const imageUrl = p.url;
|
|
164
|
-
imageAnalysisPromises.push(analyzeImageViaOpencode(imageUrl, filename).then((analysis) => ({
|
|
165
|
-
index,
|
|
156
|
+
const part = msg.parts[i];
|
|
157
|
+
if (part.type === "file" && part.mime?.startsWith("image/") && part.url) {
|
|
158
|
+
imageAnalysisPromises.push(analyzeImageViaOpencode(part.url, part.filename, part.mime).then((analysis) => ({
|
|
159
|
+
index: i,
|
|
166
160
|
analysis,
|
|
167
|
-
filename,
|
|
161
|
+
filename: part.filename,
|
|
168
162
|
})));
|
|
169
163
|
}
|
|
170
164
|
}
|
|
@@ -172,13 +166,12 @@ export const OpencodeVisionPlugin = async (ctx) => {
|
|
|
172
166
|
return;
|
|
173
167
|
const results = await Promise.all(imageAnalysisPromises);
|
|
174
168
|
for (const { index, analysis, filename } of results) {
|
|
175
|
-
const
|
|
176
|
-
const displayName = filename ?? `image.${
|
|
177
|
-
|
|
169
|
+
const part = msg.parts[index];
|
|
170
|
+
const displayName = filename ?? `image.${part.mime?.split("/")[1] ?? "bin"}`;
|
|
171
|
+
msg.parts[index] = {
|
|
178
172
|
type: "text",
|
|
179
173
|
text: `${IMAGE_WRAPPER_PREFIX}${displayName}${IMAGE_WRAPPER_SUFFIX}\n${analysis}`,
|
|
180
174
|
};
|
|
181
|
-
msg.parts[index] = textPart;
|
|
182
175
|
}
|
|
183
176
|
},
|
|
184
177
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,8BAA8B,GAAG;IACrC,yBAAyB;IACzB,6BAA6B;IAC7B,+BAA+B;IAC/B,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,+BAA+B;IAC/B,uBAAuB;CACxB,CAAA;AAED,MAAM,uBAAuB,GAAG;;;;;;qFAMqD,CAAA;AAErF,MAAM,oBAAoB,GAAG,sBAAsB,CAAA;AACnD,MAAM,oBAAoB,GAAG,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,8BAA8B,GAAG;IACrC,yBAAyB;IACzB,6BAA6B;IAC7B,+BAA+B;IAC/B,0BAA0B;IAC1B,yBAAyB;IACzB,0BAA0B;IAC1B,yBAAyB;IACzB,+BAA+B;IAC/B,uBAAuB;CACxB,CAAA;AAED,MAAM,uBAAuB,GAAG;;;;;;qFAMqD,CAAA;AAErF,MAAM,oBAAoB,GAAG,sBAAsB,CAAA;AACnD,MAAM,oBAAoB,GAAG,GAAG,CAAA;AAuBhC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAA;AACjD,IAAI,MAAM,GAAkB,IAAI,CAAA;AAChC,IAAI,aAAa,GAAuB,IAAI,CAAA;AAE5C,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC7C,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO;QACL,oBAAoB,EAAE,8BAA8B;QACpD,gBAAgB,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE;QACvE,cAAc,EAAE,uBAAuB;KACxC,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAkB;IAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IACnD,OAAO,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;AAClE,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,QAAoC;IAChF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IACxD,MAAM,SAAS,GAAG,KAAoD,CAAA;IACtE,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAA;IAC7G,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAA;IACjG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;AAChC,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,2BAA2B,CAAC,CAAA;IACpE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IAExC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAe,CAAA;QAC9E,OAAO;YACL,oBAAoB,EAAE,oBAAoB,CAAC,UAAU,CAAC,oBAAoB,EAAE,aAAa,CAAC,oBAAoB,CAAC;YAC/G,gBAAgB,EAAE,oBAAoB,CAAC,UAAU,CAAC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,CAAC;YACnG,cAAc,EAAE,gBAAgB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc;SACvH,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAA;IACtB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAmB,EAAE,OAAgB;IAClE,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAA;IACzC,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9C,CAAC;AAED,KAAK,UAAU,uBAAuB,CAAC,YAAoB,EAAE,QAAiB,EAAE,IAAa;IAC3F,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,yDAAyD,CAAA;IAClE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,UAAU,EAAE,CAAA;IACnC,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,CAAA;IAChC,MAAM,YAAY,GAAG,IAAI,IAAI,kBAAkB,CAAC,YAAY,CAAC,IAAI,WAAW,CAAA;IAE5E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,mDAAmD,CAAA;QAC5D,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;QAEjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC3C,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE;gBACJ,KAAK,EAAE,GAAG,CAAC,gBAAgB;gBAC3B,MAAM,EAAE,GAAG,CAAC,cAAc;gBAC1B,KAAK,EAAE;oBACL,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,EAAE;oBACxD;wBACE,IAAI,EAAE,MAAM;wBACZ,GAAG,EAAE,YAAY;wBACjB,QAAQ,EAAE,QAAQ,IAAI,WAAW;wBACjC,IAAI,EAAE,YAAY;qBACnB;iBACF;aACF;SACF,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAExE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,wDAAwD,CAAA;QACjE,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAA;QAC9F,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,8CAA8C,CAAA;QACvD,CAAC;QAED,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACvE,OAAO,2BAA2B,QAAQ,GAAG,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAW,KAAK,EAAE,GAAG,EAAE,EAAE;IACxD,aAAa,GAAG,GAAG,CAAA;IACnB,MAAM,GAAG,UAAU,EAAE,CAAA;IAErB,OAAO;QACL,cAAc,EAAE,KAAK,EAAE,KAA+E,EAAE,EAAE;YACxG,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzE,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3D,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QAED,sCAAsC,EAAE,KAAK,EAC3C,CAAU,EACV,MAAuF,EACvF,EAAE;YACF,IAAI,CAAC,MAAM,EAAE,QAAQ;gBAAE,OAAM;YAE7B,IAAI,cAAc,GAAG,CAAC,CAAC,CAAA;YACvB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC7C,cAAc,GAAG,CAAC,CAAA;oBAClB,MAAK;gBACP,CAAC;YACH,CAAC;YACD,IAAI,cAAc,KAAK,CAAC,CAAC;gBAAE,OAAM;YAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,EAAE,KAAK;gBAAE,OAAM;YAEvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAA;YAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAM;YAErD,MAAM,qBAAqB,GAAsE,EAAE,CAAA;YAEnG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACxE,qBAAqB,CAAC,IAAI,CACxB,uBAAuB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;wBAC9E,KAAK,EAAE,CAAC;wBACR,QAAQ;wBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACxB,CAAC,CAAC,CACJ,CAAA;gBACH,CAAC;YACH,CAAC;YAED,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAE9C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;YAExD,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC7B,MAAM,WAAW,GAAG,QAAQ,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAA;gBAC5E,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;oBACjB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,oBAAoB,GAAG,WAAW,GAAG,oBAAoB,KAAK,QAAQ,EAAE;iBAClF,CAAA;YACH,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,eAAe,oBAAoB,CAAA"}
|
package/package.json
CHANGED