@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.
Files changed (39) hide show
  1. package/README.md +127 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/__tests__/editor.spec.d.ts +2 -0
  4. package/dist/__tests__/editor.spec.d.ts.map +1 -0
  5. package/dist/__tests__/editor.spec.js +141 -0
  6. package/dist/__tests__/editor.spec.js.map +1 -0
  7. package/dist/core/CodeEditor.d.ts +70 -0
  8. package/dist/core/CodeEditor.d.ts.map +1 -0
  9. package/dist/core/CodeEditor.js +392 -0
  10. package/dist/core/CodeEditor.js.map +1 -0
  11. package/dist/core/CommandSystem.d.ts +158 -0
  12. package/dist/core/CommandSystem.d.ts.map +1 -0
  13. package/dist/core/CommandSystem.js +358 -0
  14. package/dist/core/CommandSystem.js.map +1 -0
  15. package/dist/core/EventSystem.d.ts +87 -0
  16. package/dist/core/EventSystem.d.ts.map +1 -0
  17. package/dist/core/EventSystem.js +330 -0
  18. package/dist/core/EventSystem.js.map +1 -0
  19. package/dist/core/TextDocument.d.ts +110 -0
  20. package/dist/core/TextDocument.d.ts.map +1 -0
  21. package/dist/core/TextDocument.js +340 -0
  22. package/dist/core/TextDocument.js.map +1 -0
  23. package/dist/index.d.ts +178 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +302 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/language/Extensions.d.ts +280 -0
  28. package/dist/language/Extensions.d.ts.map +1 -0
  29. package/dist/language/Extensions.js +368 -0
  30. package/dist/language/Extensions.js.map +1 -0
  31. package/dist/language/Tokenizer.d.ts +108 -0
  32. package/dist/language/Tokenizer.d.ts.map +1 -0
  33. package/dist/language/Tokenizer.js +630 -0
  34. package/dist/language/Tokenizer.js.map +1 -0
  35. package/dist/types/core.d.ts +355 -0
  36. package/dist/types/core.d.ts.map +1 -0
  37. package/dist/types/core.js +93 -0
  38. package/dist/types/core.js.map +1 -0
  39. 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":";;;AACA,+CAAkE;AAElE;;GAEG;AACH,MAAsB,eAAe;IAMjC,YAAY,EAAU,EAAE,KAAa;QAH3B,aAAQ,GAAG,KAAK,CAAC;QACjB,WAAM,GAAG,KAAK,CAAC;QAGrB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAKD,IAAI;QACA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;IAES,YAAY;QAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;CACJ;AAvCD,0CAuCC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,eAAe;IAIhD,YACqB,OAAuB,EACvB,KAAY,EACZ,OAAe,EAChC,KAAc;QAEd,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,WAAW,CAAC,CAAC;QALxB,YAAO,GAAP,OAAO,CAAgB;QACvB,UAAK,GAAL,KAAK,CAAO;QACZ,YAAO,GAAP,OAAO,CAAQ;QAN5B,iBAAY,GAAW,EAAE,CAAC;QAU9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,OAAO;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,MAAM,MAAM,GAAI,QAAgB,CAAC,SAAS,EAAE,CAAC;QAE7C,gDAAgD;QAChD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpD,mBAAmB;QACnB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,MAAM,MAAM,GAAI,QAAgB,CAAC,SAAS,EAAE,CAAC;QAE7C,4BAA4B;QAC5B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AApCD,0CAoCC;AAED;;GAEG;AACH,MAAa,gBAAiB,SAAQ,eAAe;IAGjD,YAAY,EAAU,EAAE,KAAa,EAAE,WAA8B,EAAE;QACnE,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAHb,aAAQ,GAAsB,EAAE,CAAC;QAIrC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,OAAwB;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACH,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,wBAAwB;QACxB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEQ,IAAI;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;CACJ;AAxCD,4CAwCC;AAED;;GAEG;AACH,MAAa,eAAe;IAA5B;QACY,aAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;QACtC,aAAQ,GAAG,IAAI,GAAG,EAAkD,CAAC;IA0EjF,CAAC;IAxEG;;OAEG;IACH,QAAQ,CAAC,OAAgB;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEvC,OAAO,IAAI,4BAAc,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,eAAe,CACX,SAAiB,EACjB,OAA+C;QAE/C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,SAAS,yBAAyB,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEtC,OAAO,IAAI,4BAAc,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAG,IAAW;QAC3C,oBAAoB;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,aAAa,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,aAAa;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;CACJ;AA5ED,0CA4EC;AAED;;GAEG;AACH,MAAa,cAAc;IAWvB,YAAY,eAAuB,IAAI;QAV/B,cAAS,GAAsB,EAAE,CAAC;QAClC,cAAS,GAAsB,EAAE,CAAC;QAElC,WAAM,GAAG,IAAI,+BAAiB,EAKlC,CAAC;QAGD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,OAAwB;QAC5B,sBAAsB;QACtB,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,oBAAoB;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,mBAAmB;QACnB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1B,0BAA0B;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAC;QACtC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,IAAI;QACA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAC;QACtC,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;SACjB,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,EAAE,CACE,KAAQ,EACR,QAA6B;QAE7B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAY,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;CACJ;AApID,wCAoIC;AAED;;GAEG;AACH,MAAa,cAAc;IAKvB,YAAY,oBAA4B,GAAG;QAJnC,iBAAY,GAA4B,IAAI,CAAC;QAC7C,iBAAY,GAAkB,IAAI,CAAC;QAIvC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,EAAU,EAAE,KAAa;QAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAAwB;QAC/B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,eAAe;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAEO,iBAAiB;QACrB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAQ,CAAC;IACtC,CAAC;CACJ;AAzDD,wCAyDC;AAED;;GAEG;AACH,MAAa,eAAe;IACxB,MAAM,CAAC,uBAAuB,CAC1B,OAAuB,EACvB,QAAkB,EAClB,IAAY;QAEZ,MAAM,KAAK,GAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QACxD,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,uBAAuB,CAAC,OAAuB,EAAE,KAAY;QAChE,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,wBAAwB,CAC3B,OAAuB,EACvB,KAAY,EACZ,OAAe;QAEf,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,iBAAiB,OAAO,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,4BAA4B,CAC/B,OAAuB,EACvB,KAA4C;QAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CACtB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACZ,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,KAAK,GAAG,CAAC,EAAE,CAAC,CACrF,CAAC;QAEF,OAAO,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;CACJ;AAjCD,0CAiCC"}
@@ -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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"}