@kroy665/code-editor-engine 1.0.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/README.md +127 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/__tests__/editor.spec.d.ts +2 -0
- package/dist/__tests__/editor.spec.d.ts.map +1 -0
- package/dist/__tests__/editor.spec.js +141 -0
- package/dist/__tests__/editor.spec.js.map +1 -0
- package/dist/core/CodeEditor.d.ts +70 -0
- package/dist/core/CodeEditor.d.ts.map +1 -0
- package/dist/core/CodeEditor.js +392 -0
- package/dist/core/CodeEditor.js.map +1 -0
- package/dist/core/CommandSystem.d.ts +158 -0
- package/dist/core/CommandSystem.d.ts.map +1 -0
- package/dist/core/CommandSystem.js +358 -0
- package/dist/core/CommandSystem.js.map +1 -0
- package/dist/core/EventSystem.d.ts +87 -0
- package/dist/core/EventSystem.d.ts.map +1 -0
- package/dist/core/EventSystem.js +330 -0
- package/dist/core/EventSystem.js.map +1 -0
- package/dist/core/TextDocument.d.ts +110 -0
- package/dist/core/TextDocument.d.ts.map +1 -0
- package/dist/core/TextDocument.js +340 -0
- package/dist/core/TextDocument.js.map +1 -0
- package/dist/index.d.ts +178 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +302 -0
- package/dist/index.js.map +1 -0
- package/dist/language/Extensions.d.ts +280 -0
- package/dist/language/Extensions.d.ts.map +1 -0
- package/dist/language/Extensions.js +368 -0
- package/dist/language/Extensions.js.map +1 -0
- package/dist/language/Tokenizer.d.ts +108 -0
- package/dist/language/Tokenizer.d.ts.map +1 -0
- package/dist/language/Tokenizer.js +630 -0
- package/dist/language/Tokenizer.js.map +1 -0
- package/dist/types/core.d.ts +355 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +93 -0
- package/dist/types/core.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditorBuilder = exports.CodeEditorEngine = void 0;
|
|
4
|
+
exports.createCodeEditor = createCodeEditor;
|
|
5
|
+
exports.editor = editor;
|
|
6
|
+
const TextDocument_1 = require("./TextDocument");
|
|
7
|
+
const EventSystem_1 = require("./EventSystem");
|
|
8
|
+
const CommandSystem_1 = require("./CommandSystem");
|
|
9
|
+
/**
|
|
10
|
+
* Default editor options
|
|
11
|
+
*/
|
|
12
|
+
const DEFAULT_OPTIONS = {
|
|
13
|
+
tabSize: 4,
|
|
14
|
+
insertSpaces: true,
|
|
15
|
+
autoIndent: true,
|
|
16
|
+
wordWrap: false,
|
|
17
|
+
lineNumbers: true,
|
|
18
|
+
readOnly: false,
|
|
19
|
+
undoStackSize: 1000,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Main code editor engine implementation
|
|
23
|
+
*/
|
|
24
|
+
class CodeEditorEngine extends EventSystem_1.TypedEventEmitter {
|
|
25
|
+
constructor(options = {}) {
|
|
26
|
+
super();
|
|
27
|
+
this._document = null;
|
|
28
|
+
this._selections = [
|
|
29
|
+
{
|
|
30
|
+
start: { line: 0, column: 0 },
|
|
31
|
+
end: { line: 0, column: 0 },
|
|
32
|
+
anchor: { line: 0, column: 0 },
|
|
33
|
+
active: { line: 0, column: 0 },
|
|
34
|
+
isReversed: false,
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
this._options = { ...DEFAULT_OPTIONS };
|
|
38
|
+
this.commandRegistry = new CommandSystem_1.CommandRegistry();
|
|
39
|
+
this.commandHistory = new CommandSystem_1.CommandHistory(this._options.undoStackSize);
|
|
40
|
+
this.languageServices = new Map();
|
|
41
|
+
this.disposables = new EventSystem_1.CompositeDisposable();
|
|
42
|
+
this.isDisposed = false;
|
|
43
|
+
this.updateOptions(options);
|
|
44
|
+
this.setupBuiltInCommands();
|
|
45
|
+
this.setupEventForwarding();
|
|
46
|
+
}
|
|
47
|
+
// ================================
|
|
48
|
+
// DOCUMENT MANAGEMENT
|
|
49
|
+
// ================================
|
|
50
|
+
get document() {
|
|
51
|
+
return this._document;
|
|
52
|
+
}
|
|
53
|
+
async openDocument(uri, content, languageId) {
|
|
54
|
+
this.ensureNotDisposed();
|
|
55
|
+
// Close existing document
|
|
56
|
+
if (this._document) {
|
|
57
|
+
this.closeDocument();
|
|
58
|
+
}
|
|
59
|
+
// Create new document
|
|
60
|
+
this._document = new TextDocument_1.TextDocumentImpl(uri, languageId, 1, content);
|
|
61
|
+
// Reset selections to start of document
|
|
62
|
+
this.setSelections([
|
|
63
|
+
{
|
|
64
|
+
start: { line: 0, column: 0 },
|
|
65
|
+
end: { line: 0, column: 0 },
|
|
66
|
+
anchor: { line: 0, column: 0 },
|
|
67
|
+
active: { line: 0, column: 0 },
|
|
68
|
+
isReversed: false,
|
|
69
|
+
},
|
|
70
|
+
]);
|
|
71
|
+
// Clear command history
|
|
72
|
+
this.commandHistory.clear();
|
|
73
|
+
this.emit('document-opened', { document: this._document });
|
|
74
|
+
}
|
|
75
|
+
closeDocument() {
|
|
76
|
+
if (this._document) {
|
|
77
|
+
const uri = this._document.uri;
|
|
78
|
+
this._document = null;
|
|
79
|
+
this.commandHistory.clear();
|
|
80
|
+
this.emit('document-closed', { uri });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async saveDocument() {
|
|
84
|
+
if (this._document) {
|
|
85
|
+
this.emit('document-saved', { document: this._document });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// ================================
|
|
89
|
+
// SELECTIONS AND CURSOR
|
|
90
|
+
// ================================
|
|
91
|
+
get selections() {
|
|
92
|
+
return [...this._selections];
|
|
93
|
+
}
|
|
94
|
+
setSelections(selections) {
|
|
95
|
+
this.ensureNotDisposed();
|
|
96
|
+
if (selections.length === 0) {
|
|
97
|
+
throw new Error('At least one selection is required');
|
|
98
|
+
}
|
|
99
|
+
// Validate selections
|
|
100
|
+
const validatedSelections = selections.map((selection) => this.validateSelection(selection));
|
|
101
|
+
this._selections = validatedSelections;
|
|
102
|
+
if (this._document) {
|
|
103
|
+
this.emit('selection-changed', {
|
|
104
|
+
selections: this._selections,
|
|
105
|
+
document: this._document,
|
|
106
|
+
});
|
|
107
|
+
// Emit cursor moved for primary selection
|
|
108
|
+
this.emit('cursor-moved', {
|
|
109
|
+
position: this._selections[0].active,
|
|
110
|
+
document: this._document,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
validateSelection(selection) {
|
|
115
|
+
if (!this._document) {
|
|
116
|
+
return selection;
|
|
117
|
+
}
|
|
118
|
+
const buffer = this._document.getBuffer();
|
|
119
|
+
const start = buffer.validatePosition(selection.start);
|
|
120
|
+
const end = buffer.validatePosition(selection.end);
|
|
121
|
+
const anchor = buffer.validatePosition(selection.anchor);
|
|
122
|
+
const active = buffer.validatePosition(selection.active);
|
|
123
|
+
return {
|
|
124
|
+
start,
|
|
125
|
+
end,
|
|
126
|
+
anchor,
|
|
127
|
+
active,
|
|
128
|
+
isReversed: this.isPositionBefore(active, anchor),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
isPositionBefore(a, b) {
|
|
132
|
+
return a.line < b.line || (a.line === b.line && a.column < b.column);
|
|
133
|
+
}
|
|
134
|
+
// ================================
|
|
135
|
+
// TEXT OPERATIONS
|
|
136
|
+
// ================================
|
|
137
|
+
async insertText(text, position) {
|
|
138
|
+
this.ensureNotDisposed();
|
|
139
|
+
this.ensureDocument();
|
|
140
|
+
const insertPosition = position || this._selections[0].active;
|
|
141
|
+
const context = this.createCommandContext();
|
|
142
|
+
const command = CommandSystem_1.BuiltInCommands.createInsertTextCommand(context, insertPosition, text);
|
|
143
|
+
this.executeUndoableCommand(command);
|
|
144
|
+
// Update selections
|
|
145
|
+
const newPosition = {
|
|
146
|
+
line: insertPosition.line + (text.split('\n').length - 1),
|
|
147
|
+
column: text.includes('\n')
|
|
148
|
+
? text.split('\n').pop().length
|
|
149
|
+
: insertPosition.column + text.length,
|
|
150
|
+
};
|
|
151
|
+
this.setSelections([
|
|
152
|
+
{
|
|
153
|
+
start: newPosition,
|
|
154
|
+
end: newPosition,
|
|
155
|
+
anchor: newPosition,
|
|
156
|
+
active: newPosition,
|
|
157
|
+
isReversed: false,
|
|
158
|
+
},
|
|
159
|
+
]);
|
|
160
|
+
}
|
|
161
|
+
async deleteText(range) {
|
|
162
|
+
this.ensureNotDisposed();
|
|
163
|
+
this.ensureDocument();
|
|
164
|
+
const context = this.createCommandContext();
|
|
165
|
+
const command = CommandSystem_1.BuiltInCommands.createDeleteTextCommand(context, range);
|
|
166
|
+
this.executeUndoableCommand(command);
|
|
167
|
+
// Update selections to the start of the deleted range
|
|
168
|
+
this.setSelections([
|
|
169
|
+
{
|
|
170
|
+
start: range.start,
|
|
171
|
+
end: range.start,
|
|
172
|
+
anchor: range.start,
|
|
173
|
+
active: range.start,
|
|
174
|
+
isReversed: false,
|
|
175
|
+
},
|
|
176
|
+
]);
|
|
177
|
+
}
|
|
178
|
+
async replaceText(range, text) {
|
|
179
|
+
this.ensureNotDisposed();
|
|
180
|
+
this.ensureDocument();
|
|
181
|
+
const context = this.createCommandContext();
|
|
182
|
+
const command = CommandSystem_1.BuiltInCommands.createReplaceTextCommand(context, range, text);
|
|
183
|
+
this.executeUndoableCommand(command);
|
|
184
|
+
// Update selections
|
|
185
|
+
const endPosition = {
|
|
186
|
+
line: range.start.line + (text.split('\n').length - 1),
|
|
187
|
+
column: text.includes('\n')
|
|
188
|
+
? text.split('\n').pop().length
|
|
189
|
+
: range.start.column + text.length,
|
|
190
|
+
};
|
|
191
|
+
this.setSelections([
|
|
192
|
+
{
|
|
193
|
+
start: endPosition,
|
|
194
|
+
end: endPosition,
|
|
195
|
+
anchor: endPosition,
|
|
196
|
+
active: endPosition,
|
|
197
|
+
isReversed: false,
|
|
198
|
+
},
|
|
199
|
+
]);
|
|
200
|
+
}
|
|
201
|
+
// ================================
|
|
202
|
+
// COMMAND SYSTEM
|
|
203
|
+
// ================================
|
|
204
|
+
async executeCommand(commandId, ...args) {
|
|
205
|
+
this.ensureNotDisposed();
|
|
206
|
+
return await this.commandRegistry.execute(commandId, ...args);
|
|
207
|
+
}
|
|
208
|
+
registerCommand(command) {
|
|
209
|
+
this.ensureNotDisposed();
|
|
210
|
+
const disposable = this.commandRegistry.register(command);
|
|
211
|
+
this.disposables.add(disposable);
|
|
212
|
+
return disposable;
|
|
213
|
+
}
|
|
214
|
+
executeUndoableCommand(command) {
|
|
215
|
+
this.commandHistory.execute(command);
|
|
216
|
+
this.emitTextChanged();
|
|
217
|
+
}
|
|
218
|
+
createCommandContext() {
|
|
219
|
+
this.ensureDocument();
|
|
220
|
+
return {
|
|
221
|
+
editor: this,
|
|
222
|
+
document: this._document,
|
|
223
|
+
selections: this._selections,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
// ================================
|
|
227
|
+
// HISTORY
|
|
228
|
+
// ================================
|
|
229
|
+
async undo() {
|
|
230
|
+
this.ensureNotDisposed();
|
|
231
|
+
if (this.commandHistory.undo()) {
|
|
232
|
+
this.emitTextChanged();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async redo() {
|
|
236
|
+
this.ensureNotDisposed();
|
|
237
|
+
if (this.commandHistory.redo()) {
|
|
238
|
+
this.emitTextChanged();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
canUndo() {
|
|
242
|
+
return this.commandHistory.canUndo();
|
|
243
|
+
}
|
|
244
|
+
canRedo() {
|
|
245
|
+
return this.commandHistory.canRedo();
|
|
246
|
+
}
|
|
247
|
+
// ================================
|
|
248
|
+
// LANGUAGE SERVICES
|
|
249
|
+
// ================================
|
|
250
|
+
registerLanguageService(service) {
|
|
251
|
+
this.ensureNotDisposed();
|
|
252
|
+
if (this.languageServices.has(service.languageId)) {
|
|
253
|
+
throw new Error(`Language service for '${service.languageId}' is already registered`);
|
|
254
|
+
}
|
|
255
|
+
this.languageServices.set(service.languageId, service);
|
|
256
|
+
const disposable = new EventSystem_1.DisposableImpl(() => {
|
|
257
|
+
this.languageServices.delete(service.languageId);
|
|
258
|
+
});
|
|
259
|
+
this.disposables.add(disposable);
|
|
260
|
+
return disposable;
|
|
261
|
+
}
|
|
262
|
+
getLanguageService(languageId) {
|
|
263
|
+
return this.languageServices.get(languageId) || null;
|
|
264
|
+
}
|
|
265
|
+
// ================================
|
|
266
|
+
// CONFIGURATION
|
|
267
|
+
// ================================
|
|
268
|
+
updateOptions(options) {
|
|
269
|
+
this._options = { ...this._options, ...options };
|
|
270
|
+
// Update command history size if changed
|
|
271
|
+
if (options.undoStackSize !== undefined) {
|
|
272
|
+
// Note: CommandHistory doesn't have a resize method in this implementation
|
|
273
|
+
// In a production version, you'd want to implement this
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
getOptions() {
|
|
277
|
+
return { ...this._options };
|
|
278
|
+
}
|
|
279
|
+
// ================================
|
|
280
|
+
// UTILITY METHODS
|
|
281
|
+
// ================================
|
|
282
|
+
setupBuiltInCommands() {
|
|
283
|
+
// Register built-in command handlers
|
|
284
|
+
this.disposables.add(this.commandRegistry.registerHandler('editor.undo', () => this.undo()));
|
|
285
|
+
this.disposables.add(this.commandRegistry.registerHandler('editor.redo', () => this.redo()));
|
|
286
|
+
this.disposables.add(this.commandRegistry.registerHandler('editor.insertText', (text, position) => this.insertText(text, position)));
|
|
287
|
+
this.disposables.add(this.commandRegistry.registerHandler('editor.deleteText', (range) => this.deleteText(range)));
|
|
288
|
+
this.disposables.add(this.commandRegistry.registerHandler('editor.replaceText', (range, text) => this.replaceText(range, text)));
|
|
289
|
+
}
|
|
290
|
+
setupEventForwarding() {
|
|
291
|
+
// Forward command history events
|
|
292
|
+
this.disposables.add(this.commandHistory.on('command-undone', ({ command }) => {
|
|
293
|
+
this.emit('undo', { command });
|
|
294
|
+
}));
|
|
295
|
+
this.disposables.add(this.commandHistory.on('command-redone', ({ command }) => {
|
|
296
|
+
this.emit('redo', { command });
|
|
297
|
+
}));
|
|
298
|
+
}
|
|
299
|
+
emitTextChanged() {
|
|
300
|
+
if (this._document) {
|
|
301
|
+
this.emit('text-changed', {
|
|
302
|
+
changes: [], // TODO: Track actual changes
|
|
303
|
+
document: this._document,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
ensureNotDisposed() {
|
|
308
|
+
if (this.isDisposed) {
|
|
309
|
+
throw new Error('Editor has been disposed');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
ensureDocument() {
|
|
313
|
+
if (!this._document) {
|
|
314
|
+
throw new Error('No document is open');
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// ================================
|
|
318
|
+
// DISPOSAL
|
|
319
|
+
// ================================
|
|
320
|
+
dispose() {
|
|
321
|
+
if (!this.isDisposed) {
|
|
322
|
+
this.isDisposed = true;
|
|
323
|
+
this.closeDocument();
|
|
324
|
+
this.disposables.dispose();
|
|
325
|
+
super.dispose();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
get disposed() {
|
|
329
|
+
return this.isDisposed;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.CodeEditorEngine = CodeEditorEngine;
|
|
333
|
+
/**
|
|
334
|
+
* Factory function to create a new code editor instance
|
|
335
|
+
*/
|
|
336
|
+
function createCodeEditor(options = {}) {
|
|
337
|
+
return new CodeEditorEngine(options);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Editor builder for fluent configuration
|
|
341
|
+
*/
|
|
342
|
+
class EditorBuilder {
|
|
343
|
+
constructor() {
|
|
344
|
+
this.options = {};
|
|
345
|
+
this.languageServices = [];
|
|
346
|
+
this.commands = [];
|
|
347
|
+
}
|
|
348
|
+
withOptions(options) {
|
|
349
|
+
this.options = { ...this.options, ...options };
|
|
350
|
+
return this;
|
|
351
|
+
}
|
|
352
|
+
withLanguageService(service) {
|
|
353
|
+
this.languageServices.push(service);
|
|
354
|
+
return this;
|
|
355
|
+
}
|
|
356
|
+
withCommand(command) {
|
|
357
|
+
this.commands.push(command);
|
|
358
|
+
return this;
|
|
359
|
+
}
|
|
360
|
+
withTabSize(tabSize) {
|
|
361
|
+
this.options = { ...this.options, tabSize };
|
|
362
|
+
return this;
|
|
363
|
+
}
|
|
364
|
+
withSpaces(insertSpaces) {
|
|
365
|
+
this.options = { ...this.options, insertSpaces };
|
|
366
|
+
return this;
|
|
367
|
+
}
|
|
368
|
+
readOnly(readOnly = true) {
|
|
369
|
+
this.options = { ...this.options, readOnly };
|
|
370
|
+
return this;
|
|
371
|
+
}
|
|
372
|
+
build() {
|
|
373
|
+
const editor = new CodeEditorEngine(this.options);
|
|
374
|
+
// Register language services
|
|
375
|
+
for (const service of this.languageServices) {
|
|
376
|
+
editor.registerLanguageService(service);
|
|
377
|
+
}
|
|
378
|
+
// Register commands
|
|
379
|
+
for (const command of this.commands) {
|
|
380
|
+
editor.registerCommand(command);
|
|
381
|
+
}
|
|
382
|
+
return editor;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
exports.EditorBuilder = EditorBuilder;
|
|
386
|
+
/**
|
|
387
|
+
* Convenience function to create an editor builder
|
|
388
|
+
*/
|
|
389
|
+
function editor() {
|
|
390
|
+
return new EditorBuilder();
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=CodeEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeEditor.js","sourceRoot":"","sources":["../../src/core/CodeEditor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Command, CommandContext, Disposable, Position, Range } from '../types/core';
|
|
2
|
+
/**
|
|
3
|
+
* Base implementation for undoable commands
|
|
4
|
+
*/
|
|
5
|
+
export declare abstract class UndoableCommand implements Command {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly label: string;
|
|
8
|
+
protected executed: boolean;
|
|
9
|
+
protected undone: boolean;
|
|
10
|
+
constructor(id: string, label: string);
|
|
11
|
+
abstract execute(...args: any[]): Promise<any> | any;
|
|
12
|
+
abstract undo(): Promise<void> | void;
|
|
13
|
+
redo(): Promise<void> | void;
|
|
14
|
+
protected markExecuted(): void;
|
|
15
|
+
protected markUndone(): void;
|
|
16
|
+
get isExecuted(): boolean;
|
|
17
|
+
get isUndone(): boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Text editing command for insert, delete, and replace operations
|
|
21
|
+
*/
|
|
22
|
+
export declare class TextEditCommand extends UndoableCommand {
|
|
23
|
+
private readonly context;
|
|
24
|
+
private readonly range;
|
|
25
|
+
private readonly newText;
|
|
26
|
+
private previousText;
|
|
27
|
+
private actualRange;
|
|
28
|
+
constructor(context: CommandContext, range: Range, newText: string, label?: string);
|
|
29
|
+
execute(): void;
|
|
30
|
+
undo(): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Composite command for grouping multiple commands
|
|
34
|
+
*/
|
|
35
|
+
export declare class CompositeCommand extends UndoableCommand {
|
|
36
|
+
private commands;
|
|
37
|
+
constructor(id: string, label: string, commands?: UndoableCommand[]);
|
|
38
|
+
addCommand(command: UndoableCommand): void;
|
|
39
|
+
execute(): void;
|
|
40
|
+
undo(): void;
|
|
41
|
+
redo(): void;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Command registry for managing available commands
|
|
45
|
+
*/
|
|
46
|
+
export declare class CommandRegistry {
|
|
47
|
+
private commands;
|
|
48
|
+
private handlers;
|
|
49
|
+
/**
|
|
50
|
+
* Register a command
|
|
51
|
+
*/
|
|
52
|
+
register(command: Command): Disposable;
|
|
53
|
+
/**
|
|
54
|
+
* Register a command handler
|
|
55
|
+
*/
|
|
56
|
+
registerHandler(commandId: string, handler: (...args: any[]) => Promise<any> | any): Disposable;
|
|
57
|
+
/**
|
|
58
|
+
* Execute a command by ID
|
|
59
|
+
*/
|
|
60
|
+
execute(commandId: string, ...args: any[]): Promise<any>;
|
|
61
|
+
/**
|
|
62
|
+
* Get a command by ID
|
|
63
|
+
*/
|
|
64
|
+
get(commandId: string): Command | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Get all registered command IDs
|
|
67
|
+
*/
|
|
68
|
+
getCommandIds(): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Check if a command is registered
|
|
71
|
+
*/
|
|
72
|
+
has(commandId: string): boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Command history manager with undo/redo stack
|
|
76
|
+
*/
|
|
77
|
+
export declare class CommandHistory {
|
|
78
|
+
private undoStack;
|
|
79
|
+
private redoStack;
|
|
80
|
+
private maxStackSize;
|
|
81
|
+
private events;
|
|
82
|
+
constructor(maxStackSize?: number);
|
|
83
|
+
/**
|
|
84
|
+
* Execute and record a command
|
|
85
|
+
*/
|
|
86
|
+
execute(command: UndoableCommand): void;
|
|
87
|
+
/**
|
|
88
|
+
* Undo the last command
|
|
89
|
+
*/
|
|
90
|
+
undo(): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Redo the last undone command
|
|
93
|
+
*/
|
|
94
|
+
redo(): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Check if undo is possible
|
|
97
|
+
*/
|
|
98
|
+
canUndo(): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Check if redo is possible
|
|
101
|
+
*/
|
|
102
|
+
canRedo(): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Clear the history
|
|
105
|
+
*/
|
|
106
|
+
clear(): void;
|
|
107
|
+
/**
|
|
108
|
+
* Get the size of the undo stack
|
|
109
|
+
*/
|
|
110
|
+
get undoStackSize(): number;
|
|
111
|
+
/**
|
|
112
|
+
* Get the size of the redo stack
|
|
113
|
+
*/
|
|
114
|
+
get redoStackSize(): number;
|
|
115
|
+
/**
|
|
116
|
+
* Subscribe to history events
|
|
117
|
+
*/
|
|
118
|
+
on<K extends 'command-executed' | 'command-undone' | 'command-redone' | 'history-changed'>(event: K, listener: (data: any) => void): Disposable;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Smart command grouping for related operations
|
|
122
|
+
*/
|
|
123
|
+
export declare class CommandGrouper {
|
|
124
|
+
private currentGroup;
|
|
125
|
+
private groupTimeout;
|
|
126
|
+
private readonly groupingTimeoutMs;
|
|
127
|
+
constructor(groupingTimeoutMs?: number);
|
|
128
|
+
/**
|
|
129
|
+
* Start a new command group
|
|
130
|
+
*/
|
|
131
|
+
startGroup(id: string, label: string): void;
|
|
132
|
+
/**
|
|
133
|
+
* Add a command to the current group
|
|
134
|
+
*/
|
|
135
|
+
addToGroup(command: UndoableCommand): void;
|
|
136
|
+
/**
|
|
137
|
+
* End the current group
|
|
138
|
+
*/
|
|
139
|
+
endGroup(): CompositeCommand | null;
|
|
140
|
+
/**
|
|
141
|
+
* Get the current group
|
|
142
|
+
*/
|
|
143
|
+
getCurrentGroup(): CompositeCommand | null;
|
|
144
|
+
private resetGroupTimeout;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Built-in commands for common text operations
|
|
148
|
+
*/
|
|
149
|
+
export declare class BuiltInCommands {
|
|
150
|
+
static createInsertTextCommand(context: CommandContext, position: Position, text: string): TextEditCommand;
|
|
151
|
+
static createDeleteTextCommand(context: CommandContext, range: Range): TextEditCommand;
|
|
152
|
+
static createReplaceTextCommand(context: CommandContext, range: Range, newText: string): TextEditCommand;
|
|
153
|
+
static createMultiCursorEditCommand(context: CommandContext, edits: Array<{
|
|
154
|
+
range: Range;
|
|
155
|
+
text: string;
|
|
156
|
+
}>): CompositeCommand;
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=CommandSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandSystem.d.ts","sourceRoot":"","sources":["../../src/core/CommandSystem.ts"],"names":[],"mappings":"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"}
|