@kusto/monaco-kusto 12.0.10 → 12.0.11

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 CHANGED
@@ -85,6 +85,10 @@ Every PR should come with a test that checks it.
85
85
 
86
86
  ## Changelog
87
87
 
88
+ ### 12.0.11
89
+
90
+ - fix: avoid race condition on worker disposal
91
+
88
92
  ### 12.0.10
89
93
 
90
94
  - fix: Parameter docstrings not shown
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kusto/monaco-kusto",
3
- "version": "12.0.10",
3
+ "version": "12.0.11",
4
4
  "description": "CSL, KQL plugin for the Monaco Editor",
5
5
  "author": {
6
6
  "name": "Microsoft"
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './main-eff7d47e', './types-cf1c0652'], (function (exports, monaco, main, types$1) { 'use strict';
8
+ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './main-37d643e2', './types-f09c24e4'], (function (exports, monaco, main, types$1) { 'use strict';
9
9
 
10
10
  function _interopNamespaceDefault(e) {
11
11
  var n = Object.create(null);
@@ -30,6 +30,9 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
30
30
  function _typeof$9(o) { "@babel/helpers - typeof"; return _typeof$9 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$9(o); }
31
31
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
32
32
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.indexOf(n) >= 0) continue; t[n] = r[n]; } return t; }
33
+ function _regeneratorRuntime$4() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime$4 = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof$9(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof$9(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
34
+ function asyncGeneratorStep$4(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
35
+ function _asyncToGenerator$4(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep$4(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep$4(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
33
36
  function _classCallCheck$2(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
34
37
  function _defineProperties$2(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey$3(o.key), o); } }
35
38
  function _createClass$2(e, r, t) { return r && _defineProperties$2(e.prototype, r), t && _defineProperties$2(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
@@ -41,11 +44,9 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
41
44
  _classCallCheck$2(this, WorkerManager);
42
45
  this._monacoInstance = _monacoInstance;
43
46
  this._defaults = defaults;
44
- this._worker = null;
45
47
  this._idleCheckInterval = self.setInterval(function () {
46
48
  return _this._checkIfIdle();
47
49
  }, 30 * 1000);
48
- this._lastUsedTime = 0;
49
50
  this._configChangeListener = this._defaults.onDidChange(function () {
50
51
  return _this._saveStateAndStopWorker();
51
52
  });
@@ -53,20 +54,37 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
53
54
  return _createClass$2(WorkerManager, [{
54
55
  key: "_stopWorker",
55
56
  value: function _stopWorker() {
56
- if (this._worker) {
57
- this._worker.dispose();
58
- this._worker = null;
59
- }
60
- this._client = null;
57
+ var workerToStop = this._workerDetails;
58
+ this._workerDetailsPromise = null;
59
+ this._workerDetails = null;
60
+
61
+ // Ensure disposal occurs only after the last request completes.
62
+ // This is necessary because setting the languageSettings disposes of the worker,
63
+ // causing the setSchema call to remain unresolved, which prevents the semantic tokens provider from being registered.
64
+ setTimeout( /*#__PURE__*/_asyncToGenerator$4( /*#__PURE__*/_regeneratorRuntime$4().mark(function _callee() {
65
+ return _regeneratorRuntime$4().wrap(function _callee$(_context) {
66
+ while (1) switch (_context.prev = _context.next) {
67
+ case 0:
68
+ if (workerToStop._worker) {
69
+ workerToStop._worker.dispose();
70
+ }
71
+ case 1:
72
+ case "end":
73
+ return _context.stop();
74
+ }
75
+ }, _callee);
76
+ })), 5000);
61
77
  }
62
78
  }, {
63
79
  key: "_saveStateAndStopWorker",
64
80
  value: function _saveStateAndStopWorker() {
65
- var _this2 = this;
66
- if (!this._worker) {
81
+ var _this$_workerDetails,
82
+ _this$_workerDetails2,
83
+ _this2 = this;
84
+ if (!((_this$_workerDetails = this._workerDetails) !== null && _this$_workerDetails !== void 0 && _this$_workerDetails._worker)) {
67
85
  return;
68
86
  }
69
- this._worker.getProxy().then(function (proxy) {
87
+ (_this$_workerDetails2 = this._workerDetails) === null || _this$_workerDetails2 === void 0 || _this$_workerDetails2._worker.getProxy().then(function (proxy) {
70
88
  proxy.getSchema().then(function (schema) {
71
89
  _this2._storedState = {
72
90
  schema: schema
@@ -85,11 +103,12 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
85
103
  }, {
86
104
  key: "_checkIfIdle",
87
105
  value: function _checkIfIdle() {
88
- if (!this._worker) {
106
+ var _this$_workerDetails3, _this$_workerDetails4;
107
+ if (!((_this$_workerDetails3 = this._workerDetails) !== null && _this$_workerDetails3 !== void 0 && _this$_workerDetails3._worker)) {
89
108
  return;
90
109
  }
91
110
  var maxIdleTime = this._defaults.getWorkerMaxIdleTime();
92
- var timePassedSinceLastUsed = Date.now() - this._lastUsedTime;
111
+ var timePassedSinceLastUsed = Date.now() - ((_this$_workerDetails4 = this._workerDetails) === null || _this$_workerDetails4 === void 0 ? void 0 : _this$_workerDetails4._lastUsedTime);
93
112
  if (maxIdleTime > 0 && timePassedSinceLastUsed > maxIdleTime) {
94
113
  this._saveStateAndStopWorker();
95
114
  }
@@ -98,14 +117,12 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
98
117
  key: "_getClient",
99
118
  value: function _getClient() {
100
119
  var _this3 = this;
101
- this._lastUsedTime = Date.now();
102
-
103
120
  // Since onDidProvideCompletionItems is not used in web worker, and since functions cannot be trivially serialized (throws exception unable to clone), We remove it here.
104
121
  var _this$_defaults$langu = this._defaults.languageSettings;
105
122
  _this$_defaults$langu.onDidProvideCompletionItems;
106
123
  var languageSettings = _objectWithoutProperties(_this$_defaults$langu, _excluded);
107
- if (!this._client) {
108
- this._worker = this._monacoInstance.editor.createWebWorker({
124
+ if (!this._workerDetailsPromise) {
125
+ var worker = this._monacoInstance.editor.createWebWorker({
109
126
  // module that exports the create() method and returns a `KustoWorker` instance
110
127
  moduleId: 'vs/language/kusto/kustoWorker',
111
128
  label: 'kusto',
@@ -115,7 +132,7 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
115
132
  languageId: 'kusto'
116
133
  }
117
134
  });
118
- this._client = this._worker.getProxy().then(function (proxy) {
135
+ var client = worker.getProxy().then(function (proxy) {
119
136
  // push state we held onto before killing the client.
120
137
  if (_this3._storedState) {
121
138
  return proxy.setSchema(_this3._storedState.schema).then(function () {
@@ -125,8 +142,16 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
125
142
  return proxy;
126
143
  }
127
144
  });
145
+ this._workerDetailsPromise = client.then(function (client) {
146
+ _this3._workerDetails = {
147
+ _worker: worker,
148
+ _client: client,
149
+ _lastUsedTime: Date.now()
150
+ };
151
+ return _this3._workerDetails;
152
+ });
128
153
  }
129
- return this._client;
154
+ return this._workerDetailsPromise;
130
155
  }
131
156
  }, {
132
157
  key: "getLanguageServiceWorker",
@@ -137,9 +162,10 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
137
162
  }
138
163
  var _client;
139
164
  return this._getClient().then(function (client) {
140
- _client = client;
165
+ _client = client._client;
141
166
  }).then(function (_) {
142
- return _this4._worker.withSyncedResources(resources);
167
+ var _this4$_workerDetails;
168
+ return (_this4$_workerDetails = _this4._workerDetails) === null || _this4$_workerDetails === void 0 || (_this4$_workerDetails = _this4$_workerDetails._worker) === null || _this4$_workerDetails === void 0 ? void 0 : _this4$_workerDetails.withSyncedResources(resources);
143
169
  }).then(function (_) {
144
170
  return _client;
145
171
  });
@@ -1660,11 +1686,8 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
1660
1686
  */
1661
1687
  function setupMode(defaults, monacoInstance) {
1662
1688
  var onSchemaChange = new monaco__namespace.Emitter();
1663
- // TODO: when should we dispose of these? seems like monaco-css and monaco-typescript don't dispose of these.
1664
- var disposables = [];
1665
1689
  var semanticTokensProviderRegistrar = semanticTokensProviderRegistrarCreator();
1666
1690
  var client = new WorkerManager(monacoInstance, defaults);
1667
- disposables.push(client);
1668
1691
  var workerAccessor = function workerAccessor(first) {
1669
1692
  var augmentedSetSchema = /*#__PURE__*/function () {
1670
1693
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(schema, worker) {
@@ -1723,34 +1746,21 @@ define('vs/language/kusto/kustoMode', ['exports', 'vs/editor/editor.main', './ma
1723
1746
  });
1724
1747
  });
1725
1748
  };
1726
- disposables.push(monacoInstance.languages.registerCompletionItemProvider(types$1.LANGUAGE_ID, new CompletionAdapter(workerAccessor, defaults.languageSettings)));
1727
- disposables.push(monacoInstance.languages.setMonarchTokensProvider(types$1.LANGUAGE_ID, kustoLanguageDefinition));
1728
- disposables.push(new DiagnosticsAdapter(monacoInstance, types$1.LANGUAGE_ID, workerAccessor, defaults, onSchemaChange.event));
1729
- disposables.push(monacoInstance.languages.registerDocumentRangeFormattingEditProvider(types$1.LANGUAGE_ID, new FormatAdapter(workerAccessor)));
1730
- disposables.push(monacoInstance.languages.registerFoldingRangeProvider(types$1.LANGUAGE_ID, new FoldingAdapter(workerAccessor)));
1731
- disposables.push(monacoInstance.languages.registerDefinitionProvider(types$1.LANGUAGE_ID, new DefinitionAdapter(workerAccessor)));
1732
- disposables.push(monacoInstance.languages.registerRenameProvider(types$1.LANGUAGE_ID, new RenameAdapter(workerAccessor)));
1733
- disposables.push(monacoInstance.languages.registerReferenceProvider(types$1.LANGUAGE_ID, new ReferenceAdapter(workerAccessor)));
1749
+ monacoInstance.languages.registerCompletionItemProvider(types$1.LANGUAGE_ID, new CompletionAdapter(workerAccessor, defaults.languageSettings));
1750
+ monacoInstance.languages.setMonarchTokensProvider(types$1.LANGUAGE_ID, kustoLanguageDefinition);
1751
+ new DiagnosticsAdapter(monacoInstance, types$1.LANGUAGE_ID, workerAccessor, defaults, onSchemaChange.event);
1752
+ monacoInstance.languages.registerDocumentRangeFormattingEditProvider(types$1.LANGUAGE_ID, new FormatAdapter(workerAccessor));
1753
+ monacoInstance.languages.registerFoldingRangeProvider(types$1.LANGUAGE_ID, new FoldingAdapter(workerAccessor));
1754
+ monacoInstance.languages.registerDefinitionProvider(types$1.LANGUAGE_ID, new DefinitionAdapter(workerAccessor));
1755
+ monacoInstance.languages.registerRenameProvider(types$1.LANGUAGE_ID, new RenameAdapter(workerAccessor));
1756
+ monacoInstance.languages.registerReferenceProvider(types$1.LANGUAGE_ID, new ReferenceAdapter(workerAccessor));
1734
1757
  if (defaults.languageSettings.enableHover) {
1735
- disposables.push(monacoInstance.languages.registerHoverProvider(types$1.LANGUAGE_ID, new HoverAdapter(workerAccessor)));
1758
+ monacoInstance.languages.registerHoverProvider(types$1.LANGUAGE_ID, new HoverAdapter(workerAccessor));
1736
1759
  }
1737
1760
  monacoInstance.languages.registerDocumentFormattingEditProvider(types$1.LANGUAGE_ID, new DocumentFormatAdapter(workerAccessor));
1738
1761
  kustoWorker = workerAccessor;
1739
1762
  resolveWorker(workerAccessor);
1740
- disposables.push(monacoInstance.languages.setLanguageConfiguration(types$1.LANGUAGE_ID, kanguageConfiguration));
1741
- return asDisposable(disposables);
1742
- }
1743
- function asDisposable(disposables) {
1744
- return {
1745
- dispose: function dispose() {
1746
- return disposeAll(disposables);
1747
- }
1748
- };
1749
- }
1750
- function disposeAll(disposables) {
1751
- disposables.forEach(function (d) {
1752
- return d.dispose();
1753
- });
1763
+ monacoInstance.languages.setLanguageConfiguration(types$1.LANGUAGE_ID, kanguageConfiguration);
1754
1764
  }
1755
1765
  function getKustoWorker() {
1756
1766
  return workerPromise.then(function () {
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/kustoWorker', ['exports', './main-eff7d47e', './schema-bbdce01a'], (function (exports, main, schema) { 'use strict';
8
+ define('vs/language/kusto/kustoWorker', ['exports', './main-37d643e2', './schema-301c9f75'], (function (exports, main, schema) { 'use strict';
9
9
 
10
10
  function _slicedToArray$2(r, e) { return _arrayWithHoles$2(r) || _iterableToArrayLimit$2(r, e) || _unsupportedIterableToArray$3(r, e) || _nonIterableRest$2(); }
11
11
  function _nonIterableRest$2() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/main-eff7d47e', ['exports'], (function (exports) { 'use strict';
8
+ define('vs/language/kusto/main-37d643e2', ['exports'], (function (exports) { 'use strict';
9
9
 
10
10
  /* --------------------------------------------------------------------------------------------
11
11
  * Copyright (c) Microsoft Corporation. All rights reserved.
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/monaco.contribution', ['require', 'exports', 'vs/editor/editor.main', './types-cf1c0652', './schema-bbdce01a'], (function (require, exports, monaco, types, schema) { 'use strict';
8
+ define('vs/language/kusto/monaco.contribution', ['require', 'exports', 'vs/editor/editor.main', './types-f09c24e4', './schema-301c9f75'], (function (require, exports, monaco, types, schema) { 'use strict';
9
9
 
10
10
  function _interopNamespaceDefault(e) {
11
11
  var n = Object.create(null);
@@ -492,7 +492,6 @@ define('vs/language/kusto/monaco.contribution', ['require', 'exports', 'vs/edito
492
492
  return new Promise(function (resolve, reject) { require(['./kustoMode'], resolve, reject); }).then(callback);
493
493
  }
494
494
  var kustoDefaults = new LanguageServiceDefaultsImpl(defaultLanguageSettings);
495
- var disposable;
496
495
  monaco__namespace.languages.onLanguage('kusto', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
497
496
  return _regeneratorRuntime().wrap(function _callee$(_context) {
498
497
  while (1) switch (_context.prev = _context.next) {
@@ -502,16 +501,11 @@ define('vs/language/kusto/monaco.contribution', ['require', 'exports', 'vs/edito
502
501
  return mode.setupMode(kustoDefaults, monaco__namespace);
503
502
  });
504
503
  case 2:
505
- disposable = _context.sent;
506
- case 3:
507
504
  case "end":
508
505
  return _context.stop();
509
506
  }
510
507
  }, _callee);
511
508
  })));
512
- monaco__namespace.editor.onWillDisposeModel(function (model) {
513
- disposable.dispose();
514
- });
515
509
  monaco__namespace.languages.register({
516
510
  id: types.LANGUAGE_ID,
517
511
  extensions: ['.csl', '.kql']
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/schema-bbdce01a', ['exports'], (function (exports) { 'use strict';
8
+ define('vs/language/kusto/schema-301c9f75', ['exports'], (function (exports) { 'use strict';
9
9
 
10
10
  // Definition of schema object in the context of language services. This model is exposed to consumers of this library.
11
11
 
@@ -1,11 +1,11 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
- define('vs/language/kusto/types-cf1c0652', ['exports'], (function (exports) { 'use strict';
8
+ define('vs/language/kusto/types-f09c24e4', ['exports'], (function (exports) { 'use strict';
9
9
 
10
10
  var LANGUAGE_ID = 'kusto';
11
11
 
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
@@ -8,7 +8,7 @@
8
8
  import * as worker from 'monaco-editor/esm/vs/editor/editor.worker';
9
9
  import * as ls from 'vscode-languageserver-types';
10
10
  import XRegExp from 'xregexp';
11
- import { d as getEntityDataTypeFromCslType, a as getCallName, b as getExpression, g as getCslTypeNameFromClrType } from './schema-e459243d.js';
11
+ import { d as getEntityDataTypeFromCslType, a as getCallName, b as getExpression, g as getCslTypeNameFromClrType } from './schema-688702c2.js';
12
12
  import '@kusto/language-service/bridge.min';
13
13
  import '@kusto/language-service/Kusto.JavaScript.Client.min';
14
14
  import '@kusto/language-service/newtonsoft.json.min';
@@ -1,7 +1,6 @@
1
1
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
2
2
  import type { KustoWorker, LanguageServiceDefaults } from './monaco.contribution';
3
3
  import type { IKustoWorkerImpl } from './kustoWorker';
4
- import type { IDisposable } from 'monaco-editor';
5
4
  export interface AugmentedWorker extends KustoWorker, Omit<IKustoWorkerImpl, 'setSchemaFromShowSchema' | 'getReferencedSymbols'> {
6
5
  }
7
6
  export interface AugmentedWorkerAccessor {
@@ -11,5 +10,5 @@ export interface AugmentedWorkerAccessor {
11
10
  * Called when Kusto language is first needed (a model has the language set)
12
11
  * @param defaults
13
12
  */
14
- export declare function setupMode(defaults: LanguageServiceDefaults, monacoInstance: typeof globalThis.monaco): IDisposable;
13
+ export declare function setupMode(defaults: LanguageServiceDefaults, monacoInstance: typeof globalThis.monaco): void;
15
14
  export declare function getKustoWorker(): Promise<AugmentedWorkerAccessor>;
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
@@ -8,29 +8,34 @@
8
8
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
9
9
  import * as ls from 'vscode-languageserver-types';
10
10
  import debounce from 'lodash-es/debounce';
11
- import { L as LANGUAGE_ID, T as Token, t as tokenTypes } from './globals-60173baa.js';
11
+ import { L as LANGUAGE_ID, T as Token, t as tokenTypes } from './globals-b3e95adf.js';
12
12
 
13
13
  class WorkerManager {
14
14
  constructor(_monacoInstance, defaults) {
15
15
  this._monacoInstance = _monacoInstance;
16
16
  this._defaults = defaults;
17
- this._worker = null;
18
17
  this._idleCheckInterval = self.setInterval(() => this._checkIfIdle(), 30 * 1000);
19
- this._lastUsedTime = 0;
20
18
  this._configChangeListener = this._defaults.onDidChange(() => this._saveStateAndStopWorker());
21
19
  }
22
20
  _stopWorker() {
23
- if (this._worker) {
24
- this._worker.dispose();
25
- this._worker = null;
26
- }
27
- this._client = null;
21
+ const workerToStop = this._workerDetails;
22
+ this._workerDetailsPromise = null;
23
+ this._workerDetails = null;
24
+
25
+ // Ensure disposal occurs only after the last request completes.
26
+ // This is necessary because setting the languageSettings disposes of the worker,
27
+ // causing the setSchema call to remain unresolved, which prevents the semantic tokens provider from being registered.
28
+ setTimeout(async () => {
29
+ if (workerToStop._worker) {
30
+ workerToStop._worker.dispose();
31
+ }
32
+ }, 5000);
28
33
  }
29
34
  _saveStateAndStopWorker() {
30
- if (!this._worker) {
35
+ if (!this._workerDetails?._worker) {
31
36
  return;
32
37
  }
33
- this._worker.getProxy().then(proxy => {
38
+ this._workerDetails?._worker.getProxy().then(proxy => {
34
39
  proxy.getSchema().then(schema => {
35
40
  this._storedState = {
36
41
  schema: schema
@@ -45,25 +50,23 @@ class WorkerManager {
45
50
  this._stopWorker();
46
51
  }
47
52
  _checkIfIdle() {
48
- if (!this._worker) {
53
+ if (!this._workerDetails?._worker) {
49
54
  return;
50
55
  }
51
56
  const maxIdleTime = this._defaults.getWorkerMaxIdleTime();
52
- let timePassedSinceLastUsed = Date.now() - this._lastUsedTime;
57
+ let timePassedSinceLastUsed = Date.now() - this._workerDetails?._lastUsedTime;
53
58
  if (maxIdleTime > 0 && timePassedSinceLastUsed > maxIdleTime) {
54
59
  this._saveStateAndStopWorker();
55
60
  }
56
61
  }
57
62
  _getClient() {
58
- this._lastUsedTime = Date.now();
59
-
60
63
  // Since onDidProvideCompletionItems is not used in web worker, and since functions cannot be trivially serialized (throws exception unable to clone), We remove it here.
61
64
  const {
62
65
  onDidProvideCompletionItems,
63
66
  ...languageSettings
64
67
  } = this._defaults.languageSettings;
65
- if (!this._client) {
66
- this._worker = this._monacoInstance.editor.createWebWorker({
68
+ if (!this._workerDetailsPromise) {
69
+ const worker = this._monacoInstance.editor.createWebWorker({
67
70
  // module that exports the create() method and returns a `KustoWorker` instance
68
71
  moduleId: 'vs/language/kusto/kustoWorker',
69
72
  label: 'kusto',
@@ -73,7 +76,7 @@ class WorkerManager {
73
76
  languageId: 'kusto'
74
77
  }
75
78
  });
76
- this._client = this._worker.getProxy().then(proxy => {
79
+ const client = worker.getProxy().then(proxy => {
77
80
  // push state we held onto before killing the client.
78
81
  if (this._storedState) {
79
82
  return proxy.setSchema(this._storedState.schema).then(() => proxy);
@@ -81,15 +84,23 @@ class WorkerManager {
81
84
  return proxy;
82
85
  }
83
86
  });
87
+ this._workerDetailsPromise = client.then(client => {
88
+ this._workerDetails = {
89
+ _worker: worker,
90
+ _client: client,
91
+ _lastUsedTime: Date.now()
92
+ };
93
+ return this._workerDetails;
94
+ });
84
95
  }
85
- return this._client;
96
+ return this._workerDetailsPromise;
86
97
  }
87
98
  getLanguageServiceWorker(...resources) {
88
99
  let _client;
89
100
  return this._getClient().then(client => {
90
- _client = client;
101
+ _client = client._client;
91
102
  }).then(_ => {
92
- return this._worker.withSyncedResources(resources);
103
+ return this._workerDetails?._worker?.withSyncedResources(resources);
93
104
  }).then(_ => _client);
94
105
  }
95
106
  }
@@ -856,11 +867,8 @@ let workerPromise = new Promise((resolve, reject) => {
856
867
  */
857
868
  function setupMode(defaults, monacoInstance) {
858
869
  const onSchemaChange = new monaco.Emitter();
859
- // TODO: when should we dispose of these? seems like monaco-css and monaco-typescript don't dispose of these.
860
- const disposables = [];
861
870
  const semanticTokensProviderRegistrar = semanticTokensProviderRegistrarCreator();
862
871
  const client = new WorkerManager(monacoInstance, defaults);
863
- disposables.push(client);
864
872
  const workerAccessor = (first, ...more) => {
865
873
  const augmentedSetSchema = async (schema, worker) => {
866
874
  const workerPromise = worker.setSchema(schema);
@@ -887,32 +895,21 @@ function setupMode(defaults, monacoInstance) {
887
895
  }
888
896
  }));
889
897
  };
890
- disposables.push(monacoInstance.languages.registerCompletionItemProvider(LANGUAGE_ID, new CompletionAdapter(workerAccessor, defaults.languageSettings)));
891
- disposables.push(monacoInstance.languages.setMonarchTokensProvider(LANGUAGE_ID, kustoLanguageDefinition));
892
- disposables.push(new DiagnosticsAdapter(monacoInstance, LANGUAGE_ID, workerAccessor, defaults, onSchemaChange.event));
893
- disposables.push(monacoInstance.languages.registerDocumentRangeFormattingEditProvider(LANGUAGE_ID, new FormatAdapter(workerAccessor)));
894
- disposables.push(monacoInstance.languages.registerFoldingRangeProvider(LANGUAGE_ID, new FoldingAdapter(workerAccessor)));
895
- disposables.push(monacoInstance.languages.registerDefinitionProvider(LANGUAGE_ID, new DefinitionAdapter(workerAccessor)));
896
- disposables.push(monacoInstance.languages.registerRenameProvider(LANGUAGE_ID, new RenameAdapter(workerAccessor)));
897
- disposables.push(monacoInstance.languages.registerReferenceProvider(LANGUAGE_ID, new ReferenceAdapter(workerAccessor)));
898
+ monacoInstance.languages.registerCompletionItemProvider(LANGUAGE_ID, new CompletionAdapter(workerAccessor, defaults.languageSettings));
899
+ monacoInstance.languages.setMonarchTokensProvider(LANGUAGE_ID, kustoLanguageDefinition);
900
+ new DiagnosticsAdapter(monacoInstance, LANGUAGE_ID, workerAccessor, defaults, onSchemaChange.event);
901
+ monacoInstance.languages.registerDocumentRangeFormattingEditProvider(LANGUAGE_ID, new FormatAdapter(workerAccessor));
902
+ monacoInstance.languages.registerFoldingRangeProvider(LANGUAGE_ID, new FoldingAdapter(workerAccessor));
903
+ monacoInstance.languages.registerDefinitionProvider(LANGUAGE_ID, new DefinitionAdapter(workerAccessor));
904
+ monacoInstance.languages.registerRenameProvider(LANGUAGE_ID, new RenameAdapter(workerAccessor));
905
+ monacoInstance.languages.registerReferenceProvider(LANGUAGE_ID, new ReferenceAdapter(workerAccessor));
898
906
  if (defaults.languageSettings.enableHover) {
899
- disposables.push(monacoInstance.languages.registerHoverProvider(LANGUAGE_ID, new HoverAdapter(workerAccessor)));
907
+ monacoInstance.languages.registerHoverProvider(LANGUAGE_ID, new HoverAdapter(workerAccessor));
900
908
  }
901
909
  monacoInstance.languages.registerDocumentFormattingEditProvider(LANGUAGE_ID, new DocumentFormatAdapter(workerAccessor));
902
910
  kustoWorker = workerAccessor;
903
911
  resolveWorker(workerAccessor);
904
- disposables.push(monacoInstance.languages.setLanguageConfiguration(LANGUAGE_ID, kanguageConfiguration));
905
- return asDisposable(disposables);
906
- }
907
- function asDisposable(disposables) {
908
- return {
909
- dispose: () => {
910
- return disposeAll(disposables);
911
- }
912
- };
913
- }
914
- function disposeAll(disposables) {
915
- disposables.forEach(d => d.dispose());
912
+ monacoInstance.languages.setLanguageConfiguration(LANGUAGE_ID, kanguageConfiguration);
916
913
  }
917
914
  function getKustoWorker() {
918
915
  return workerPromise.then(() => kustoWorker);
@@ -1,15 +1,15 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
7
7
 
8
8
  import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
9
9
  import { editor } from 'monaco-editor/esm/vs/editor/editor.api';
10
- import { T as Token, L as LANGUAGE_ID } from './globals-60173baa.js';
11
- import { g as getCslTypeNameFromClrType, a as getCallName, b as getExpression, c as getInputParametersAsCslString, d as getEntityDataTypeFromCslType } from './schema-e459243d.js';
12
- export { s as showSchema } from './schema-e459243d.js';
10
+ import { T as Token, L as LANGUAGE_ID } from './globals-b3e95adf.js';
11
+ import { g as getCslTypeNameFromClrType, a as getCallName, b as getExpression, c as getInputParametersAsCslString, d as getEntityDataTypeFromCslType } from './schema-688702c2.js';
12
+ export { s as showSchema } from './schema-688702c2.js';
13
13
 
14
14
  function getCurrentCommandRange(editor, cursorPosition) {
15
15
  const zeroBasedCursorLineNumber = cursorPosition.lineNumber - 1;
@@ -429,12 +429,8 @@ function withMode(callback) {
429
429
  return import('./kustoMode.js').then(callback);
430
430
  }
431
431
  const kustoDefaults = new LanguageServiceDefaultsImpl(defaultLanguageSettings);
432
- let disposable;
433
432
  monaco.languages.onLanguage('kusto', async () => {
434
- disposable = await withMode(mode => mode.setupMode(kustoDefaults, monaco));
435
- });
436
- monaco.editor.onWillDisposeModel(model => {
437
- disposable.dispose();
433
+ await withMode(mode => mode.setupMode(kustoDefaults, monaco));
438
434
  });
439
435
  monaco.languages.register({
440
436
  id: LANGUAGE_ID,
@@ -1,6 +1,6 @@
1
1
  /*!-----------------------------------------------------------------------------
2
2
  * Copyright (c) Microsoft Corporation. All rights reserved.
3
- * monaco-kusto version: 12.0.10(45043a1eff35e1151edde6f70c24b55565dda115)
3
+ * monaco-kusto version: 12.0.11(1f40b10df7cdf22320a5540a3bfc8e2ee7f92bee)
4
4
  * Released under the MIT license
5
5
  * https://https://github.com/Azure/monaco-kusto/blob/master/README.md
6
6
  *-----------------------------------------------------------------------------*/
@@ -6,10 +6,9 @@ export declare class WorkerManager {
6
6
  private _storedState;
7
7
  private _defaults;
8
8
  private _idleCheckInterval;
9
- private _lastUsedTime;
10
9
  private _configChangeListener;
11
- private _worker;
12
- private _client;
10
+ private _workerDetails;
11
+ private _workerDetailsPromise;
13
12
  constructor(_monacoInstance: typeof monaco, defaults: LanguageServiceDefaults);
14
13
  private _stopWorker;
15
14
  private _saveStateAndStopWorker;