@monotykamary/localterm-server 2.44.0 → 2.45.0
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/dist/completion/resolver.d.ts +2 -0
- package/dist/completion/resolver.d.ts.map +1 -1
- package/dist/completion/resolver.js.map +1 -1
- package/dist/completion/spec.d.ts +1 -1
- package/dist/completion/spec.d.ts.map +1 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +77 -3
- package/dist/index.js.map +1 -1
- package/dist/protocol.d.ts +2 -2
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/schemas.d.ts +50 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +57 -1
- package/dist/schemas.js.map +1 -1
- package/dist/terminal-themes.d.ts +40 -0
- package/dist/terminal-themes.d.ts.map +1 -0
- package/dist/terminal-themes.js +606 -0
- package/dist/terminal-themes.js.map +1 -0
- package/dist/theme-parser.d.ts +8 -0
- package/dist/theme-parser.d.ts.map +1 -0
- package/dist/theme-parser.js +274 -0
- package/dist/theme-parser.js.map +1 -0
- package/dist/theme-store.d.ts +24 -0
- package/dist/theme-store.d.ts.map +1 -0
- package/dist/theme-store.js +131 -0
- package/dist/theme-store.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -2
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
const colorKeysToTheme = {
|
|
2
|
+
"Background Color": "background",
|
|
3
|
+
"Foreground Color": "foreground",
|
|
4
|
+
"Cursor Color": "cursor",
|
|
5
|
+
"Cursor Text Color": "cursorAccent",
|
|
6
|
+
"Selection Color": "selectionBackground",
|
|
7
|
+
"Selected Text Color": "selectionForeground",
|
|
8
|
+
"Ansi 0 Color": "black",
|
|
9
|
+
"Ansi 1 Color": "red",
|
|
10
|
+
"Ansi 2 Color": "green",
|
|
11
|
+
"Ansi 3 Color": "yellow",
|
|
12
|
+
"Ansi 4 Color": "blue",
|
|
13
|
+
"Ansi 5 Color": "magenta",
|
|
14
|
+
"Ansi 6 Color": "cyan",
|
|
15
|
+
"Ansi 7 Color": "white",
|
|
16
|
+
"Ansi 8 Color": "brightBlack",
|
|
17
|
+
"Ansi 9 Color": "brightRed",
|
|
18
|
+
"Ansi 10 Color": "brightGreen",
|
|
19
|
+
"Ansi 11 Color": "brightYellow",
|
|
20
|
+
"Ansi 12 Color": "brightBlue",
|
|
21
|
+
"Ansi 13 Color": "brightMagenta",
|
|
22
|
+
"Ansi 14 Color": "brightCyan",
|
|
23
|
+
"Ansi 15 Color": "brightWhite",
|
|
24
|
+
};
|
|
25
|
+
const isHexColor = (value) => typeof value === "string" && /^#[0-9a-fA-F]{3,8}$/.test(value);
|
|
26
|
+
// Coerce a color value to a #rrggbb hex string. Accepts #rgb/#rrggbb/#rrggbbaa
|
|
27
|
+
// (alpha dropped — xterm colors are opaque) or null/undefined (field omitted).
|
|
28
|
+
const normalizeColor = (value) => {
|
|
29
|
+
if (!isHexColor(value))
|
|
30
|
+
return undefined;
|
|
31
|
+
const hex = value.slice(1);
|
|
32
|
+
if (hex.length === 3) {
|
|
33
|
+
return `#${hex[0]}${hex[0]}${hex[1]}${hex[1]}${hex[2]}${hex[2]}`.toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
return `#${hex.slice(0, 6)}`.toLowerCase();
|
|
36
|
+
};
|
|
37
|
+
const generateThemeId = () => `custom-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
38
|
+
const baseNameFrom = (filename) => {
|
|
39
|
+
if (!filename)
|
|
40
|
+
return "Imported theme";
|
|
41
|
+
const withoutExt = filename.replace(/\.[^.]+$/, "");
|
|
42
|
+
return withoutExt || "Imported theme";
|
|
43
|
+
};
|
|
44
|
+
// Build a TerminalTheme from a partial colors object, omitting any field that
|
|
45
|
+
// isn't a valid hex color so xterm falls back to its per-field defaults rather
|
|
46
|
+
// than rendering an invalid color string.
|
|
47
|
+
const buildFromColors = (name, source, colors) => {
|
|
48
|
+
const resolved = {};
|
|
49
|
+
for (const [key, value] of Object.entries(colors)) {
|
|
50
|
+
const normalized = normalizeColor(value);
|
|
51
|
+
if (normalized)
|
|
52
|
+
Object.assign(resolved, { [key]: normalized });
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
id: generateThemeId(),
|
|
56
|
+
name,
|
|
57
|
+
source,
|
|
58
|
+
colors: resolved,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const parseJsonTheme = (text, filename) => {
|
|
62
|
+
let parsed;
|
|
63
|
+
try {
|
|
64
|
+
parsed = JSON.parse(text);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return { error: "Not valid JSON" };
|
|
68
|
+
}
|
|
69
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
70
|
+
return { error: "Not a JSON object" };
|
|
71
|
+
const obj = parsed;
|
|
72
|
+
// Accept either { name?, colors: {...} } (the TerminalTheme shape, minus the
|
|
73
|
+
// generated id/source) or a bare colors object (the xterm ITheme) so a user
|
|
74
|
+
// can paste either form.
|
|
75
|
+
const colors = (obj.colors && typeof obj.colors === "object" ? obj.colors : obj);
|
|
76
|
+
const name = typeof obj.name === "string" && obj.name.trim() ? obj.name.trim() : baseNameFrom(filename);
|
|
77
|
+
if (!colors || typeof colors !== "object")
|
|
78
|
+
return { error: "No color fields found" };
|
|
79
|
+
return { theme: buildFromColors(name, "imported", colors) };
|
|
80
|
+
};
|
|
81
|
+
const decodeEntities = (text) => text
|
|
82
|
+
.replace(/</g, "<")
|
|
83
|
+
.replace(/>/g, ">")
|
|
84
|
+
.replace(/"/g, '"')
|
|
85
|
+
.replace(/'/g, "'")
|
|
86
|
+
.replace(/&/g, "&");
|
|
87
|
+
const tokenizePlist = (xml) => {
|
|
88
|
+
const tokens = [];
|
|
89
|
+
let index = 0;
|
|
90
|
+
while (index < xml.length) {
|
|
91
|
+
const char = xml[index];
|
|
92
|
+
if (char === "<") {
|
|
93
|
+
// Skip processing instructions (<?xml ...?>) and declarations (<!DOCTYPE ...>).
|
|
94
|
+
if (xml.startsWith("<?", index)) {
|
|
95
|
+
const end = xml.indexOf("?>", index + 2);
|
|
96
|
+
index = end === -1 ? xml.length : end + 2;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (xml.startsWith("<!", index)) {
|
|
100
|
+
const end = xml.indexOf(">", index + 2);
|
|
101
|
+
index = end === -1 ? xml.length : end + 1;
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const close = xml.startsWith("</", index);
|
|
105
|
+
const tagStart = index + (close ? 2 : 1);
|
|
106
|
+
const tagEnd = xml.indexOf(">", tagStart);
|
|
107
|
+
if (tagEnd === -1)
|
|
108
|
+
break;
|
|
109
|
+
let raw = xml.slice(tagStart, tagEnd).trim();
|
|
110
|
+
const selfClose = raw.endsWith("/");
|
|
111
|
+
if (selfClose)
|
|
112
|
+
raw = raw.slice(0, -1).trim();
|
|
113
|
+
// The tag name is the leading token; ignore any attributes (e.g.
|
|
114
|
+
// <plist version="1.0">).
|
|
115
|
+
const tagName = raw.split(/\s+/)[0];
|
|
116
|
+
if (!tagName) {
|
|
117
|
+
index = tagEnd + 1;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (close)
|
|
121
|
+
tokens.push({ kind: "close", tag: tagName });
|
|
122
|
+
else if (selfClose)
|
|
123
|
+
tokens.push({ kind: "self", tag: tagName });
|
|
124
|
+
else
|
|
125
|
+
tokens.push({ kind: "open", tag: tagName });
|
|
126
|
+
index = tagEnd + 1;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const nextTag = xml.indexOf("<", index);
|
|
130
|
+
const sliceEnd = nextTag === -1 ? xml.length : nextTag;
|
|
131
|
+
const value = decodeEntities(xml.slice(index, sliceEnd)).trim();
|
|
132
|
+
if (value)
|
|
133
|
+
tokens.push({ kind: "text", value });
|
|
134
|
+
index = sliceEnd;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return tokens;
|
|
138
|
+
};
|
|
139
|
+
const isCloseToken = (token, tag) => token !== undefined && token.kind === "close" && token.tag === tag;
|
|
140
|
+
const parsePlistValue = (tokens, pos) => {
|
|
141
|
+
const token = tokens[pos];
|
|
142
|
+
if (!token)
|
|
143
|
+
return [undefined, pos];
|
|
144
|
+
if (token.kind === "text")
|
|
145
|
+
return [token.value, pos + 1];
|
|
146
|
+
if (token.kind !== "open")
|
|
147
|
+
return [undefined, pos + 1];
|
|
148
|
+
const { tag } = token;
|
|
149
|
+
let next = pos + 1;
|
|
150
|
+
if (tag === "true" || tag === "false") {
|
|
151
|
+
// <true/> and <false/> are self-closing; if an open form slips through,
|
|
152
|
+
// consume to its close.
|
|
153
|
+
if (isCloseToken(tokens[next], tag))
|
|
154
|
+
next += 1;
|
|
155
|
+
return [tag === "true", next];
|
|
156
|
+
}
|
|
157
|
+
if (tag === "string" || tag === "real" || tag === "integer" || tag === "data" || tag === "date") {
|
|
158
|
+
const textToken = tokens[next];
|
|
159
|
+
const text = textToken?.kind === "text" ? textToken.value : "";
|
|
160
|
+
if (textToken?.kind === "text")
|
|
161
|
+
next += 1;
|
|
162
|
+
if (isCloseToken(tokens[next], tag))
|
|
163
|
+
next += 1;
|
|
164
|
+
if (tag === "real" || tag === "integer") {
|
|
165
|
+
const numberValue = Number(text);
|
|
166
|
+
return [Number.isFinite(numberValue) ? numberValue : undefined, next];
|
|
167
|
+
}
|
|
168
|
+
return [text, next];
|
|
169
|
+
}
|
|
170
|
+
if (tag === "array") {
|
|
171
|
+
const values = [];
|
|
172
|
+
while (next < tokens.length && !isCloseToken(tokens[next], "array")) {
|
|
173
|
+
const [value, after] = parsePlistValue(tokens, next);
|
|
174
|
+
if (after === next) {
|
|
175
|
+
next += 1;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (value !== undefined)
|
|
179
|
+
values.push(value);
|
|
180
|
+
next = after;
|
|
181
|
+
}
|
|
182
|
+
if (isCloseToken(tokens[next], "array"))
|
|
183
|
+
next += 1;
|
|
184
|
+
return [values, next];
|
|
185
|
+
}
|
|
186
|
+
if (tag === "dict") {
|
|
187
|
+
const dict = {};
|
|
188
|
+
while (next < tokens.length && !isCloseToken(tokens[next], "dict")) {
|
|
189
|
+
const keyToken = tokens[next];
|
|
190
|
+
if (keyToken?.kind === "open" && keyToken.tag === "key") {
|
|
191
|
+
const keyTextToken = tokens[next + 1];
|
|
192
|
+
const keyText = keyTextToken?.kind === "text" ? keyTextToken.value : "";
|
|
193
|
+
let keyEnd = next + 2;
|
|
194
|
+
if (isCloseToken(tokens[keyEnd], "key"))
|
|
195
|
+
keyEnd += 1;
|
|
196
|
+
const [value, after] = parsePlistValue(tokens, keyEnd);
|
|
197
|
+
if (keyText)
|
|
198
|
+
dict[keyText] = value ?? "";
|
|
199
|
+
next = after;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
next += 1;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (isCloseToken(tokens[next], "dict"))
|
|
206
|
+
next += 1;
|
|
207
|
+
return [dict, next];
|
|
208
|
+
}
|
|
209
|
+
return [undefined, next];
|
|
210
|
+
};
|
|
211
|
+
const parsePlist = (xml) => {
|
|
212
|
+
const tokens = tokenizePlist(xml);
|
|
213
|
+
// Find the <plist> root and parse its single value (a dict for .itermcolors).
|
|
214
|
+
const plistOpen = tokens.findIndex((token) => token.kind === "open" && token.tag === "plist");
|
|
215
|
+
if (plistOpen === -1) {
|
|
216
|
+
// Some files omit the <plist> wrapper; parse the first value directly.
|
|
217
|
+
const [value] = parsePlistValue(tokens, 0);
|
|
218
|
+
return value;
|
|
219
|
+
}
|
|
220
|
+
const [value] = parsePlistValue(tokens, plistOpen + 1);
|
|
221
|
+
return value;
|
|
222
|
+
};
|
|
223
|
+
// Read a 0–1 float component from an iTerm color dict and convert to a two-digit
|
|
224
|
+
// hex channel.
|
|
225
|
+
const channelHex = (colorDict, component) => {
|
|
226
|
+
if (!colorDict || typeof colorDict !== "object" || Array.isArray(colorDict))
|
|
227
|
+
return undefined;
|
|
228
|
+
const value = colorDict[component];
|
|
229
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
230
|
+
return undefined;
|
|
231
|
+
const clamped = Math.max(0, Math.min(1, value));
|
|
232
|
+
return Math.round(clamped * 255)
|
|
233
|
+
.toString(16)
|
|
234
|
+
.padStart(2, "0");
|
|
235
|
+
};
|
|
236
|
+
const parseItermPlist = (text, filename) => {
|
|
237
|
+
const root = parsePlist(text);
|
|
238
|
+
if (!root || typeof root !== "object" || Array.isArray(root)) {
|
|
239
|
+
return { error: "Not a valid iTerm .itermcolors plist" };
|
|
240
|
+
}
|
|
241
|
+
const topDict = root;
|
|
242
|
+
const colors = {};
|
|
243
|
+
for (const [itermKey, themeKey] of Object.entries(colorKeysToTheme)) {
|
|
244
|
+
const component = topDict[itermKey];
|
|
245
|
+
const red = channelHex(component, "Red Component");
|
|
246
|
+
const green = channelHex(component, "Green Component");
|
|
247
|
+
const blue = channelHex(component, "Blue Component");
|
|
248
|
+
if (red && green && blue)
|
|
249
|
+
Object.assign(colors, { [themeKey]: `#${red}${green}${blue}` });
|
|
250
|
+
}
|
|
251
|
+
if (Object.keys(colors).length === 0)
|
|
252
|
+
return { error: "No iTerm color entries found" };
|
|
253
|
+
return {
|
|
254
|
+
theme: {
|
|
255
|
+
id: generateThemeId(),
|
|
256
|
+
name: baseNameFrom(filename),
|
|
257
|
+
source: "imported",
|
|
258
|
+
colors,
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
export const parseImportedTheme = (text, filename) => {
|
|
263
|
+
const trimmed = text.trim();
|
|
264
|
+
if (!trimmed)
|
|
265
|
+
return { error: "Empty file" };
|
|
266
|
+
// .itermcolors is an XML plist (starts with <?xml or <plist); anything else is
|
|
267
|
+
// treated as JSON (the TerminalTheme / bare-colors shape).
|
|
268
|
+
const looksLikeXml = /^<\?xml/.test(trimmed) || /^<plist/.test(trimmed);
|
|
269
|
+
const isItermFile = filename ? /\.itermcolors$/i.test(filename) : false;
|
|
270
|
+
if (looksLikeXml || isItermFile)
|
|
271
|
+
return parseItermPlist(text, filename);
|
|
272
|
+
return parseJsonTheme(text, filename);
|
|
273
|
+
};
|
|
274
|
+
//# sourceMappingURL=theme-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-parser.js","sourceRoot":"","sources":["../src/theme-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type TerminalTheme } from "./terminal-themes.js";
|
|
2
|
+
interface ThemeStoreOptions {
|
|
3
|
+
filePath: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class ThemeStore {
|
|
6
|
+
private activeThemeId;
|
|
7
|
+
private customThemes;
|
|
8
|
+
private initialized;
|
|
9
|
+
private readonly filePath;
|
|
10
|
+
constructor(options: ThemeStoreOptions);
|
|
11
|
+
isInitialized(): boolean;
|
|
12
|
+
list(): TerminalTheme[];
|
|
13
|
+
get(id: string): TerminalTheme | undefined;
|
|
14
|
+
getActive(): string;
|
|
15
|
+
add(theme: TerminalTheme): TerminalTheme | null;
|
|
16
|
+
delete(id: string): boolean;
|
|
17
|
+
setActive(id: string): string;
|
|
18
|
+
migrate(activeThemeId: string, customThemes: readonly TerminalTheme[]): boolean;
|
|
19
|
+
private load;
|
|
20
|
+
private sanitizeActiveId;
|
|
21
|
+
private persist;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=theme-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-store.d.ts","sourceRoot":"","sources":["../src/theme-store.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAOD,qBAAa,UAAU;IACrB,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,OAAO,EAAE,iBAAiB;IAUtC,aAAa,IAAI,OAAO;IAIxB,IAAI,IAAI,aAAa,EAAE;IAIvB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,SAAS,IAAI,MAAM;IAOnB,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI;IAQ/C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAW3B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAY7B,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO;IAW/E,OAAO,CAAC,IAAI;IA2BZ,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,OAAO;CAehB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { MAX_CUSTOM_THEMES, THEMES_FILE_VERSION } from "./constants.js";
|
|
4
|
+
import { themesFileSchema } from "./schemas.js";
|
|
5
|
+
import { DEFAULT_TERMINAL_THEME_ID, isBuiltinThemeId, } from "./terminal-themes.js";
|
|
6
|
+
// Owns the persisted terminal theme state in ~/.localterm/themes.json: the
|
|
7
|
+
// active theme id plus the user's imported custom themes. Mirrors SecretStore's
|
|
8
|
+
// load/persist shape (zod-validated read, atomic tmp+rename write). The active
|
|
9
|
+
// id is sanitized on load — a stale id left by a deleted custom theme (or a
|
|
10
|
+
// hand-edited file) falls back to the default rather than rendering nothing.
|
|
11
|
+
export class ThemeStore {
|
|
12
|
+
activeThemeId = DEFAULT_TERMINAL_THEME_ID;
|
|
13
|
+
customThemes = [];
|
|
14
|
+
initialized = false;
|
|
15
|
+
filePath;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.filePath = options.filePath;
|
|
18
|
+
this.load();
|
|
19
|
+
}
|
|
20
|
+
// True once ~/.localterm/themes.json has been written (or loaded). The browser
|
|
21
|
+
// uses it as a one-time migration gate: on first contact with an
|
|
22
|
+
// uninitialized store it pushes its legacy localStorage themes (preserving
|
|
23
|
+
// their ids) so an upgrade doesn't lose the user's imported themes / active
|
|
24
|
+
// selection. Once initialized, the store is the source of truth.
|
|
25
|
+
isInitialized() {
|
|
26
|
+
return this.initialized;
|
|
27
|
+
}
|
|
28
|
+
list() {
|
|
29
|
+
return this.customThemes.map((theme) => ({ ...theme, colors: { ...theme.colors } }));
|
|
30
|
+
}
|
|
31
|
+
get(id) {
|
|
32
|
+
return this.customThemes.find((theme) => theme.id === id);
|
|
33
|
+
}
|
|
34
|
+
getActive() {
|
|
35
|
+
return this.activeThemeId;
|
|
36
|
+
}
|
|
37
|
+
// Add an imported theme. Returns the stored theme, or null if the cap is
|
|
38
|
+
// reached (callers surface `capacity`). Duplicates by name are allowed (each
|
|
39
|
+
// import mints a fresh id), matching the browser's prior append behavior.
|
|
40
|
+
add(theme) {
|
|
41
|
+
if (this.customThemes.length >= MAX_CUSTOM_THEMES)
|
|
42
|
+
return null;
|
|
43
|
+
const stored = { ...theme, colors: { ...theme.colors } };
|
|
44
|
+
this.customThemes.push(stored);
|
|
45
|
+
this.persist();
|
|
46
|
+
return { ...stored, colors: { ...stored.colors } };
|
|
47
|
+
}
|
|
48
|
+
delete(id) {
|
|
49
|
+
const index = this.customThemes.findIndex((theme) => theme.id === id);
|
|
50
|
+
if (index === -1)
|
|
51
|
+
return false;
|
|
52
|
+
this.customThemes.splice(index, 1);
|
|
53
|
+
if (this.activeThemeId === id)
|
|
54
|
+
this.activeThemeId = DEFAULT_TERMINAL_THEME_ID;
|
|
55
|
+
this.persist();
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
// Set the active theme id. The route validates `id` against the built-ins +
|
|
59
|
+
// the stored custom themes before calling; the store trusts that and persists.
|
|
60
|
+
setActive(id) {
|
|
61
|
+
this.activeThemeId = id;
|
|
62
|
+
this.persist();
|
|
63
|
+
return id;
|
|
64
|
+
}
|
|
65
|
+
// One-time migration from the browser's legacy localStorage state. Only acts
|
|
66
|
+
// on a fresh (never-persisted) store so a later call from a second tab (or a
|
|
67
|
+
// re-opened browser) can't clobber state the CLI or another tab already wrote.
|
|
68
|
+
// Preserves the incoming custom theme ids so the active id still resolves.
|
|
69
|
+
// Returns true when it adopted the payload, false when the store was already
|
|
70
|
+
// initialized (the caller re-reads the current state either way).
|
|
71
|
+
migrate(activeThemeId, customThemes) {
|
|
72
|
+
if (this.initialized)
|
|
73
|
+
return false;
|
|
74
|
+
this.customThemes = customThemes.slice(0, MAX_CUSTOM_THEMES).map((theme) => ({
|
|
75
|
+
...theme,
|
|
76
|
+
colors: { ...theme.colors },
|
|
77
|
+
}));
|
|
78
|
+
this.activeThemeId = this.sanitizeActiveId(activeThemeId);
|
|
79
|
+
this.persist();
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
load() {
|
|
83
|
+
let raw;
|
|
84
|
+
try {
|
|
85
|
+
raw = fs.readFileSync(this.filePath, "utf8");
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
let json;
|
|
91
|
+
try {
|
|
92
|
+
json = JSON.parse(raw);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
console.warn(`themes file invalid; ignoring (${this.filePath})`);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const parsed = themesFileSchema.safeParse(json);
|
|
99
|
+
if (!parsed.success) {
|
|
100
|
+
console.warn(`themes file invalid; ignoring (${this.filePath})`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
this.customThemes = parsed.data.customThemes;
|
|
104
|
+
this.activeThemeId = this.sanitizeActiveId(parsed.data.activeThemeId);
|
|
105
|
+
this.initialized = true;
|
|
106
|
+
}
|
|
107
|
+
// An active id is valid if it's a built-in (incl. "auto") or one of the stored
|
|
108
|
+
// custom themes; otherwise the default. Called on load and after a delete
|
|
109
|
+
// that removed the active theme so the file never points at a missing theme.
|
|
110
|
+
sanitizeActiveId(id) {
|
|
111
|
+
if (isBuiltinThemeId(id) || this.customThemes.some((theme) => theme.id === id))
|
|
112
|
+
return id;
|
|
113
|
+
return DEFAULT_TERMINAL_THEME_ID;
|
|
114
|
+
}
|
|
115
|
+
persist() {
|
|
116
|
+
this.initialized = true;
|
|
117
|
+
fs.mkdirSync(path.dirname(this.filePath), { recursive: true });
|
|
118
|
+
const payload = {
|
|
119
|
+
version: THEMES_FILE_VERSION,
|
|
120
|
+
activeThemeId: this.activeThemeId,
|
|
121
|
+
customThemes: this.customThemes,
|
|
122
|
+
};
|
|
123
|
+
const tmpPath = `${this.filePath}.tmp`;
|
|
124
|
+
fs.writeFileSync(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, {
|
|
125
|
+
encoding: "utf8",
|
|
126
|
+
mode: 0o600,
|
|
127
|
+
});
|
|
128
|
+
fs.renameSync(tmpPath, this.filePath);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=theme-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-store.js","sourceRoot":"","sources":["../src/theme-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAEjB,MAAM,sBAAsB,CAAC;AAM9B,2EAA2E;AAC3E,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,OAAO,UAAU;IACb,aAAa,GAAW,yBAAyB,CAAC;IAClD,YAAY,GAAoB,EAAE,CAAC;IACnC,WAAW,GAAG,KAAK,CAAC;IACX,QAAQ,CAAS;IAElC,YAAY,OAA0B;QACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,iEAAiE;IACjE,2EAA2E;IAC3E,4EAA4E;IAC5E,iEAAiE;IACjE,aAAa;QACX,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,0EAA0E;IAC1E,GAAG,CAAC,KAAoB;QACtB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,IAAI,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAkB,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;QACxE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,aAAa,KAAK,EAAE;YAAE,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;QAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,+EAA+E;IAC/E,SAAS,CAAC,EAAU;QAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6EAA6E;IAC7E,6EAA6E;IAC7E,+EAA+E;IAC/E,2EAA2E;IAC3E,6EAA6E;IAC7E,kEAAkE;IAClE,OAAO,CAAC,aAAqB,EAAE,YAAsC;QACnE,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3E,GAAG,KAAK;YACR,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE;SAC5B,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,IAAI;QACV,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,YAA+B,CAAC;QAChE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,+EAA+E;IAC/E,0EAA0E;IAC1E,6EAA6E;IACrE,gBAAgB,CAAC,EAAU;QACjC,IAAI,gBAAgB,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1F,OAAO,yBAAyB,CAAC;IACnC,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,mBAAmB;YAC5B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACjE,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { z } from "zod";
|
|
2
|
-
import type { automationLastRunSchema, automationLastRunStatusSchema, automationLifecycleSchema, automationRunLimitSchema, automationRunRecordSchema, automationRunStatusSchema, automationRunnerSchema, automationScheduleSchema, automationSchema, automationSessionEventSchema, automationTriggerSchema, automationV1Schema, automationV2Schema, automationV3Schema, automationWithNextRunSchema, agentHarnessSchema, agentLogEntrySchema, agentModelInfoSchema, agentSkillInfoSchema, agentSessionEntrySchema, caffeinateModeSchema, cdpHealthSchema, cdpConnectResultSchema, clientToServerMessageSchema, createAutomationInputSchema, daemonConfigSchema, updateDaemonConfigInputSchema, gitBaseSourceSchema, gitBranchInfoSchema, gitBranchPrLeaseSchema, gitBranchPrMergeableSchema, gitBranchPrSchema, gitBranchPrStateSchema, gitDiffFileListResponseSchema, gitDiffFileMetaSchema, gitDiffFilePatchSchema, gitDiffFileSchema, gitDiffFileStatusSchema, gitDiffModeSchema, gitDiffResponseSchema, gitDiffSummarySchema, gitWorktreeListResponseSchema, gitWorktreeResultSchema, gitWorktreeSchema, gitWorktreeBaseRefSchema, listeningPortSchema, listeningPortsResponseSchema, createWorktreeInputSchema, worktreeOpenInCommandSchema, worktreeRepoConfigFileSchema, worktreeRepoConfigSchema, updateWorktreeConfigInputSchema, worktreeIncludeFileInputSchema, worktreeIncludeFileSchema, worktreeSweepResultSchema, launchInputSchema, resetAutomationInputSchema, runnerInputSchema, serverToClientMessageSchema, sessionListItemSchema, sessionsListResponseSchema, sessionActivityStateSchema, createSessionInputSchema, sessionResponseSchema, updateSessionInputSchema, sessionInputSchema, sessionResizeSchema, execInputSchema, execOneShotInputSchema, execResultSchema, capturePaneResponseSchema, triggerInputSchema, updateAutomationInputSchema, secretEntrySchema, secretEntryResponseSchema, secretsListResponseSchema, secretSetInputSchema, processSchema, processSetInputSchema, processesListResponseSchema } from "./schemas.js";
|
|
2
|
+
import type { automationLastRunSchema, automationLastRunStatusSchema, automationLifecycleSchema, automationRunLimitSchema, automationRunRecordSchema, automationRunStatusSchema, automationRunnerSchema, automationScheduleSchema, automationSchema, automationSessionEventSchema, automationTriggerSchema, automationV1Schema, automationV2Schema, automationV3Schema, automationWithNextRunSchema, agentHarnessSchema, agentLogEntrySchema, agentModelInfoSchema, agentSkillInfoSchema, agentSessionEntrySchema, caffeinateModeSchema, cdpHealthSchema, cdpConnectResultSchema, clientToServerMessageSchema, createAutomationInputSchema, daemonConfigSchema, updateDaemonConfigInputSchema, gitBaseSourceSchema, gitBranchInfoSchema, gitBranchPrLeaseSchema, gitBranchPrMergeableSchema, gitBranchPrSchema, gitBranchPrStateSchema, gitDiffFileListResponseSchema, gitDiffFileMetaSchema, gitDiffFilePatchSchema, gitDiffFileSchema, gitDiffFileStatusSchema, gitDiffModeSchema, gitDiffResponseSchema, gitDiffSummarySchema, gitWorktreeListResponseSchema, gitWorktreeResultSchema, gitWorktreeSchema, gitWorktreeBaseRefSchema, listeningPortSchema, listeningPortsResponseSchema, createWorktreeInputSchema, worktreeOpenInCommandSchema, worktreeRepoConfigFileSchema, worktreeRepoConfigSchema, updateWorktreeConfigInputSchema, worktreeIncludeFileInputSchema, worktreeIncludeFileSchema, worktreeSweepResultSchema, launchInputSchema, resetAutomationInputSchema, runnerInputSchema, serverToClientMessageSchema, sessionListItemSchema, sessionsListResponseSchema, sessionActivityStateSchema, createSessionInputSchema, sessionResponseSchema, updateSessionInputSchema, sessionInputSchema, sessionResizeSchema, execInputSchema, execOneShotInputSchema, execResultSchema, capturePaneResponseSchema, triggerInputSchema, updateAutomationInputSchema, secretEntrySchema, secretEntryResponseSchema, secretsListResponseSchema, secretSetInputSchema, processSchema, processSetInputSchema, processesListResponseSchema, storedThemeSchema, themesResponseSchema, themeResponseSchema, importThemeInputSchema, setActiveThemeInputSchema, migrateThemesInputSchema } from "./schemas.js";
|
|
3
3
|
export interface SpawnPtyInput {
|
|
4
4
|
cols?: number;
|
|
5
5
|
rows?: number;
|
|
@@ -31,6 +31,12 @@ export type SecretSetInput = z.infer<typeof secretSetInputSchema>;
|
|
|
31
31
|
export type Process = z.infer<typeof processSchema>;
|
|
32
32
|
export type ProcessSetInput = z.infer<typeof processSetInputSchema>;
|
|
33
33
|
export type ProcessesListResponse = z.infer<typeof processesListResponseSchema>;
|
|
34
|
+
export type StoredTheme = z.infer<typeof storedThemeSchema>;
|
|
35
|
+
export type ThemesResponse = z.infer<typeof themesResponseSchema>;
|
|
36
|
+
export type ThemeResponse = z.infer<typeof themeResponseSchema>;
|
|
37
|
+
export type ImportThemeInput = z.infer<typeof importThemeInputSchema>;
|
|
38
|
+
export type SetActiveThemeInput = z.infer<typeof setActiveThemeInputSchema>;
|
|
39
|
+
export type MigrateThemesInput = z.infer<typeof migrateThemesInputSchema>;
|
|
34
40
|
export type AutomationLastRunStatus = z.infer<typeof automationLastRunStatusSchema>;
|
|
35
41
|
export type AutomationLastRun = z.infer<typeof automationLastRunSchema>;
|
|
36
42
|
export type AutomationRunner = z.infer<typeof automationRunnerSchema>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EACV,uBAAuB,EACvB,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,kBAAkB,EAClB,6BAA6B,EAC7B,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,4BAA4B,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,EAC1B,iBAAiB,EACjB,2BAA2B,EAC3B,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,EACzB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@monotykamary/localterm-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.45.0",
|
|
4
4
|
"description": "PTY-backed HTTP/WebSocket server that powers localterm, built on Hono + node-pty.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hono",
|
|
@@ -48,6 +48,10 @@
|
|
|
48
48
|
"./completion": {
|
|
49
49
|
"types": "./dist/completion/index.d.ts",
|
|
50
50
|
"import": "./dist/completion/index.js"
|
|
51
|
+
},
|
|
52
|
+
"./themes": {
|
|
53
|
+
"types": "./dist/terminal-themes.d.ts",
|
|
54
|
+
"import": "./dist/terminal-themes.js"
|
|
51
55
|
}
|
|
52
56
|
},
|
|
53
57
|
"publishConfig": {
|
|
@@ -82,7 +86,9 @@
|
|
|
82
86
|
"scripts": {
|
|
83
87
|
"build": "tsc -p tsconfig.build.json",
|
|
84
88
|
"dev": "tsc -p tsconfig.build.json --watch",
|
|
85
|
-
"test": "vp test --run",
|
|
89
|
+
"test": "vp test --run --tagsFilter '!integration && !e2e'",
|
|
90
|
+
"test:integration": "vp test --run --tagsFilter integration",
|
|
91
|
+
"test:e2e": "LOCALTERM_E2E_BROWSER=1 vp test --run --tagsFilter e2e",
|
|
86
92
|
"typecheck": "tsc -p tsconfig.build.json --noEmit"
|
|
87
93
|
}
|
|
88
94
|
}
|