@lvce-editor/editor-worker 19.57.0 → 19.58.1

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.
@@ -1748,7 +1748,7 @@ const codeGeneratorAccept = state => {
1748
1748
 
1749
1749
  const editorStates = create$9();
1750
1750
  const {
1751
- dispose: dispose$3,
1751
+ dispose: dispose$4,
1752
1752
  getCommandIds,
1753
1753
  registerCommands,
1754
1754
  wrapGetter
@@ -2309,7 +2309,7 @@ const getInitialLineState = initialLineState => {
2309
2309
  return deepCopy(initialLineState);
2310
2310
  };
2311
2311
 
2312
- const state$d = {
2312
+ const state$e = {
2313
2313
  warned: []
2314
2314
  };
2315
2315
  const flattenTokensArray = tokens => {
@@ -2321,10 +2321,10 @@ const flattenTokensArray = tokens => {
2321
2321
  return flattened;
2322
2322
  };
2323
2323
  const warnDeprecatedArrayReturn = (languageId, fn) => {
2324
- if (state$d.warned.includes(fn)) {
2324
+ if (state$e.warned.includes(fn)) {
2325
2325
  return;
2326
2326
  }
2327
- state$d.warned.push(fn);
2327
+ state$e.warned.push(fn);
2328
2328
  console.warn(`tokenizers without hasArrayReturn=false are deprecated (language ${languageId})`);
2329
2329
  };
2330
2330
  const safeTokenizeLine = (languageId, tokenizeLine, line, lineStateAtStart, hasArrayReturn) => {
@@ -2385,14 +2385,14 @@ const TokenizePlainText = {
2385
2385
  tokenizeLine
2386
2386
  };
2387
2387
 
2388
- const state$c = {
2388
+ const state$d = {
2389
2389
  enabled: false
2390
2390
  };
2391
2391
  const setEnabled$1 = value => {
2392
- state$c.enabled = value;
2392
+ state$d.enabled = value;
2393
2393
  };
2394
2394
  const getEnabled$1 = () => {
2395
- return state$c.enabled;
2395
+ return state$d.enabled;
2396
2396
  };
2397
2397
 
2398
2398
  const {
@@ -2400,25 +2400,25 @@ const {
2400
2400
  set: set$6
2401
2401
  } = SyntaxHighlightingWorker;
2402
2402
 
2403
- const state$b = {
2403
+ const state$c = {
2404
2404
  pending: Object.create(null),
2405
2405
  tokenizePaths: Object.create(null),
2406
2406
  tokenizers: Object.create(null)
2407
2407
  };
2408
2408
  const has = languageId => {
2409
- return Object.hasOwn(state$b.tokenizers, languageId);
2409
+ return Object.hasOwn(state$c.tokenizers, languageId);
2410
2410
  };
2411
2411
  const set$5 = (languageId, tokenizer) => {
2412
- state$b.tokenizers[languageId] = tokenizer;
2412
+ state$c.tokenizers[languageId] = tokenizer;
2413
2413
  };
2414
2414
  const get$6 = languageId => {
2415
- return state$b.tokenizers[languageId];
2415
+ return state$c.tokenizers[languageId];
2416
2416
  };
2417
2417
  const setTokenizePath = (languageId, tokenizePath) => {
2418
- state$b.tokenizePaths[languageId] = tokenizePath;
2418
+ state$c.tokenizePaths[languageId] = tokenizePath;
2419
2419
  };
2420
2420
  const getTokenizePath$1 = languageId => {
2421
- return state$b.tokenizePaths[languageId] || '';
2421
+ return state$c.tokenizePaths[languageId] || '';
2422
2422
  };
2423
2423
  const setTokenizePaths = languages => {
2424
2424
  for (const language of languages) {
@@ -2428,7 +2428,7 @@ const setTokenizePaths = languages => {
2428
2428
  }
2429
2429
  };
2430
2430
  const isPending = languageId => {
2431
- return Object.hasOwn(state$b.pending, languageId);
2431
+ return Object.hasOwn(state$c.pending, languageId);
2432
2432
  };
2433
2433
 
2434
2434
  const tokenMaps = Object.create(null);
@@ -3256,14 +3256,14 @@ const getVisible$1 = async (editor, syncIncremental) => {
3256
3256
  };
3257
3257
  };
3258
3258
 
3259
- const state$a = {
3259
+ const state$b = {
3260
3260
  enabled: false
3261
3261
  };
3262
3262
  const setEnabled = value => {
3263
- state$a.enabled = value;
3263
+ state$b.enabled = value;
3264
3264
  };
3265
3265
  const getEnabled = () => {
3266
- return state$a.enabled;
3266
+ return state$b.enabled;
3267
3267
  };
3268
3268
 
3269
3269
  // TODO this should be in a separate scrolling module
@@ -3490,7 +3490,94 @@ const getUrlAtOffset = (editor, offset) => {
3490
3490
  const EditorChange = 1;
3491
3491
  const EditorSelection$1 = 2;
3492
3492
 
3493
- const state$9 = Object.create(null);
3493
+ const deliveries = new Map();
3494
+ const getDelta = (previous, next) => {
3495
+ return Object.fromEntries(Object.entries(next).filter(([key, value]) => previous[key] !== value));
3496
+ };
3497
+ const flush = async delivery => {
3498
+ while (delivery.pending && !delivery.disposed) {
3499
+ const status = delivery.pendingStatus;
3500
+ delivery.pending = false;
3501
+ if (delivery.supportsDeltas === undefined) {
3502
+ try {
3503
+ delivery.supportsDeltas = (await delivery.rpc.invoke('StatusBar.supportsEditorStatusDeltas')) === true;
3504
+ } catch {
3505
+ delivery.supportsDeltas = false;
3506
+ }
3507
+ }
3508
+ if (delivery.disposed) {
3509
+ return;
3510
+ }
3511
+ let update = status;
3512
+ if (delivery.hasBaseline) {
3513
+ if (!delivery.baseline && !status) {
3514
+ continue;
3515
+ }
3516
+ if (delivery.baseline && status) {
3517
+ const delta = getDelta(delivery.baseline, status);
3518
+ if (Object.keys(delta).length === 0) {
3519
+ continue;
3520
+ }
3521
+ if (delivery.supportsDeltas) {
3522
+ update = delta;
3523
+ }
3524
+ }
3525
+ }
3526
+ try {
3527
+ await delivery.rpc.invoke('StatusBar.handleEditorStatusChanged', update);
3528
+ delivery.baseline = status;
3529
+ delivery.hasBaseline = true;
3530
+ } catch (error) {
3531
+ delivery.baseline = undefined;
3532
+ delivery.hasBaseline = false;
3533
+ console.warn('Failed to deliver editor status:', error);
3534
+ }
3535
+ }
3536
+ };
3537
+ const run$1 = async delivery => {
3538
+ try {
3539
+ await flush(delivery);
3540
+ } finally {
3541
+ delivery.running = undefined;
3542
+ }
3543
+ // An update can arrive after flush returns but before this continuation runs.
3544
+ if (delivery.pending && !delivery.disposed) {
3545
+ await start(delivery);
3546
+ }
3547
+ };
3548
+ const start = delivery => {
3549
+ delivery.running = run$1(delivery);
3550
+ return delivery.running;
3551
+ };
3552
+ const dispose$3 = rpcId => {
3553
+ const delivery = deliveries.get(rpcId);
3554
+ if (delivery) {
3555
+ delivery.disposed = true;
3556
+ deliveries.delete(rpcId);
3557
+ }
3558
+ };
3559
+ const send$2 = (rpcId, rpc, status) => {
3560
+ let delivery = deliveries.get(rpcId);
3561
+ if (!delivery || delivery.rpc !== rpc) {
3562
+ dispose$3(rpcId);
3563
+ delivery = {
3564
+ baseline: undefined,
3565
+ disposed: false,
3566
+ hasBaseline: false,
3567
+ pending: false,
3568
+ pendingStatus: undefined,
3569
+ rpc,
3570
+ running: undefined,
3571
+ supportsDeltas: undefined
3572
+ };
3573
+ deliveries.set(rpcId, delivery);
3574
+ }
3575
+ delivery.pendingStatus = status;
3576
+ delivery.pending = true;
3577
+ return delivery.running || start(delivery);
3578
+ };
3579
+
3580
+ const state$a = Object.create(null);
3494
3581
 
3495
3582
  /**
3496
3583
  * Register a listener for a specific event type
@@ -3500,13 +3587,13 @@ const state$9 = Object.create(null);
3500
3587
  const registerListener$1 = (listenerType, rpcId) => {
3501
3588
  number(listenerType);
3502
3589
  number(rpcId);
3503
- if (!Object.hasOwn(state$9, listenerType)) {
3504
- state$9[listenerType] = [];
3590
+ if (!Object.hasOwn(state$a, listenerType)) {
3591
+ state$a[listenerType] = [];
3505
3592
  }
3506
3593
 
3507
3594
  // Avoid duplicate registrations
3508
- if (!state$9[listenerType].includes(rpcId)) {
3509
- state$9[listenerType].push(rpcId);
3595
+ if (!state$a[listenerType].includes(rpcId)) {
3596
+ state$a[listenerType].push(rpcId);
3510
3597
  }
3511
3598
  };
3512
3599
 
@@ -3518,10 +3605,13 @@ const registerListener$1 = (listenerType, rpcId) => {
3518
3605
  const unregisterListener$1 = (listenerType, rpcId) => {
3519
3606
  number(listenerType);
3520
3607
  number(rpcId);
3521
- if (Object.hasOwn(state$9, listenerType)) {
3522
- const index = state$9[listenerType].indexOf(rpcId);
3608
+ if (listenerType === EditorSelection$1) {
3609
+ dispose$3(rpcId);
3610
+ }
3611
+ if (Object.hasOwn(state$a, listenerType)) {
3612
+ const index = state$a[listenerType].indexOf(rpcId);
3523
3613
  if (index !== -1) {
3524
- state$9[listenerType].splice(index, 1);
3614
+ state$a[listenerType].splice(index, 1);
3525
3615
  }
3526
3616
  }
3527
3617
  };
@@ -3533,7 +3623,7 @@ const unregisterListener$1 = (listenerType, rpcId) => {
3533
3623
  */
3534
3624
  const getListeners = listenerType => {
3535
3625
  number(listenerType);
3536
- return state$9[listenerType] || [];
3626
+ return state$a[listenerType] || [];
3537
3627
  };
3538
3628
 
3539
3629
  /**
@@ -4962,12 +5052,12 @@ const launchColorPickerWorker = async () => {
4962
5052
  return launchWorker(name, url, undefined, getColorPickerWorkerCommandMap());
4963
5053
  };
4964
5054
 
4965
- const state$8 = {};
5055
+ const state$9 = {};
4966
5056
  const getOrCreate$3 = () => {
4967
- if (!state$8.workerPromise) {
4968
- state$8.workerPromise = launchColorPickerWorker();
5057
+ if (!state$9.workerPromise) {
5058
+ state$9.workerPromise = launchColorPickerWorker();
4969
5059
  }
4970
- return state$8.workerPromise;
5060
+ return state$9.workerPromise;
4971
5061
  };
4972
5062
  const invoke$6 = async (method, ...params) => {
4973
5063
  const worker = await getOrCreate$3();
@@ -5614,7 +5704,7 @@ const diff2 = uid => {
5614
5704
 
5615
5705
  const autoSaveDelay = 1000;
5616
5706
  const pendingSaves = new Map();
5617
- const state$7 = {
5707
+ const state$8 = {
5618
5708
  nextToken: 0
5619
5709
  };
5620
5710
  const run = async (uid, token, save) => {
@@ -5625,7 +5715,7 @@ const run = async (uid, token, save) => {
5625
5715
  };
5626
5716
  const schedule = (uid, save) => {
5627
5717
  dispose$2(uid);
5628
- const token = ++state$7.nextToken;
5718
+ const token = ++state$8.nextToken;
5629
5719
  const timeout = setTimeout(run, autoSaveDelay, uid, token, save);
5630
5720
  pendingSaves.set(uid, {
5631
5721
  timeout,
@@ -5665,21 +5755,34 @@ const getEditorStatus = editor => {
5665
5755
  };
5666
5756
  };
5667
5757
 
5668
- const equals = (oldStatus, newStatus) => {
5669
- return oldStatus.column === newStatus.column && oldStatus.endOfLine === newStatus.endOfLine && oldStatus.encoding === newStatus.encoding && oldStatus.insertSpaces === newStatus.insertSpaces && oldStatus.languageId === newStatus.languageId && oldStatus.line === newStatus.line && oldStatus.tabSize === newStatus.tabSize;
5758
+ const sendToListener = async (rpcId, status) => {
5759
+ const rpc = get$9(rpcId);
5760
+ if (rpc) {
5761
+ await send$2(rpcId, rpc, status);
5762
+ }
5670
5763
  };
5671
- const notifyEditorStatusChange = async (oldEditor, newEditor) => {
5672
- if (newEditor.initial || !newEditor.focused) {
5764
+ const initializeListener = async rpcId => {
5765
+ if (!getListeners(EditorSelection$1).includes(rpcId)) {
5673
5766
  return;
5674
5767
  }
5675
- const newStatus = getEditorStatus(newEditor);
5676
- if (!oldEditor.initial && oldEditor.focused && equals(getEditorStatus(oldEditor), newStatus)) {
5768
+ const editor = getKeys$2().map(uid => get$8(Number(uid))?.newState).find(state => {
5769
+ const {
5770
+ focused,
5771
+ initial
5772
+ } = state || {};
5773
+ return focused && !initial;
5774
+ });
5775
+ await sendToListener(rpcId, editor ? getEditorStatus(editor) : undefined);
5776
+ };
5777
+ const notifyEditorStatusChange = async (_oldEditor, newEditor) => {
5778
+ if (newEditor.initial || !newEditor.focused) {
5677
5779
  return;
5678
5780
  }
5679
- await notifyListeners(EditorSelection$1, 'StatusBar.handleEditorStatusChanged', newStatus);
5781
+ const status = getEditorStatus(newEditor);
5782
+ await Promise.all(getListeners(EditorSelection$1).map(rpcId => sendToListener(rpcId, status)));
5680
5783
  };
5681
5784
  const notifyEditorStatusCleared = async () => {
5682
- await notifyListeners(EditorSelection$1, 'StatusBar.handleEditorStatusChanged', undefined);
5785
+ await Promise.all(getListeners(EditorSelection$1).map(rpcId => sendToListener(rpcId, undefined)));
5683
5786
  };
5684
5787
 
5685
5788
  const addWidget$1 = widget => {
@@ -5774,7 +5877,7 @@ const disposeEditor = async editorUid => {
5774
5877
  });
5775
5878
  dispose$1(editorUid);
5776
5879
  dispose$2(editorUid);
5777
- dispose$3(editorUid);
5880
+ dispose$4(editorUid);
5778
5881
  if (getKeys$2().length === 0) {
5779
5882
  await notifyEditorStatusCleared();
5780
5883
  }
@@ -6048,8 +6151,39 @@ const isFormattingError = error => {
6048
6151
  return error && error instanceof Error && error.message.startsWith(expectedErrorMessage$1);
6049
6152
  };
6050
6153
 
6154
+ const state$7 = {
6155
+ configured: false,
6156
+ lastId: -1,
6157
+ nextId: 0
6158
+ };
6159
+ const configure = (start, end) => {
6160
+ const {
6161
+ configured
6162
+ } = state$7;
6163
+ if (configured) {
6164
+ throw new Error('Component id range is already configured');
6165
+ }
6166
+ if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start <= 0 || end < start) {
6167
+ throw new Error('Invalid component id range');
6168
+ }
6169
+ state$7.nextId = start;
6170
+ state$7.lastId = end;
6171
+ state$7.configured = true;
6172
+ };
6051
6173
  const create$8 = () => {
6052
- return Math.random();
6174
+ const {
6175
+ configured,
6176
+ lastId,
6177
+ nextId
6178
+ } = state$7;
6179
+ if (!configured) {
6180
+ // Compatibility with renderer versions that do not assign worker id ranges.
6181
+ return Math.random();
6182
+ }
6183
+ if (nextId > lastId) {
6184
+ throw new Error('Component id range exhausted');
6185
+ }
6186
+ return state$7.nextId++;
6053
6187
  };
6054
6188
 
6055
6189
  const Message = 9;
@@ -14013,6 +14147,7 @@ const handleMessagePort = async (port, rpcId) => {
14013
14147
  });
14014
14148
  if (rpcId) {
14015
14149
  set$h(rpcId, rpc);
14150
+ await initializeListener(rpcId);
14016
14151
  }
14017
14152
  };
14018
14153
 
@@ -14696,10 +14831,11 @@ const refreshGutterDecorationsAll = async () => {
14696
14831
  * @param listenerType - The type of event to listen for (from ListenerType enum)
14697
14832
  * @param rpcId - The RPC ID of the listener that will be notified
14698
14833
  */
14699
- const registerListener = (listenerType, rpcId) => {
14834
+ const registerListener = async (listenerType, rpcId) => {
14700
14835
  number(listenerType);
14701
14836
  number(rpcId);
14702
14837
  registerListener$1(listenerType, rpcId);
14838
+ await initializeListener(rpcId);
14703
14839
  };
14704
14840
 
14705
14841
  const renderAdditionalFocusContext$1 = (oldState, newState) => {
@@ -16511,9 +16647,10 @@ const commandMap = {
16511
16647
  'Hover.handleSashPointerUp': handleSashPointerUp,
16512
16648
  'Hover.loadContent': loadContent$1,
16513
16649
  'Hover.render': renderHover,
16650
+ 'Id.configure': configure,
16514
16651
  'Initialize.initialize': intialize,
16515
16652
  'Listener.register': registerListener,
16516
- 'Listener.registerListener': registerListener$1,
16653
+ 'Listener.registerListener': registerListener,
16517
16654
  'Listener.unregister': unregisterListener,
16518
16655
  'SendMessagePortToExtensionHostWorker.sendMessagePortToExtensionHostWorker': sendDeprecatedExtensionHostPortToExtensionManagementWorker,
16519
16656
  'SendMessagePortToExtensionManagementWorker.sendMessagePortToExtensionManagementWorker': sendMessagePortToExtensionManagementWorker
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/editor-worker",
3
- "version": "19.57.0",
3
+ "version": "19.58.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git@github.com:lvce-editor/editor-worker.git"