dmux 1.3.3 → 1.5.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/AutoUpdater.d.ts +35 -0
- package/dist/AutoUpdater.d.ts.map +1 -0
- package/dist/AutoUpdater.js +225 -0
- package/dist/AutoUpdater.js.map +1 -0
- package/dist/BetterTextInput.d.ts +10 -0
- package/dist/BetterTextInput.d.ts.map +1 -0
- package/dist/BetterTextInput.js +177 -0
- package/dist/BetterTextInput.js.map +1 -0
- package/dist/CleanTextInput.d.ts +10 -0
- package/dist/CleanTextInput.d.ts.map +1 -0
- package/dist/CleanTextInput.js +572 -0
- package/dist/CleanTextInput.js.map +1 -0
- package/dist/DmuxApp.d.ts +2 -0
- package/dist/DmuxApp.d.ts.map +1 -1
- package/dist/DmuxApp.js +330 -165
- package/dist/DmuxApp.js.map +1 -1
- package/dist/EnhancedTextInput.d.ts.map +1 -1
- package/dist/EnhancedTextInput.js +155 -50
- package/dist/EnhancedTextInput.js.map +1 -1
- package/dist/GeminiTextInput.d.ts +12 -0
- package/dist/GeminiTextInput.d.ts.map +1 -0
- package/dist/GeminiTextInput.js +210 -0
- package/dist/GeminiTextInput.js.map +1 -0
- package/dist/MultilineTextInput.d.ts +10 -0
- package/dist/MultilineTextInput.d.ts.map +1 -0
- package/dist/MultilineTextInput.js +184 -0
- package/dist/MultilineTextInput.js.map +1 -0
- package/dist/SimpleGeminiInput.d.ts +12 -0
- package/dist/SimpleGeminiInput.d.ts.map +1 -0
- package/dist/SimpleGeminiInput.js +223 -0
- package/dist/SimpleGeminiInput.js.map +1 -0
- package/dist/StyledTextInput.d.ts +10 -0
- package/dist/StyledTextInput.d.ts.map +1 -0
- package/dist/StyledTextInput.js +10 -0
- package/dist/StyledTextInput.js.map +1 -0
- package/dist/index.js +48 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { Box, Text, useInput, useFocus } from 'ink';
|
|
3
|
+
const SimpleGeminiInput = ({ value, onChange, onSubmit, onCancel, multiline = false, placeholder = '' }) => {
|
|
4
|
+
const { isFocused } = useFocus({ autoFocus: true });
|
|
5
|
+
const [cursorOffset, setCursorOffset] = useState(0);
|
|
6
|
+
// Keep cursor in bounds when value changes
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (cursorOffset > value.length) {
|
|
9
|
+
setCursorOffset(value.length);
|
|
10
|
+
}
|
|
11
|
+
}, [value, cursorOffset]);
|
|
12
|
+
useInput((input, key) => {
|
|
13
|
+
if (!isFocused)
|
|
14
|
+
return;
|
|
15
|
+
// Handle special keys
|
|
16
|
+
if (key.escape) {
|
|
17
|
+
onCancel?.();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (key.return && !multiline) {
|
|
21
|
+
onSubmit?.();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (key.return && multiline && !key.shift) {
|
|
25
|
+
// Add newline in multiline mode
|
|
26
|
+
const before = value.slice(0, cursorOffset);
|
|
27
|
+
const after = value.slice(cursorOffset);
|
|
28
|
+
onChange(before + '\n' + after);
|
|
29
|
+
setCursorOffset(cursorOffset + 1);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (key.return && multiline && key.shift) {
|
|
33
|
+
// Shift+Enter submits in multiline mode
|
|
34
|
+
onSubmit?.();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Handle backspace - delete character BEFORE cursor
|
|
38
|
+
if (key.backspace) {
|
|
39
|
+
if (cursorOffset > 0) {
|
|
40
|
+
const before = value.slice(0, cursorOffset - 1);
|
|
41
|
+
const after = value.slice(cursorOffset);
|
|
42
|
+
onChange(before + after);
|
|
43
|
+
setCursorOffset(cursorOffset - 1);
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Handle delete - delete character AT cursor
|
|
48
|
+
if (key.delete) {
|
|
49
|
+
if (cursorOffset < value.length) {
|
|
50
|
+
const before = value.slice(0, cursorOffset);
|
|
51
|
+
const after = value.slice(cursorOffset + 1);
|
|
52
|
+
onChange(before + after);
|
|
53
|
+
// Cursor stays in same position
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Handle arrow keys
|
|
58
|
+
if (key.leftArrow) {
|
|
59
|
+
if (cursorOffset > 0) {
|
|
60
|
+
setCursorOffset(cursorOffset - 1);
|
|
61
|
+
}
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (key.rightArrow) {
|
|
65
|
+
if (cursorOffset < value.length) {
|
|
66
|
+
setCursorOffset(cursorOffset + 1);
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// Handle up/down for multiline
|
|
71
|
+
if (multiline) {
|
|
72
|
+
const lines = value.split('\n');
|
|
73
|
+
let currentPos = 0;
|
|
74
|
+
let currentLine = 0;
|
|
75
|
+
let colInLine = 0;
|
|
76
|
+
// Find current line and column
|
|
77
|
+
for (let i = 0; i < lines.length; i++) {
|
|
78
|
+
const lineLength = lines[i].length;
|
|
79
|
+
if (currentPos + lineLength >= cursorOffset) {
|
|
80
|
+
currentLine = i;
|
|
81
|
+
colInLine = cursorOffset - currentPos;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
currentPos += lineLength + 1; // +1 for newline
|
|
85
|
+
}
|
|
86
|
+
if (key.upArrow) {
|
|
87
|
+
if (currentLine > 0) {
|
|
88
|
+
// Move to previous line, same column or end of line
|
|
89
|
+
const prevLine = lines[currentLine - 1];
|
|
90
|
+
const newCol = Math.min(colInLine, prevLine.length);
|
|
91
|
+
let newOffset = 0;
|
|
92
|
+
for (let i = 0; i < currentLine - 1; i++) {
|
|
93
|
+
newOffset += lines[i].length + 1;
|
|
94
|
+
}
|
|
95
|
+
newOffset += newCol;
|
|
96
|
+
setCursorOffset(newOffset);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// Already at first line, move to start
|
|
100
|
+
setCursorOffset(0);
|
|
101
|
+
}
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (key.downArrow) {
|
|
105
|
+
if (currentLine < lines.length - 1) {
|
|
106
|
+
// Move to next line, same column or end of line
|
|
107
|
+
const nextLine = lines[currentLine + 1];
|
|
108
|
+
const newCol = Math.min(colInLine, nextLine.length);
|
|
109
|
+
let newOffset = 0;
|
|
110
|
+
for (let i = 0; i <= currentLine; i++) {
|
|
111
|
+
newOffset += lines[i].length + 1;
|
|
112
|
+
}
|
|
113
|
+
newOffset += newCol;
|
|
114
|
+
setCursorOffset(newOffset);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Already at last line, move to end
|
|
118
|
+
setCursorOffset(value.length);
|
|
119
|
+
}
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Handle Home/End
|
|
124
|
+
if (key.ctrl && input === 'a') {
|
|
125
|
+
if (multiline) {
|
|
126
|
+
// Move to start of current line
|
|
127
|
+
const beforeCursor = value.slice(0, cursorOffset);
|
|
128
|
+
const lastNewline = beforeCursor.lastIndexOf('\n');
|
|
129
|
+
setCursorOffset(lastNewline === -1 ? 0 : lastNewline + 1);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
setCursorOffset(0);
|
|
133
|
+
}
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (key.ctrl && input === 'e') {
|
|
137
|
+
if (multiline) {
|
|
138
|
+
// Move to end of current line
|
|
139
|
+
const afterCursor = value.slice(cursorOffset);
|
|
140
|
+
const nextNewline = afterCursor.indexOf('\n');
|
|
141
|
+
if (nextNewline === -1) {
|
|
142
|
+
setCursorOffset(value.length);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
setCursorOffset(cursorOffset + nextNewline);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
setCursorOffset(value.length);
|
|
150
|
+
}
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
// Handle regular text input
|
|
154
|
+
if (input && !key.ctrl && !key.meta) {
|
|
155
|
+
const before = value.slice(0, cursorOffset);
|
|
156
|
+
const after = value.slice(cursorOffset);
|
|
157
|
+
onChange(before + input + after);
|
|
158
|
+
setCursorOffset(cursorOffset + input.length);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
// Render the display with cursor
|
|
162
|
+
const renderDisplay = () => {
|
|
163
|
+
// Show placeholder when empty
|
|
164
|
+
if (value === '' && placeholder) {
|
|
165
|
+
return (React.createElement(React.Fragment, null,
|
|
166
|
+
React.createElement(Text, { dimColor: true }, placeholder),
|
|
167
|
+
React.createElement(Text, { inverse: true }, ' ')));
|
|
168
|
+
}
|
|
169
|
+
// For multiline, split and render each line
|
|
170
|
+
if (multiline) {
|
|
171
|
+
const lines = value.split('\n');
|
|
172
|
+
let currentPos = 0;
|
|
173
|
+
const elements = [];
|
|
174
|
+
for (let i = 0; i < lines.length; i++) {
|
|
175
|
+
const line = lines[i];
|
|
176
|
+
const lineStart = currentPos;
|
|
177
|
+
const lineEnd = currentPos + line.length;
|
|
178
|
+
if (i > 0) {
|
|
179
|
+
elements.push(React.createElement(Text, { key: `indent-${i}` }, ' '));
|
|
180
|
+
}
|
|
181
|
+
if (cursorOffset >= lineStart && cursorOffset <= lineEnd) {
|
|
182
|
+
// This line contains the cursor
|
|
183
|
+
const posInLine = cursorOffset - lineStart;
|
|
184
|
+
const before = line.slice(0, posInLine);
|
|
185
|
+
const cursorChar = line[posInLine] || ' ';
|
|
186
|
+
const after = line.slice(posInLine + 1);
|
|
187
|
+
elements.push(React.createElement(React.Fragment, { key: `line-${i}` },
|
|
188
|
+
React.createElement(Text, null, before),
|
|
189
|
+
React.createElement(Text, { inverse: true }, cursorChar),
|
|
190
|
+
React.createElement(Text, null, after)));
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
// Normal line without cursor
|
|
194
|
+
elements.push(React.createElement(Text, { key: `line-${i}` }, line || ' '));
|
|
195
|
+
}
|
|
196
|
+
// Add newline representation except for last line
|
|
197
|
+
if (i < lines.length - 1) {
|
|
198
|
+
elements.push(React.createElement(Text, { key: `newline-${i}` }, '\n'));
|
|
199
|
+
}
|
|
200
|
+
currentPos = lineEnd + 1; // +1 for newline
|
|
201
|
+
}
|
|
202
|
+
// Handle cursor at very end after a newline
|
|
203
|
+
if (cursorOffset === value.length && value.endsWith('\n')) {
|
|
204
|
+
elements.push(React.createElement(Text, { key: "indent-end" }, ' '));
|
|
205
|
+
elements.push(React.createElement(Text, { key: "cursor-end", inverse: true }, ' '));
|
|
206
|
+
}
|
|
207
|
+
return React.createElement(React.Fragment, null, elements);
|
|
208
|
+
}
|
|
209
|
+
// Single line rendering
|
|
210
|
+
const before = value.slice(0, cursorOffset);
|
|
211
|
+
const cursorChar = value[cursorOffset] || ' ';
|
|
212
|
+
const after = value.slice(cursorOffset + 1);
|
|
213
|
+
return (React.createElement(React.Fragment, null,
|
|
214
|
+
React.createElement(Text, null, before),
|
|
215
|
+
React.createElement(Text, { inverse: true }, cursorChar),
|
|
216
|
+
React.createElement(Text, null, after)));
|
|
217
|
+
};
|
|
218
|
+
return (React.createElement(Box, null,
|
|
219
|
+
React.createElement(Text, null, '> '),
|
|
220
|
+
renderDisplay()));
|
|
221
|
+
};
|
|
222
|
+
export default SimpleGeminiInput;
|
|
223
|
+
//# sourceMappingURL=SimpleGeminiInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SimpleGeminiInput.js","sourceRoot":"","sources":["../src/SimpleGeminiInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface StyledTextInputProps {
|
|
3
|
+
value: string;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
onSubmit?: () => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
}
|
|
8
|
+
declare const StyledTextInput: React.FC<StyledTextInputProps>;
|
|
9
|
+
export default StyledTextInput;
|
|
10
|
+
//# sourceMappingURL=StyledTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyledTextInput.d.ts","sourceRoot":"","sources":["../src/StyledTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,oBAAoB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAkBnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import TextInput from 'ink-text-input';
|
|
4
|
+
const StyledTextInput = ({ value, onChange, onSubmit, placeholder = 'Type your message...' }) => {
|
|
5
|
+
return (React.createElement(Box, null,
|
|
6
|
+
React.createElement(Text, null, '> '),
|
|
7
|
+
React.createElement(TextInput, { value: value, onChange: onChange, onSubmit: onSubmit, placeholder: placeholder, showCursor: true })));
|
|
8
|
+
};
|
|
9
|
+
export default StyledTextInput;
|
|
10
|
+
//# sourceMappingURL=StyledTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyledTextInput.js","sourceRoot":"","sources":["../src/StyledTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AASvC,MAAM,eAAe,GAAmC,CAAC,EACvD,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAW,GAAG,sBAAsB,EACrC,EAAE,EAAE;IACH,OAAO,CACL,oBAAC,GAAG;QACF,oBAAC,IAAI,QAAE,IAAI,CAAQ;QACnB,oBAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,IAAI,GAChB,CACE,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { render } from 'ink';
|
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { createHash } from 'crypto';
|
|
9
9
|
import DmuxApp from './DmuxApp.js';
|
|
10
|
+
import { AutoUpdater } from './AutoUpdater.js';
|
|
10
11
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
12
|
class Dmux {
|
|
12
13
|
dmuxDir;
|
|
@@ -15,9 +16,11 @@ class Dmux {
|
|
|
15
16
|
projectName;
|
|
16
17
|
sessionName;
|
|
17
18
|
projectRoot;
|
|
19
|
+
autoUpdater;
|
|
20
|
+
static cachedProjectRoot = null;
|
|
18
21
|
constructor() {
|
|
19
22
|
this.dmuxDir = path.join(process.env.HOME, '.dmux');
|
|
20
|
-
// Get git root directory to determine project scope
|
|
23
|
+
// Get git root directory to determine project scope (cached)
|
|
21
24
|
this.projectRoot = this.getProjectRoot();
|
|
22
25
|
// Get project name from git root directory
|
|
23
26
|
this.projectName = path.basename(this.projectRoot);
|
|
@@ -33,12 +36,16 @@ class Dmux {
|
|
|
33
36
|
this.panesFile = path.join(this.dmuxDir, `${projectIdentifier}-panes.json`);
|
|
34
37
|
// Store project settings (test/dev commands) per project
|
|
35
38
|
this.settingsFile = path.join(this.dmuxDir, `${projectIdentifier}-settings.json`);
|
|
39
|
+
// Initialize auto-updater
|
|
40
|
+
this.autoUpdater = new AutoUpdater(this.dmuxDir);
|
|
36
41
|
}
|
|
37
42
|
async init() {
|
|
38
43
|
await fs.mkdir(this.dmuxDir, { recursive: true });
|
|
39
44
|
if (!await this.fileExists(this.panesFile)) {
|
|
40
45
|
await fs.writeFile(this.panesFile, '[]');
|
|
41
46
|
}
|
|
47
|
+
// Check for updates in background if needed
|
|
48
|
+
this.checkForUpdatesBackground();
|
|
42
49
|
const inTmux = process.env.TMUX !== undefined;
|
|
43
50
|
if (!inTmux) {
|
|
44
51
|
// Check if project-specific session already exists
|
|
@@ -81,7 +88,8 @@ class Dmux {
|
|
|
81
88
|
settingsFile: this.settingsFile,
|
|
82
89
|
projectName: this.projectName,
|
|
83
90
|
sessionName: this.sessionName,
|
|
84
|
-
projectRoot: this.projectRoot
|
|
91
|
+
projectRoot: this.projectRoot,
|
|
92
|
+
autoUpdater: this.autoUpdater
|
|
85
93
|
}));
|
|
86
94
|
}
|
|
87
95
|
async fileExists(path) {
|
|
@@ -94,19 +102,56 @@ class Dmux {
|
|
|
94
102
|
}
|
|
95
103
|
}
|
|
96
104
|
getProjectRoot() {
|
|
105
|
+
// Return cached value if available
|
|
106
|
+
if (Dmux.cachedProjectRoot) {
|
|
107
|
+
return Dmux.cachedProjectRoot;
|
|
108
|
+
}
|
|
97
109
|
try {
|
|
98
110
|
// Try to get git root directory
|
|
99
111
|
const gitRoot = execSync('git rev-parse --show-toplevel', {
|
|
100
112
|
encoding: 'utf-8',
|
|
101
113
|
stdio: 'pipe'
|
|
102
114
|
}).trim();
|
|
115
|
+
Dmux.cachedProjectRoot = gitRoot;
|
|
103
116
|
return gitRoot;
|
|
104
117
|
}
|
|
105
118
|
catch {
|
|
106
119
|
// Fallback to current directory if not in a git repo
|
|
107
|
-
|
|
120
|
+
const cwd = process.cwd();
|
|
121
|
+
Dmux.cachedProjectRoot = cwd;
|
|
122
|
+
return cwd;
|
|
108
123
|
}
|
|
109
124
|
}
|
|
125
|
+
checkForUpdatesBackground() {
|
|
126
|
+
// Run update check in background without blocking startup
|
|
127
|
+
setImmediate(async () => {
|
|
128
|
+
try {
|
|
129
|
+
const shouldCheck = await this.autoUpdater.shouldCheckForUpdates();
|
|
130
|
+
if (shouldCheck) {
|
|
131
|
+
// Check for updates asynchronously
|
|
132
|
+
this.autoUpdater.checkForUpdates().catch(() => {
|
|
133
|
+
// Silently ignore update check failures
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// Silently ignore errors in background update check
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
async getUpdateInfo() {
|
|
143
|
+
return await this.autoUpdater.checkForUpdates();
|
|
144
|
+
}
|
|
145
|
+
async performUpdate() {
|
|
146
|
+
const updateInfo = await this.autoUpdater.checkForUpdates();
|
|
147
|
+
return await this.autoUpdater.performUpdate(updateInfo);
|
|
148
|
+
}
|
|
149
|
+
async skipUpdate(version) {
|
|
150
|
+
return await this.autoUpdater.skipVersion(version);
|
|
151
|
+
}
|
|
152
|
+
getAutoUpdater() {
|
|
153
|
+
return this.autoUpdater;
|
|
154
|
+
}
|
|
110
155
|
}
|
|
111
156
|
const dmux = new Dmux();
|
|
112
157
|
dmux.init().catch(() => process.exit(1));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,OAAO,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|