@theia/core 1.71.0-next.43 → 1.71.0-next.49
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/lib/browser/catalog.json +30 -0
- package/lib/node/messaging/default-messaging-service.d.ts.map +1 -1
- package/lib/node/messaging/default-messaging-service.js +1 -0
- package/lib/node/messaging/default-messaging-service.js.map +1 -1
- package/lib/node/messaging/test/default-messaging-service.spec.d.ts +2 -0
- package/lib/node/messaging/test/default-messaging-service.spec.d.ts.map +1 -0
- package/lib/node/messaging/test/default-messaging-service.spec.js +81 -0
- package/lib/node/messaging/test/default-messaging-service.spec.js.map +1 -0
- package/package.json +4 -4
- package/src/node/messaging/default-messaging-service.ts +1 -0
- package/src/node/messaging/test/default-messaging-service.spec.ts +85 -0
package/lib/browser/catalog.json
CHANGED
|
@@ -1566,6 +1566,18 @@
|
|
|
1566
1566
|
"fileMatch": ["**/.claude/keybindings.json"],
|
|
1567
1567
|
"url": "https://www.schemastore.org/claude-code-keybindings.json"
|
|
1568
1568
|
},
|
|
1569
|
+
{
|
|
1570
|
+
"name": "Claude Code Plugin Manifest",
|
|
1571
|
+
"description": "Manifest (.claude-plugin/plugin.json) for a Claude Code plugin",
|
|
1572
|
+
"fileMatch": ["**/.claude-plugin/plugin.json"],
|
|
1573
|
+
"url": "https://www.schemastore.org/claude-code-plugin-manifest.json"
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
"name": "Claude Code Plugin Marketplace",
|
|
1577
|
+
"description": "Marketplace manifest (.claude-plugin/marketplace.json) listing Claude Code plugins",
|
|
1578
|
+
"fileMatch": ["**/.claude-plugin/marketplace.json"],
|
|
1579
|
+
"url": "https://www.schemastore.org/claude-code-marketplace.json"
|
|
1580
|
+
},
|
|
1569
1581
|
{
|
|
1570
1582
|
"name": "Claude Code Settings",
|
|
1571
1583
|
"description": "Configuration file for Claude Code",
|
|
@@ -5149,6 +5161,12 @@
|
|
|
5149
5161
|
"fileMatch": ["podbard.yaml"],
|
|
5150
5162
|
"url": "https://raw.githubusercontent.com/Songmu/podbard/main/schema.yaml"
|
|
5151
5163
|
},
|
|
5164
|
+
{
|
|
5165
|
+
"name": "Podman Desktop Extension",
|
|
5166
|
+
"description": "Podman Desktop extension package.json manifest",
|
|
5167
|
+
"fileMatch": [],
|
|
5168
|
+
"url": "https://raw.githubusercontent.com/podman-desktop/podman-desktop/main/schemas/extension-schema.json"
|
|
5169
|
+
},
|
|
5152
5170
|
{
|
|
5153
5171
|
"name": "POPxf",
|
|
5154
5172
|
"description": "Polynomial Observable Predictions in High-Energy Physics",
|
|
@@ -5655,6 +5673,18 @@
|
|
|
5655
5673
|
"fileMatch": ["replit.toml"],
|
|
5656
5674
|
"url": "https://www.schemastore.org/replit.json"
|
|
5657
5675
|
},
|
|
5676
|
+
{
|
|
5677
|
+
"name": "reposets Configuration",
|
|
5678
|
+
"description": "Configuration for the reposets CLI tool for syncing GitHub repository settings",
|
|
5679
|
+
"fileMatch": ["reposets.config.toml", "reposets.config.json"],
|
|
5680
|
+
"url": "https://raw.githubusercontent.com/spencerbeggs/reposets/main/package/schemas/reposets.config.schema.json"
|
|
5681
|
+
},
|
|
5682
|
+
{
|
|
5683
|
+
"name": "reposets Credentials",
|
|
5684
|
+
"description": "Authentication profiles for the reposets CLI tool",
|
|
5685
|
+
"fileMatch": ["reposets.credentials.toml", "reposets.credentials.json"],
|
|
5686
|
+
"url": "https://raw.githubusercontent.com/spencerbeggs/reposets/main/package/schemas/reposets.credentials.schema.json"
|
|
5687
|
+
},
|
|
5658
5688
|
{
|
|
5659
5689
|
"name": "*.resjson",
|
|
5660
5690
|
"description": "Windows App localization file",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-messaging-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/default-messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAA6D,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAsB,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,eAAO,MAAM,kBAAkB,eAA+B,CAAC;AAC/D,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,qBACa,uBAAwB,YAAW,gBAAgB,EAAE,8BAA8B;IAE5F,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAGxE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAGvF,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtF,SAAS,CAAC,QAAQ,CAAC,eAAe,8BAAqC;IAEvE,UAAU,IAAI,IAAI;IAOlB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI5H,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIrH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAWlD,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"default-messaging-service.d.ts","sourceRoot":"","sources":["../../../src/node/messaging/default-messaging-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAA6D,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,OAAO,EAAsB,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAExE,eAAO,MAAM,kBAAkB,eAA+B,CAAC;AAC/D,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,qBACa,uBAAwB,YAAW,gBAAgB,EAAE,8BAA8B;IAE5F,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,yBAAyB,CAAC;IAGxE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAGvF,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAEtF,SAAS,CAAC,QAAQ,CAAC,eAAe,8BAAqC;IAEvE,UAAU,IAAI,IAAI;IAOlB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI5H,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIrH,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAWlD,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS;IAOhE,SAAS,CAAC,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC;CAcvF;AAED,qBAAa,kBAAkB,CAAC,CAAC;IAIzB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAHrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,KAAK,MAAM,GAAG,KAAK,CAAC,EAAE,CAAM;gBAG/D,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,YAAA;IAGrD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAahG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK;CAgBrD"}
|
|
@@ -55,6 +55,7 @@ let DefaultMessagingService = class DefaultMessagingService {
|
|
|
55
55
|
createMainChannelContainer(socket) {
|
|
56
56
|
const connectionContainer = this.container.createChild();
|
|
57
57
|
connectionContainer.bind(exports.MainChannel).toConstantValue(socket);
|
|
58
|
+
socket.onClose(() => connectionContainer.unbindAllAsync().catch(e => console.error(e)));
|
|
58
59
|
return connectionContainer;
|
|
59
60
|
}
|
|
60
61
|
getConnectionChannelHandlers(socket) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-messaging-service.js","sourceRoot":"","sources":["../../../src/node/messaging/default-messaging-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,yCAA6E;AAC7E,yCAA+G;AAC/G,2DAAuD;AACvD,+EAA0E;AAC1E,sCAAuC;AACvC,8DAA+E;AAC/E,+EAA0E;AAG7D,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAClD,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAG1C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QAagB,oBAAe,GAAG,IAAI,kBAAkB,EAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"default-messaging-service.js","sourceRoot":"","sources":["../../../src/node/messaging/default-messaging-service.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,yCAA6E;AAC7E,yCAA+G;AAC/G,2DAAuD;AACvD,+EAA0E;AAC1E,sCAAuC;AACvC,8DAA+E;AAC/E,+EAA0E;AAG7D,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAClD,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAG1C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QAagB,oBAAe,GAAG,IAAI,kBAAkB,EAAW,CAAC;IAiD3E,CAAC;IA/CG,UAAU;QACN,IAAI,CAAC,yBAAyB,CAAC,qBAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3F,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC/D,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,yBAAyB,CAAC,IAAY,EAAE,QAA6E;QACjH,IAAI,CAAC,yBAAyB,CAAC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;IAED,sBAAsB,CAAC,IAAY,EAAE,QAAyE;QAC1G,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpF,CAAC;IAES,gBAAgB,CAAC,OAAgB;QACvC,MAAM,WAAW,GAAG,IAAI,4BAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QACnE,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;YACjC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;gBACjE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,oCAAoC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAChG,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAES,0BAA0B,CAAC,MAAe;QAChD,MAAM,mBAAmB,GAAc,IAAI,CAAC,SAAS,CAAC,WAAW,EAAe,CAAC;QACjF,mBAAmB,CAAC,IAAI,CAAC,mBAAW,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAES,4BAA4B,CAAC,MAAe;QAClD,MAAM,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACpE,IAAA,iCAAwB,EAAC,mBAAmB,EAAE,0BAAiB,CAAC,CAAC;QACjE,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACvE,MAAM,yBAAyB,GAAG,IAAI,kBAAkB,CAAU,IAAI,CAAC,eAAe,CAAC,CAAC;QACxF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,QAAQ,CAA0C,6BAAoB,EAAE,0BAAiB,CAAC,CAAC;QAC1I,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACxE,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE;gBAClE,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,yBAAyB,CAAC;IACrC,CAAC;CAEJ,CAAA;AA9DY,0DAAuB;AAEb;IADlB,IAAA,kBAAM,EAAC,0BAAkB,CAAC;;0DACwB;AAGhC;IADlB,IAAA,kBAAM,EAAC,uDAAyB,CAAC;;0EACsC;AAGrD;IADlB,IAAA,kBAAM,EAAC,6BAAoB,CAAC;IAAE,IAAA,iBAAK,EAAC,uDAAyB,CAAC;;kEACwB;AAGpE;IADlB,IAAA,kBAAM,EAAC,6BAAoB,CAAC;IAAE,IAAA,iBAAK,EAAC,oCAAgB,CAAC,YAAY,CAAC;;8DACmB;kCAX7E,uBAAuB;IADnC,IAAA,sBAAU,GAAE;GACA,uBAAuB,CA8DnC;AAED,MAAa,kBAAkB;IAG3B,YACuB,MAA8B;QAA9B,WAAM,GAAN,MAAM,CAAwB;QAHlC,aAAQ,GAAwD,EAAE,CAAC;IAIlF,CAAC;IAEL,IAAI,CAAC,IAAY,EAAE,QAAsE;QACrF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAU,EAAkB,EAAE;YACzD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,UAAa;QAC7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,EAAE,CAAC;oBACT,OAAO,MAAM,CAAC;gBAClB,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AApCD,gDAoCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-messaging-service.spec.d.ts","sourceRoot":"","sources":["../../../../src/node/messaging/test/default-messaging-service.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const tslib_1 = require("tslib");
|
|
19
|
+
const chai_1 = require("chai");
|
|
20
|
+
const inversify_1 = require("inversify");
|
|
21
|
+
const common_1 = require("../../../common");
|
|
22
|
+
const channel_1 = require("../../../common/message-rpc/channel");
|
|
23
|
+
const uint8_array_message_buffer_1 = require("../../../common/message-rpc/uint8-array-message-buffer");
|
|
24
|
+
const connection_container_module_1 = require("../connection-container-module");
|
|
25
|
+
const default_messaging_service_1 = require("../default-messaging-service");
|
|
26
|
+
const frontend_connection_service_1 = require("../frontend-connection-service");
|
|
27
|
+
const messaging_service_1 = require("../messaging-service");
|
|
28
|
+
describe('DefaultMessagingService', () => {
|
|
29
|
+
describe('when a frontend connection closes', () => {
|
|
30
|
+
it('disposes the connection-scoped child container, invoking @preDestroy on bound singleton services', async () => {
|
|
31
|
+
let canaryDisposed = false;
|
|
32
|
+
let CanaryConnectionHandler = class CanaryConnectionHandler {
|
|
33
|
+
constructor() {
|
|
34
|
+
this.path = 'canary';
|
|
35
|
+
}
|
|
36
|
+
onConnection(_channel) { }
|
|
37
|
+
onPreDestroy() {
|
|
38
|
+
canaryDisposed = true;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
tslib_1.__decorate([
|
|
42
|
+
(0, inversify_1.preDestroy)(),
|
|
43
|
+
tslib_1.__metadata("design:type", Function),
|
|
44
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
45
|
+
tslib_1.__metadata("design:returntype", void 0)
|
|
46
|
+
], CanaryConnectionHandler.prototype, "onPreDestroy", null);
|
|
47
|
+
CanaryConnectionHandler = tslib_1.__decorate([
|
|
48
|
+
(0, inversify_1.injectable)()
|
|
49
|
+
], CanaryConnectionHandler);
|
|
50
|
+
const canaryModule = connection_container_module_1.ConnectionContainerModule.create(({ bind }) => {
|
|
51
|
+
bind(CanaryConnectionHandler).toSelf().inSingletonScope();
|
|
52
|
+
bind(common_1.ConnectionHandler).toService(CanaryConnectionHandler);
|
|
53
|
+
});
|
|
54
|
+
const container = new inversify_1.Container();
|
|
55
|
+
container.bind(default_messaging_service_1.MessagingContainer).toConstantValue(container);
|
|
56
|
+
container.bind(default_messaging_service_1.DefaultMessagingService).toSelf().inSingletonScope();
|
|
57
|
+
container.bind(connection_container_module_1.ConnectionContainerModule).toConstantValue(canaryModule);
|
|
58
|
+
(0, common_1.bindContributionProvider)(container, connection_container_module_1.ConnectionContainerModule);
|
|
59
|
+
(0, common_1.bindContributionProvider)(container, messaging_service_1.MessagingService.Contribution);
|
|
60
|
+
let serviceHandler;
|
|
61
|
+
const frontendConnectionService = {
|
|
62
|
+
registerConnectionHandler(path, callback) {
|
|
63
|
+
if (path === common_1.servicesPath) {
|
|
64
|
+
serviceHandler = callback;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
container.bind(frontend_connection_service_1.FrontendConnectionService).toConstantValue(frontendConnectionService);
|
|
69
|
+
const messagingService = container.get(default_messaging_service_1.DefaultMessagingService);
|
|
70
|
+
messagingService.initialize();
|
|
71
|
+
(0, chai_1.expect)(serviceHandler, 'connection handler not registered on the services path').to.not.be.undefined;
|
|
72
|
+
const mainChannel = new channel_1.BasicChannel(() => new uint8_array_message_buffer_1.Uint8ArrayWriteBuffer());
|
|
73
|
+
serviceHandler({}, mainChannel);
|
|
74
|
+
(0, chai_1.expect)(canaryDisposed, 'canary should not be disposed before the channel is closed').to.be.false;
|
|
75
|
+
mainChannel.onCloseEmitter.fire({ reason: 'frontend connection closed' });
|
|
76
|
+
await new Promise(resolve => setImmediate(resolve));
|
|
77
|
+
(0, chai_1.expect)(canaryDisposed, 'canary @preDestroy was not invoked').to.be.true;
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=default-messaging-service.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-messaging-service.spec.js","sourceRoot":"","sources":["../../../../src/node/messaging/test/default-messaging-service.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,+BAA8B;AAC9B,yCAA8D;AAC9D,4CAA4F;AAC5F,iEAA4E;AAC5E,uGAA+F;AAC/F,gFAA2E;AAC3E,4EAA2F;AAC3F,gFAA2E;AAC3E,4DAAwD;AAExD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IAErC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAE/C,EAAE,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;YAC9G,IAAI,cAAc,GAAG,KAAK,CAAC;YAG3B,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;gBAA7B;oBACa,SAAI,GAAG,QAAQ,CAAC;gBAO7B,CAAC;gBANG,YAAY,CAAC,QAAiB,IAA2C,CAAC;gBAGhE,YAAY;oBAClB,cAAc,GAAG,IAAI,CAAC;gBAC1B,CAAC;aACJ,CAAA;YAHa;gBADT,IAAA,sBAAU,GAAE;;;;uEAGZ;YAPC,uBAAuB;gBAD5B,IAAA,sBAAU,GAAE;eACP,uBAAuB,CAQ5B;YAED,MAAM,YAAY,GAAG,uDAAyB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC/D,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;gBAC1D,IAAI,CAAC,0BAAiB,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,8CAAkB,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC9D,SAAS,CAAC,IAAI,CAAC,mDAAuB,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;YACpE,SAAS,CAAC,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACxE,IAAA,iCAAwB,EAAC,SAAS,EAAE,uDAAyB,CAAC,CAAC;YAC/D,IAAA,iCAAwB,EAAC,SAAS,EAAE,oCAAgB,CAAC,YAAY,CAAC,CAAC;YAEnE,IAAI,cAAiG,CAAC;YACtG,MAAM,yBAAyB,GAA8B;gBACzD,yBAAyB,CAAC,IAAI,EAAE,QAAQ;oBACpC,IAAI,IAAI,KAAK,qBAAY,EAAE,CAAC;wBACxB,cAAc,GAAG,QAAQ,CAAC;oBAC9B,CAAC;gBACL,CAAC;aACJ,CAAC;YACF,SAAS,CAAC,IAAI,CAAC,uDAAyB,CAAC,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;YAErF,MAAM,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC,mDAAuB,CAAC,CAAC;YAChE,gBAAgB,CAAC,UAAU,EAAE,CAAC;YAE9B,IAAA,aAAM,EAAC,cAAc,EAAE,wDAAwD,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;YAErG,MAAM,WAAW,GAAG,IAAI,sBAAY,CAAC,GAAG,EAAE,CAAC,IAAI,kDAAqB,EAAE,CAAC,CAAC;YACxE,cAAe,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAEjC,IAAA,aAAM,EAAC,cAAc,EAAE,4DAA4D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAEjG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YAE1D,IAAA,aAAM,EAAC,cAAc,EAAE,oCAAoC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC5E,CAAC,CAAC,CAAC;IAEP,CAAC,CAAC,CAAC;AAEP,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/core",
|
|
3
|
-
"version": "1.71.0-next.
|
|
3
|
+
"version": "1.71.0-next.49+ff8893f59",
|
|
4
4
|
"description": "Theia is a cloud & desktop IDE framework implemented in TypeScript.",
|
|
5
5
|
"main": "lib/common/index.js",
|
|
6
6
|
"typings": "lib/common/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"@lumino/virtualdom": "^2.0.4",
|
|
18
18
|
"@lumino/widgets": "2.7.5",
|
|
19
19
|
"@parcel/watcher": "^2.5.6",
|
|
20
|
-
"@theia/application-package": "1.71.0-next.
|
|
21
|
-
"@theia/request": "1.71.0-next.
|
|
20
|
+
"@theia/application-package": "1.71.0-next.49+ff8893f59",
|
|
21
|
+
"@theia/request": "1.71.0-next.49+ff8893f59",
|
|
22
22
|
"@types/body-parser": "^1.19.6",
|
|
23
23
|
"@types/express": "^4.17.21",
|
|
24
24
|
"@types/fs-extra": "^4.0.2",
|
|
@@ -221,5 +221,5 @@
|
|
|
221
221
|
"nyc": {
|
|
222
222
|
"extends": "../../configs/nyc.json"
|
|
223
223
|
},
|
|
224
|
-
"gitHead": "
|
|
224
|
+
"gitHead": "ff8893f5957f8e505176ecd8c3ef10d722d47172"
|
|
225
225
|
}
|
|
@@ -71,6 +71,7 @@ export class DefaultMessagingService implements MessagingService, BackendApplica
|
|
|
71
71
|
protected createMainChannelContainer(socket: Channel): Container {
|
|
72
72
|
const connectionContainer: Container = this.container.createChild() as Container;
|
|
73
73
|
connectionContainer.bind(MainChannel).toConstantValue(socket);
|
|
74
|
+
socket.onClose(() => connectionContainer.unbindAllAsync().catch(e => console.error(e)));
|
|
74
75
|
return connectionContainer;
|
|
75
76
|
}
|
|
76
77
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 EclipseSource and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { expect } from 'chai';
|
|
18
|
+
import { Container, injectable, preDestroy } from 'inversify';
|
|
19
|
+
import { ConnectionHandler, bindContributionProvider, servicesPath } from '../../../common';
|
|
20
|
+
import { BasicChannel, Channel } from '../../../common/message-rpc/channel';
|
|
21
|
+
import { Uint8ArrayWriteBuffer } from '../../../common/message-rpc/uint8-array-message-buffer';
|
|
22
|
+
import { ConnectionContainerModule } from '../connection-container-module';
|
|
23
|
+
import { DefaultMessagingService, MessagingContainer } from '../default-messaging-service';
|
|
24
|
+
import { FrontendConnectionService } from '../frontend-connection-service';
|
|
25
|
+
import { MessagingService } from '../messaging-service';
|
|
26
|
+
|
|
27
|
+
describe('DefaultMessagingService', () => {
|
|
28
|
+
|
|
29
|
+
describe('when a frontend connection closes', () => {
|
|
30
|
+
|
|
31
|
+
it('disposes the connection-scoped child container, invoking @preDestroy on bound singleton services', async () => {
|
|
32
|
+
let canaryDisposed = false;
|
|
33
|
+
|
|
34
|
+
@injectable()
|
|
35
|
+
class CanaryConnectionHandler implements ConnectionHandler {
|
|
36
|
+
readonly path = 'canary';
|
|
37
|
+
onConnection(_channel: Channel): void { /* not relevant for this test */ }
|
|
38
|
+
|
|
39
|
+
@preDestroy()
|
|
40
|
+
protected onPreDestroy(): void {
|
|
41
|
+
canaryDisposed = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const canaryModule = ConnectionContainerModule.create(({ bind }) => {
|
|
46
|
+
bind(CanaryConnectionHandler).toSelf().inSingletonScope();
|
|
47
|
+
bind(ConnectionHandler).toService(CanaryConnectionHandler);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const container = new Container();
|
|
51
|
+
container.bind(MessagingContainer).toConstantValue(container);
|
|
52
|
+
container.bind(DefaultMessagingService).toSelf().inSingletonScope();
|
|
53
|
+
container.bind(ConnectionContainerModule).toConstantValue(canaryModule);
|
|
54
|
+
bindContributionProvider(container, ConnectionContainerModule);
|
|
55
|
+
bindContributionProvider(container, MessagingService.Contribution);
|
|
56
|
+
|
|
57
|
+
let serviceHandler: ((params: MessagingService.PathParams, mainChannel: Channel) => void) | undefined;
|
|
58
|
+
const frontendConnectionService: FrontendConnectionService = {
|
|
59
|
+
registerConnectionHandler(path, callback): void {
|
|
60
|
+
if (path === servicesPath) {
|
|
61
|
+
serviceHandler = callback;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
container.bind(FrontendConnectionService).toConstantValue(frontendConnectionService);
|
|
66
|
+
|
|
67
|
+
const messagingService = container.get(DefaultMessagingService);
|
|
68
|
+
messagingService.initialize();
|
|
69
|
+
|
|
70
|
+
expect(serviceHandler, 'connection handler not registered on the services path').to.not.be.undefined;
|
|
71
|
+
|
|
72
|
+
const mainChannel = new BasicChannel(() => new Uint8ArrayWriteBuffer());
|
|
73
|
+
serviceHandler!({}, mainChannel);
|
|
74
|
+
|
|
75
|
+
expect(canaryDisposed, 'canary should not be disposed before the channel is closed').to.be.false;
|
|
76
|
+
|
|
77
|
+
mainChannel.onCloseEmitter.fire({ reason: 'frontend connection closed' });
|
|
78
|
+
await new Promise<void>(resolve => setImmediate(resolve));
|
|
79
|
+
|
|
80
|
+
expect(canaryDisposed, 'canary @preDestroy was not invoked').to.be.true;
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
});
|