@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,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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"}