@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,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BuiltInCommands = exports.CommandGrouper = exports.CommandHistory = exports.CommandRegistry = exports.CompositeCommand = exports.TextEditCommand = exports.UndoableCommand = void 0;
|
|
4
|
+
const EventSystem_1 = require("./EventSystem");
|
|
5
|
+
/**
|
|
6
|
+
* Base implementation for undoable commands
|
|
7
|
+
*/
|
|
8
|
+
class UndoableCommand {
|
|
9
|
+
constructor(id, label) {
|
|
10
|
+
this.executed = false;
|
|
11
|
+
this.undone = false;
|
|
12
|
+
this.id = id;
|
|
13
|
+
this.label = label;
|
|
14
|
+
}
|
|
15
|
+
redo() {
|
|
16
|
+
if (this.undone) {
|
|
17
|
+
this.undone = false;
|
|
18
|
+
this.executed = true;
|
|
19
|
+
return this.execute();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
markExecuted() {
|
|
23
|
+
this.executed = true;
|
|
24
|
+
this.undone = false;
|
|
25
|
+
}
|
|
26
|
+
markUndone() {
|
|
27
|
+
this.executed = false;
|
|
28
|
+
this.undone = true;
|
|
29
|
+
}
|
|
30
|
+
get isExecuted() {
|
|
31
|
+
return this.executed;
|
|
32
|
+
}
|
|
33
|
+
get isUndone() {
|
|
34
|
+
return this.undone;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.UndoableCommand = UndoableCommand;
|
|
38
|
+
/**
|
|
39
|
+
* Text editing command for insert, delete, and replace operations
|
|
40
|
+
*/
|
|
41
|
+
class TextEditCommand extends UndoableCommand {
|
|
42
|
+
constructor(context, range, newText, label) {
|
|
43
|
+
super('text.edit', label || 'Edit Text');
|
|
44
|
+
this.context = context;
|
|
45
|
+
this.range = range;
|
|
46
|
+
this.newText = newText;
|
|
47
|
+
this.previousText = '';
|
|
48
|
+
this.actualRange = range;
|
|
49
|
+
}
|
|
50
|
+
execute() {
|
|
51
|
+
const document = this.context.document;
|
|
52
|
+
const buffer = document.getBuffer();
|
|
53
|
+
// Store the text that will be replaced for undo
|
|
54
|
+
this.previousText = buffer.getTextRange(this.range);
|
|
55
|
+
// Perform the edit
|
|
56
|
+
this.actualRange = buffer.replaceText(this.range, this.newText);
|
|
57
|
+
this.markExecuted();
|
|
58
|
+
}
|
|
59
|
+
undo() {
|
|
60
|
+
if (!this.executed)
|
|
61
|
+
return;
|
|
62
|
+
const document = this.context.document;
|
|
63
|
+
const buffer = document.getBuffer();
|
|
64
|
+
// Restore the previous text
|
|
65
|
+
buffer.replaceText(this.actualRange, this.previousText);
|
|
66
|
+
this.markUndone();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.TextEditCommand = TextEditCommand;
|
|
70
|
+
/**
|
|
71
|
+
* Composite command for grouping multiple commands
|
|
72
|
+
*/
|
|
73
|
+
class CompositeCommand extends UndoableCommand {
|
|
74
|
+
constructor(id, label, commands = []) {
|
|
75
|
+
super(id, label);
|
|
76
|
+
this.commands = [];
|
|
77
|
+
this.commands = [...commands];
|
|
78
|
+
}
|
|
79
|
+
addCommand(command) {
|
|
80
|
+
if (this.executed) {
|
|
81
|
+
throw new Error('Cannot add commands to an already executed composite command');
|
|
82
|
+
}
|
|
83
|
+
this.commands.push(command);
|
|
84
|
+
}
|
|
85
|
+
execute() {
|
|
86
|
+
for (const command of this.commands) {
|
|
87
|
+
command.execute();
|
|
88
|
+
}
|
|
89
|
+
this.markExecuted();
|
|
90
|
+
}
|
|
91
|
+
undo() {
|
|
92
|
+
if (!this.executed)
|
|
93
|
+
return;
|
|
94
|
+
// Undo in reverse order
|
|
95
|
+
for (let i = this.commands.length - 1; i >= 0; i--) {
|
|
96
|
+
this.commands[i].undo();
|
|
97
|
+
}
|
|
98
|
+
this.markUndone();
|
|
99
|
+
}
|
|
100
|
+
redo() {
|
|
101
|
+
if (!this.undone)
|
|
102
|
+
return;
|
|
103
|
+
for (const command of this.commands) {
|
|
104
|
+
command.redo();
|
|
105
|
+
}
|
|
106
|
+
this.markExecuted();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.CompositeCommand = CompositeCommand;
|
|
110
|
+
/**
|
|
111
|
+
* Command registry for managing available commands
|
|
112
|
+
*/
|
|
113
|
+
class CommandRegistry {
|
|
114
|
+
constructor() {
|
|
115
|
+
this.commands = new Map();
|
|
116
|
+
this.handlers = new Map();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Register a command
|
|
120
|
+
*/
|
|
121
|
+
register(command) {
|
|
122
|
+
if (this.commands.has(command.id)) {
|
|
123
|
+
throw new Error(`Command with id '${command.id}' is already registered`);
|
|
124
|
+
}
|
|
125
|
+
this.commands.set(command.id, command);
|
|
126
|
+
return new EventSystem_1.DisposableImpl(() => {
|
|
127
|
+
this.commands.delete(command.id);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Register a command handler
|
|
132
|
+
*/
|
|
133
|
+
registerHandler(commandId, handler) {
|
|
134
|
+
if (this.handlers.has(commandId)) {
|
|
135
|
+
throw new Error(`Handler for command '${commandId}' is already registered`);
|
|
136
|
+
}
|
|
137
|
+
this.handlers.set(commandId, handler);
|
|
138
|
+
return new EventSystem_1.DisposableImpl(() => {
|
|
139
|
+
this.handlers.delete(commandId);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Execute a command by ID
|
|
144
|
+
*/
|
|
145
|
+
async execute(commandId, ...args) {
|
|
146
|
+
// Try handler first
|
|
147
|
+
const handler = this.handlers.get(commandId);
|
|
148
|
+
if (handler) {
|
|
149
|
+
return await handler(...args);
|
|
150
|
+
}
|
|
151
|
+
// Try registered command
|
|
152
|
+
const command = this.commands.get(commandId);
|
|
153
|
+
if (command) {
|
|
154
|
+
return await command.execute(...args);
|
|
155
|
+
}
|
|
156
|
+
throw new Error(`Command '${commandId}' not found`);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get a command by ID
|
|
160
|
+
*/
|
|
161
|
+
get(commandId) {
|
|
162
|
+
return this.commands.get(commandId);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Get all registered command IDs
|
|
166
|
+
*/
|
|
167
|
+
getCommandIds() {
|
|
168
|
+
return Array.from(this.commands.keys());
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check if a command is registered
|
|
172
|
+
*/
|
|
173
|
+
has(commandId) {
|
|
174
|
+
return this.commands.has(commandId) || this.handlers.has(commandId);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.CommandRegistry = CommandRegistry;
|
|
178
|
+
/**
|
|
179
|
+
* Command history manager with undo/redo stack
|
|
180
|
+
*/
|
|
181
|
+
class CommandHistory {
|
|
182
|
+
constructor(maxStackSize = 1000) {
|
|
183
|
+
this.undoStack = [];
|
|
184
|
+
this.redoStack = [];
|
|
185
|
+
this.events = new EventSystem_1.TypedEventEmitter();
|
|
186
|
+
this.maxStackSize = maxStackSize;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Execute and record a command
|
|
190
|
+
*/
|
|
191
|
+
execute(command) {
|
|
192
|
+
// Execute the command
|
|
193
|
+
command.execute();
|
|
194
|
+
// Add to undo stack
|
|
195
|
+
this.undoStack.push(command);
|
|
196
|
+
// Clear redo stack
|
|
197
|
+
this.redoStack.length = 0;
|
|
198
|
+
// Trim stack if too large
|
|
199
|
+
if (this.undoStack.length > this.maxStackSize) {
|
|
200
|
+
this.undoStack.shift();
|
|
201
|
+
}
|
|
202
|
+
this.events.emit('command-executed', { command });
|
|
203
|
+
this.events.emit('history-changed', {
|
|
204
|
+
canUndo: this.canUndo(),
|
|
205
|
+
canRedo: this.canRedo(),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Undo the last command
|
|
210
|
+
*/
|
|
211
|
+
undo() {
|
|
212
|
+
if (!this.canUndo()) {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
const command = this.undoStack.pop();
|
|
216
|
+
command.undo();
|
|
217
|
+
this.redoStack.push(command);
|
|
218
|
+
this.events.emit('command-undone', { command });
|
|
219
|
+
this.events.emit('history-changed', {
|
|
220
|
+
canUndo: this.canUndo(),
|
|
221
|
+
canRedo: this.canRedo(),
|
|
222
|
+
});
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Redo the last undone command
|
|
227
|
+
*/
|
|
228
|
+
redo() {
|
|
229
|
+
if (!this.canRedo()) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
const command = this.redoStack.pop();
|
|
233
|
+
command.redo();
|
|
234
|
+
this.undoStack.push(command);
|
|
235
|
+
this.events.emit('command-redone', { command });
|
|
236
|
+
this.events.emit('history-changed', {
|
|
237
|
+
canUndo: this.canUndo(),
|
|
238
|
+
canRedo: this.canRedo(),
|
|
239
|
+
});
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Check if undo is possible
|
|
244
|
+
*/
|
|
245
|
+
canUndo() {
|
|
246
|
+
return this.undoStack.length > 0;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if redo is possible
|
|
250
|
+
*/
|
|
251
|
+
canRedo() {
|
|
252
|
+
return this.redoStack.length > 0;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Clear the history
|
|
256
|
+
*/
|
|
257
|
+
clear() {
|
|
258
|
+
this.undoStack.length = 0;
|
|
259
|
+
this.redoStack.length = 0;
|
|
260
|
+
this.events.emit('history-changed', {
|
|
261
|
+
canUndo: false,
|
|
262
|
+
canRedo: false,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get the size of the undo stack
|
|
267
|
+
*/
|
|
268
|
+
get undoStackSize() {
|
|
269
|
+
return this.undoStack.length;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Get the size of the redo stack
|
|
273
|
+
*/
|
|
274
|
+
get redoStackSize() {
|
|
275
|
+
return this.redoStack.length;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Subscribe to history events
|
|
279
|
+
*/
|
|
280
|
+
on(event, listener) {
|
|
281
|
+
return this.events.on(event, listener);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
exports.CommandHistory = CommandHistory;
|
|
285
|
+
/**
|
|
286
|
+
* Smart command grouping for related operations
|
|
287
|
+
*/
|
|
288
|
+
class CommandGrouper {
|
|
289
|
+
constructor(groupingTimeoutMs = 300) {
|
|
290
|
+
this.currentGroup = null;
|
|
291
|
+
this.groupTimeout = null;
|
|
292
|
+
this.groupingTimeoutMs = groupingTimeoutMs;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Start a new command group
|
|
296
|
+
*/
|
|
297
|
+
startGroup(id, label) {
|
|
298
|
+
this.endGroup();
|
|
299
|
+
this.currentGroup = new CompositeCommand(id, label);
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Add a command to the current group
|
|
303
|
+
*/
|
|
304
|
+
addToGroup(command) {
|
|
305
|
+
if (this.currentGroup) {
|
|
306
|
+
this.currentGroup.addCommand(command);
|
|
307
|
+
this.resetGroupTimeout();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* End the current group
|
|
312
|
+
*/
|
|
313
|
+
endGroup() {
|
|
314
|
+
if (this.groupTimeout) {
|
|
315
|
+
clearTimeout(this.groupTimeout);
|
|
316
|
+
this.groupTimeout = null;
|
|
317
|
+
}
|
|
318
|
+
const group = this.currentGroup;
|
|
319
|
+
this.currentGroup = null;
|
|
320
|
+
return group;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get the current group
|
|
324
|
+
*/
|
|
325
|
+
getCurrentGroup() {
|
|
326
|
+
return this.currentGroup;
|
|
327
|
+
}
|
|
328
|
+
resetGroupTimeout() {
|
|
329
|
+
if (this.groupTimeout) {
|
|
330
|
+
clearTimeout(this.groupTimeout);
|
|
331
|
+
}
|
|
332
|
+
this.groupTimeout = setTimeout(() => {
|
|
333
|
+
this.endGroup();
|
|
334
|
+
}, this.groupingTimeoutMs);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.CommandGrouper = CommandGrouper;
|
|
338
|
+
/**
|
|
339
|
+
* Built-in commands for common text operations
|
|
340
|
+
*/
|
|
341
|
+
class BuiltInCommands {
|
|
342
|
+
static createInsertTextCommand(context, position, text) {
|
|
343
|
+
const range = { start: position, end: position };
|
|
344
|
+
return new TextEditCommand(context, range, text, `Insert "${text}"`);
|
|
345
|
+
}
|
|
346
|
+
static createDeleteTextCommand(context, range) {
|
|
347
|
+
return new TextEditCommand(context, range, '', 'Delete Text');
|
|
348
|
+
}
|
|
349
|
+
static createReplaceTextCommand(context, range, newText) {
|
|
350
|
+
return new TextEditCommand(context, range, newText, `Replace with "${newText}"`);
|
|
351
|
+
}
|
|
352
|
+
static createMultiCursorEditCommand(context, edits) {
|
|
353
|
+
const commands = edits.map((edit, index) => new TextEditCommand(context, edit.range, edit.text, `Multi-edit ${index + 1}`));
|
|
354
|
+
return new CompositeCommand('text.multiEdit', 'Multi-cursor Edit', commands);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
exports.BuiltInCommands = BuiltInCommands;
|
|
358
|
+
//# sourceMappingURL=CommandSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandSystem.js","sourceRoot":"","sources":["../../src/core/CommandSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { EventEmitter, EventListener, Disposable } from '../types/core';
|
|
2
|
+
/**
|
|
3
|
+
* Disposable implementation for cleanup
|
|
4
|
+
*/
|
|
5
|
+
export declare class DisposableImpl implements Disposable {
|
|
6
|
+
private isDisposed;
|
|
7
|
+
private readonly cleanupFn;
|
|
8
|
+
constructor(cleanupFn: () => void);
|
|
9
|
+
dispose(): void;
|
|
10
|
+
get disposed(): boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Composite disposable for managing multiple disposables
|
|
14
|
+
*/
|
|
15
|
+
export declare class CompositeDisposable implements Disposable {
|
|
16
|
+
private disposables;
|
|
17
|
+
private isDisposed;
|
|
18
|
+
add(disposable: Disposable): void;
|
|
19
|
+
remove(disposable: Disposable): void;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
get disposed(): boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Typed event emitter implementation with memory management
|
|
25
|
+
*/
|
|
26
|
+
export declare class TypedEventEmitter<TEvents = Record<string, any>> implements EventEmitter<TEvents> {
|
|
27
|
+
protected listeners: Map<keyof TEvents, Set<EventListener<any>>>;
|
|
28
|
+
protected onceListeners: Map<keyof TEvents, Set<EventListener<any>>>;
|
|
29
|
+
protected isDisposed: boolean;
|
|
30
|
+
on<K extends keyof TEvents>(event: K, listener: EventListener<TEvents[K]>): Disposable;
|
|
31
|
+
off<K extends keyof TEvents>(event: K, listener: EventListener<TEvents[K]>): void;
|
|
32
|
+
once<K extends keyof TEvents>(event: K, listener: EventListener<TEvents[K]>): Disposable;
|
|
33
|
+
emit<K extends keyof TEvents>(event: K, data: TEvents[K]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get the number of listeners for an event
|
|
36
|
+
*/
|
|
37
|
+
listenerCount<K extends keyof TEvents>(event: K): number;
|
|
38
|
+
/**
|
|
39
|
+
* Get all events that have listeners
|
|
40
|
+
*/
|
|
41
|
+
eventNames(): (keyof TEvents)[];
|
|
42
|
+
/**
|
|
43
|
+
* Remove all listeners for all events
|
|
44
|
+
*/
|
|
45
|
+
removeAllListeners(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Remove all listeners for a specific event
|
|
48
|
+
*/
|
|
49
|
+
removeAllListenersForEvent<K extends keyof TEvents>(event: K): void;
|
|
50
|
+
/**
|
|
51
|
+
* Dispose the event emitter and clean up all listeners
|
|
52
|
+
*/
|
|
53
|
+
dispose(): void;
|
|
54
|
+
get disposed(): boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Event emitter that supports priorities
|
|
58
|
+
*/
|
|
59
|
+
export declare class PriorityEventEmitter<TEvents = Record<string, any>> extends TypedEventEmitter<TEvents> {
|
|
60
|
+
private priorityListeners;
|
|
61
|
+
/**
|
|
62
|
+
* Add a listener with priority (higher numbers = higher priority)
|
|
63
|
+
*/
|
|
64
|
+
onWithPriority<K extends keyof TEvents>(event: K, listener: EventListener<TEvents[K]>, priority?: number): Disposable;
|
|
65
|
+
private offWithPriority;
|
|
66
|
+
emit<K extends keyof TEvents>(event: K, data: TEvents[K]): void;
|
|
67
|
+
removeAllListeners(): void;
|
|
68
|
+
removeAllListenersForEvent<K extends keyof TEvents>(event: K): void;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Async event emitter for handling asynchronous event listeners
|
|
72
|
+
*/
|
|
73
|
+
export declare class AsyncEventEmitter<TEvents = Record<string, any>> extends TypedEventEmitter<TEvents> {
|
|
74
|
+
/**
|
|
75
|
+
* Emit event and wait for all listeners to complete
|
|
76
|
+
*/
|
|
77
|
+
emitAsync<K extends keyof TEvents>(event: K, data: TEvents[K]): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Utility function to create a disposable from multiple disposables
|
|
81
|
+
*/
|
|
82
|
+
export declare function combineDisposables(...disposables: Disposable[]): Disposable;
|
|
83
|
+
/**
|
|
84
|
+
* Utility function to create a disposable from a cleanup function
|
|
85
|
+
*/
|
|
86
|
+
export declare function createDisposable(cleanupFn: () => void): Disposable;
|
|
87
|
+
//# sourceMappingURL=EventSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventSystem.d.ts","sourceRoot":"","sources":["../../src/core/EventSystem.ts"],"names":[],"mappings":"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"}
|