roku-debug 0.21.18 → 0.21.20

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 (68) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/LaunchConfiguration.d.ts +7 -0
  3. package/dist/adapters/DebugProtocolAdapter.d.ts +1 -1
  4. package/dist/adapters/DebugProtocolAdapter.js.map +1 -1
  5. package/dist/adapters/TelnetAdapter.d.ts +2 -0
  6. package/dist/adapters/TelnetAdapter.js +6 -0
  7. package/dist/adapters/TelnetAdapter.js.map +1 -1
  8. package/dist/adapters/customVariables/ifGetMessagePort.js +3 -2
  9. package/dist/adapters/customVariables/ifGetMessagePort.js.map +1 -1
  10. package/dist/adapters/customVariables/ifImageMetadata.js +4 -4
  11. package/dist/adapters/customVariables/ifImageMetadata.js.map +1 -1
  12. package/dist/adapters/customVariables/ifRegion.js +2 -2
  13. package/dist/adapters/customVariables/ifRegion.js.map +1 -1
  14. package/dist/adapters/customVariables/ifSGNodeChildren.js +1 -1
  15. package/dist/adapters/customVariables/ifSGNodeChildren.js.map +1 -1
  16. package/dist/adapters/customVariables/ifSGNodeField.js +1 -1
  17. package/dist/adapters/customVariables/ifSGNodeField.js.map +1 -1
  18. package/dist/adapters/customVariables/ifSGNodeHttpAgentAccess.js +3 -2
  19. package/dist/adapters/customVariables/ifSGNodeHttpAgentAccess.js.map +1 -1
  20. package/dist/adapters/customVariables/ifSGScreen.js +3 -3
  21. package/dist/adapters/customVariables/ifSGScreen.js.map +1 -1
  22. package/dist/adapters/customVariables/ifSocket.js +6 -6
  23. package/dist/adapters/customVariables/ifSocket.js.map +1 -1
  24. package/dist/adapters/customVariables/ifSprite.js +2 -2
  25. package/dist/adapters/customVariables/ifSprite.js.map +1 -1
  26. package/dist/adapters/customVariables/ifVideoPlayer.js +2 -2
  27. package/dist/adapters/customVariables/ifVideoPlayer.js.map +1 -1
  28. package/dist/adapters/customVariables/ifXMLElement.js +4 -4
  29. package/dist/adapters/customVariables/ifXMLElement.js.map +1 -1
  30. package/dist/adapters/customVariables/ifXMLList.js +4 -4
  31. package/dist/adapters/customVariables/ifXMLList.js.map +1 -1
  32. package/dist/bsc/BscProject.d.ts +27 -0
  33. package/dist/bsc/BscProject.js +50 -0
  34. package/dist/bsc/BscProject.js.map +1 -0
  35. package/dist/bsc/BscProjectThreaded.d.ts +45 -0
  36. package/dist/bsc/BscProjectThreaded.js +90 -0
  37. package/dist/bsc/BscProjectThreaded.js.map +1 -0
  38. package/dist/bsc/threading/BscProjectWorkerPool.d.ts +5 -0
  39. package/dist/bsc/threading/BscProjectWorkerPool.js +29 -0
  40. package/dist/bsc/threading/BscProjectWorkerPool.js.map +1 -0
  41. package/dist/bsc/threading/ThreadMessageHandler.d.ts +99 -0
  42. package/dist/bsc/threading/ThreadMessageHandler.js +138 -0
  43. package/dist/bsc/threading/ThreadMessageHandler.js.map +1 -0
  44. package/dist/bsc/threading/ThreadRunner.d.ts +30 -0
  45. package/dist/bsc/threading/ThreadRunner.js +50 -0
  46. package/dist/bsc/threading/ThreadRunner.js.map +1 -0
  47. package/dist/bsc/threading/WorkerPool.d.ts +38 -0
  48. package/dist/bsc/threading/WorkerPool.js +78 -0
  49. package/dist/bsc/threading/WorkerPool.js.map +1 -0
  50. package/dist/debugSession/BrightScriptDebugSession.d.ts +16 -0
  51. package/dist/debugSession/BrightScriptDebugSession.js +342 -23
  52. package/dist/debugSession/BrightScriptDebugSession.js.map +1 -1
  53. package/dist/debugSession/ecpRegistryUtils.d.ts +11 -0
  54. package/dist/debugSession/ecpRegistryUtils.js +168 -0
  55. package/dist/debugSession/ecpRegistryUtils.js.map +1 -0
  56. package/dist/interfaces.d.ts +12 -0
  57. package/dist/managers/BreakpointManager.d.ts +10 -0
  58. package/dist/managers/BreakpointManager.js +15 -5
  59. package/dist/managers/BreakpointManager.js.map +1 -1
  60. package/dist/managers/ProjectManager.d.ts +31 -12
  61. package/dist/managers/ProjectManager.js +61 -9
  62. package/dist/managers/ProjectManager.js.map +1 -1
  63. package/dist/util.d.ts +10 -1
  64. package/dist/util.js +36 -0
  65. package/dist/util.js.map +1 -1
  66. package/package.json +2 -2
  67. package/roku-debug-0.21.20.tgz +0 -0
  68. package/roku-debug-0.21.18.tgz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ifSprite.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifSprite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifSprite.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifSprite.ts"],"names":[],"mappings":"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"}
@@ -23,8 +23,8 @@ function pushIfVideoPlayerVariables(adapter, expression, container) {
23
23
  });
24
24
  (0, utils_1.pushCustomVariableToContainer)(adapter, container, {
25
25
  name: '$captionRenderer',
26
- type: 'roCaptionRenderer',
27
- presentationHint: { kind: 'virtual', lazy: true },
26
+ type: VariablesResponse_1.VariableType.Object,
27
+ presentationHint: { kind: 'virtual' },
28
28
  evaluateName: `${expression}.GetCaptionRenderer()`,
29
29
  value: '',
30
30
  children: []
@@ -1 +1 @@
1
- {"version":3,"file":"ifVideoPlayer.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifVideoPlayer.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,4FAA4F;AAC5F,SAAgB,0BAA0B,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IACtH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,gCAAY,CAAC,OAAO;QAC1B,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,wBAAwB;QACnD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,gCAAY,CAAC,KAAK;QACxB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,mBAAmB;QAC9C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,mBAAmB;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,uBAAuB;QAClD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AA3BD,gEA2BC"}
1
+ {"version":3,"file":"ifVideoPlayer.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifVideoPlayer.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,4FAA4F;AAC5F,SAAgB,0BAA0B,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IACtH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,mBAAmB;QACzB,IAAI,EAAE,gCAAY,CAAC,OAAO;QAC1B,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,wBAAwB;QACnD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,gCAAY,CAAC,KAAK;QACxB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,mBAAmB;QAC9C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,kBAAkB;QACxB,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,uBAAuB;QAClD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AA3BD,gEA2BC"}
@@ -39,16 +39,16 @@ function pushIfXMLElementVariables(adapter, expression, container) {
39
39
  });
40
40
  (0, utils_1.pushCustomVariableToContainer)(adapter, container, {
41
41
  name: '$childElements',
42
- type: '',
43
- presentationHint: { kind: 'virtual', lazy: true },
42
+ type: VariablesResponse_1.VariableType.List,
43
+ presentationHint: { kind: 'virtual' },
44
44
  evaluateName: `${expression}.GetChildElements()`,
45
45
  value: '',
46
46
  children: []
47
47
  });
48
48
  (0, utils_1.pushCustomVariableToContainer)(adapter, container, {
49
49
  name: '$childNodes',
50
- type: '',
51
- presentationHint: { kind: 'virtual', lazy: true },
50
+ type: VariablesResponse_1.VariableType.List,
51
+ presentationHint: { kind: 'virtual' },
52
52
  evaluateName: `${expression}.GetChildNodes()`,
53
53
  value: '',
54
54
  children: []
@@ -1 +1 @@
1
- {"version":3,"file":"ifXMLElement.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifXMLElement.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,2FAA2F;AAC3F,SAAgB,yBAAyB,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IACrH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gCAAY,CAAC,gBAAgB;QACnC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,gCAAY,CAAC,gBAAgB;QACpC,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,qBAAqB;QAChD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AAtDD,8DAsDC"}
1
+ {"version":3,"file":"ifXMLElement.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifXMLElement.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,2FAA2F;AAC3F,SAAgB,yBAAyB,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IACrH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gCAAY,CAAC,gBAAgB;QACnC,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,gCAAY,CAAC,gBAAgB;QACpC,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,gCAAY,CAAC,IAAI;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,qBAAqB;QAChD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gCAAY,CAAC,IAAI;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AAtDD,8DAsDC"}
@@ -7,8 +7,8 @@ const utils_1 = require("./utils");
7
7
  function pushIfXMLListVariables(adapter, expression, container) {
8
8
  (0, utils_1.pushCustomVariableToContainer)(adapter, container, {
9
9
  name: '$attributes',
10
- type: '',
11
- presentationHint: { kind: 'virtual', lazy: true },
10
+ type: VariablesResponse_1.VariableType.List,
11
+ presentationHint: { kind: 'virtual' },
12
12
  evaluateName: `${expression}.GetAttributes()`,
13
13
  value: '',
14
14
  children: []
@@ -23,8 +23,8 @@ function pushIfXMLListVariables(adapter, expression, container) {
23
23
  });
24
24
  (0, utils_1.pushCustomVariableToContainer)(adapter, container, {
25
25
  name: '$childElements',
26
- type: '',
27
- presentationHint: { kind: 'virtual', lazy: true },
26
+ type: VariablesResponse_1.VariableType.List,
27
+ presentationHint: { kind: 'virtual' },
28
28
  evaluateName: `${expression}.GetChildElements()`,
29
29
  value: '',
30
30
  children: []
@@ -1 +1 @@
1
- {"version":3,"file":"ifXMLList.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifXMLList.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,wFAAwF;AACxF,SAAgB,sBAAsB,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IAClH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,EAAE;QACR,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,qBAAqB;QAChD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AA3BD,wDA2BC"}
1
+ {"version":3,"file":"ifXMLList.js","sourceRoot":"","sources":["../../../src/adapters/customVariables/ifXMLList.ts"],"names":[],"mappings":";;;AAAA,8FAAsF;AAEtF,mCAAwD;AAExD,wFAAwF;AACxF,SAAgB,sBAAsB,CAAC,OAA6B,EAAE,UAAkB,EAAE,SAA4B;IAClH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,gCAAY,CAAC,IAAI;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,kBAAkB;QAC7C,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,OAAO;QACb,IAAI,EAAE,gCAAY,CAAC,MAAM;QACzB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;QACjD,YAAY,EAAE,GAAG,UAAU,YAAY;QACvC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;IAEH,IAAA,qCAA6B,EAAC,OAAO,EAAE,SAAS,EAAE;QAC9C,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,gCAAY,CAAC,IAAI;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACrC,YAAY,EAAE,GAAG,UAAU,qBAAqB;QAChD,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;KACf,CAAC,CAAC;AACP,CAAC;AA3BD,wDA2BC"}
@@ -0,0 +1,27 @@
1
+ import { ProgramBuilder } from 'brighterscript';
2
+ import type { MaybePromise } from '../interfaces';
3
+ import type { DebugProtocol } from '@vscode/debugprotocol';
4
+ /**
5
+ * Class that wraps the BrighterScript ProgramBuilder
6
+ */
7
+ export declare class BscProject {
8
+ private programBuilder;
9
+ /**
10
+ * Activate the ProgramBuilder and run it (using any options provided)
11
+ * @param options
12
+ */
13
+ activate(options: Parameters<ProgramBuilder['run']>[0]): Promise<void>;
14
+ /**
15
+ * Get all of the functions available for all scopes for this file.
16
+ * @param relativePath path to the file relative to rootDir
17
+ * @returns
18
+ */
19
+ getScopeFunctionsForFile(options: {
20
+ relativePath: string;
21
+ }): MaybePromise<Array<ScopeFunction>>;
22
+ dispose(): void;
23
+ }
24
+ export interface ScopeFunction {
25
+ name: string;
26
+ completionItemKind: DebugProtocol.CompletionItemType;
27
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BscProject = void 0;
4
+ const brighterscript_1 = require("brighterscript");
5
+ /**
6
+ * Class that wraps the BrighterScript ProgramBuilder
7
+ */
8
+ class BscProject {
9
+ /**
10
+ * Activate the ProgramBuilder and run it (using any options provided)
11
+ * @param options
12
+ */
13
+ async activate(options) {
14
+ this.programBuilder = new brighterscript_1.ProgramBuilder();
15
+ await this.programBuilder.run(options);
16
+ }
17
+ /**
18
+ * Get all of the functions available for all scopes for this file.
19
+ * @param relativePath path to the file relative to rootDir
20
+ * @returns
21
+ */
22
+ getScopeFunctionsForFile(options) {
23
+ //remove the leading `pkg:/` if it exists
24
+ const file = this.programBuilder.program.getFile(options === null || options === void 0 ? void 0 : options.relativePath);
25
+ const scopes = this.programBuilder.program.getScopesForFile(file);
26
+ const result = new Map();
27
+ for (let scope of scopes) {
28
+ scope.getAllCallables();
29
+ for (let container of scope.getAllCallables()) {
30
+ if (result.has(container.callable.name)) {
31
+ result.set(container.callable.name, result.get(container.callable.name) + 1);
32
+ }
33
+ else {
34
+ result.set(container.callable.name, 1);
35
+ }
36
+ }
37
+ }
38
+ return [...result].map(([name, count]) => {
39
+ return {
40
+ name: name,
41
+ completionItemKind: count === scopes.length ? 'function' : 'text'
42
+ };
43
+ });
44
+ }
45
+ dispose() {
46
+ return this.programBuilder.dispose();
47
+ }
48
+ }
49
+ exports.BscProject = BscProject;
50
+ //# sourceMappingURL=BscProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BscProject.js","sourceRoot":"","sources":["../../src/bsc/BscProject.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAIhD;;GAEG;AACH,MAAa,UAAU;IAGnB;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,OAA6C;QAC/D,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,OAAiC;QAC7D,yCAAyC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QAEzC,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE;gBAC3C,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBACrC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBAChF;qBAAM;oBACH,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;iBAC1C;aACJ;SACJ;QAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YACrC,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,kBAAkB,EAAE,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;aACpE,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;CACJ;AA9CD,gCA8CC"}
@@ -0,0 +1,45 @@
1
+ import { type ProgramBuilder } from 'brighterscript';
2
+ import type { ExtractMethods, DisposableLike, MaybePromise } from '../interfaces';
3
+ import type { BscProject, ScopeFunction } from './BscProject';
4
+ export declare class BscProjectThreaded implements ExtractMethods<BscProject> {
5
+ logger: import("@rokucommunity/logger/dist/Logger").Logger;
6
+ private worker;
7
+ private messageHandler;
8
+ private activateDeferred;
9
+ /**
10
+ * Has this project finished activating (either resolved or rejected...)
11
+ */
12
+ get isActivated(): boolean;
13
+ activate(options: Parameters<ProgramBuilder['run']>[0]): Promise<void>;
14
+ /**
15
+ * Get all of the functions avaiable for all scopes for this file.
16
+ * @param relativePath path to the file relative to rootDir
17
+ * @returns
18
+ */
19
+ getScopeFunctionsForFile(options: {
20
+ relativePath: string;
21
+ }): MaybePromise<Array<ScopeFunction>>;
22
+ /**
23
+ * Send a request with the standard structure
24
+ * @param name the name of the request
25
+ * @param data the array of data to send
26
+ * @returns the response from the request
27
+ */
28
+ private sendStandardRequest;
29
+ /**
30
+ * If the client sends a request, it will be processed here
31
+ */
32
+ private processRequest;
33
+ /**
34
+ * If the client sends an update, it will be processed here
35
+ */
36
+ private processUpdate;
37
+ /**
38
+ * List of disposables to clean up when this instance is disposed
39
+ */
40
+ disposables: DisposableLike[];
41
+ /**
42
+ * Clean up all resources used by this instance
43
+ */
44
+ dispose(): void;
45
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BscProjectThreaded = void 0;
4
+ const brighterscript_1 = require("brighterscript");
5
+ const BscProjectWorkerPool_1 = require("./threading/BscProjectWorkerPool");
6
+ const ThreadMessageHandler_1 = require("./threading/ThreadMessageHandler");
7
+ const util_1 = require("../util");
8
+ const logging_1 = require("../logging");
9
+ class BscProjectThreaded {
10
+ constructor() {
11
+ this.logger = logging_1.logger.createLogger('[BscProjectThreaded]');
12
+ this.activateDeferred = new brighterscript_1.Deferred();
13
+ /**
14
+ * List of disposables to clean up when this instance is disposed
15
+ */
16
+ this.disposables = [];
17
+ }
18
+ /**
19
+ * Has this project finished activating (either resolved or rejected...)
20
+ */
21
+ get isActivated() {
22
+ return this.activateDeferred.isCompleted;
23
+ }
24
+ async activate(options) {
25
+ const timeEnd = this.logger.timeStart('log', 'activate');
26
+ // start a new worker thread or get an unused existing thread
27
+ this.worker = BscProjectWorkerPool_1.bscProjectWorkerPool.getWorker();
28
+ //link the message handler to the worker
29
+ this.messageHandler = new ThreadMessageHandler_1.ThreadMessageHandler({
30
+ name: 'MainThread',
31
+ port: this.worker,
32
+ onRequest: this.processRequest.bind(this),
33
+ onUpdate: this.processUpdate.bind(this)
34
+ });
35
+ //set up some disposables to be cleaned up
36
+ this.disposables.push(this.messageHandler,
37
+ //when disposed, move the worker back to the pool so it can be used again
38
+ () => BscProjectWorkerPool_1.bscProjectWorkerPool.releaseWorker(this.worker));
39
+ //send the request to the worker to activate itself
40
+ try {
41
+ await this.messageHandler.sendRequest('activate', { data: [options] });
42
+ this.activateDeferred.resolve();
43
+ }
44
+ catch (e) {
45
+ this.activateDeferred.reject(e);
46
+ }
47
+ timeEnd();
48
+ }
49
+ /**
50
+ * Get all of the functions avaiable for all scopes for this file.
51
+ * @param relativePath path to the file relative to rootDir
52
+ * @returns
53
+ */
54
+ getScopeFunctionsForFile(options) {
55
+ return this.sendStandardRequest('getScopeFunctionsForFile', options);
56
+ }
57
+ /**
58
+ * Send a request with the standard structure
59
+ * @param name the name of the request
60
+ * @param data the array of data to send
61
+ * @returns the response from the request
62
+ */
63
+ async sendStandardRequest(name, ...data) {
64
+ await this.activateDeferred.promise;
65
+ const response = await this.messageHandler.sendRequest(name, {
66
+ data: data
67
+ });
68
+ return response.data;
69
+ }
70
+ /**
71
+ * If the client sends a request, it will be processed here
72
+ */
73
+ processRequest(request) {
74
+ //the thread does not currently send any requests
75
+ }
76
+ /**
77
+ * If the client sends an update, it will be processed here
78
+ */
79
+ processUpdate(update) {
80
+ //the thread does not currently send any requests
81
+ }
82
+ /**
83
+ * Clean up all resources used by this instance
84
+ */
85
+ dispose() {
86
+ util_1.util.applyDispose(this.disposables);
87
+ }
88
+ }
89
+ exports.BscProjectThreaded = BscProjectThreaded;
90
+ //# sourceMappingURL=BscProjectThreaded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BscProjectThreaded.js","sourceRoot":"","sources":["../../src/bsc/BscProjectThreaded.ts"],"names":[],"mappings":";;;AAAA,mDAA+D;AAG/D,2EAAwE;AAExE,2EAAwE;AAExE,kCAA+B;AAC/B,wCAAoC;AAGpC,MAAa,kBAAkB;IAA/B;QAEW,WAAM,GAAG,gBAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QAMpD,qBAAgB,GAAG,IAAI,yBAAQ,EAAE,CAAC;QA6E1C;;WAEG;QACI,gBAAW,GAAqB,EAAE,CAAC;IAQ9C,CAAC;IAtFG;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,OAA6C;QAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEzD,6DAA6D;QAC7D,IAAI,CAAC,MAAM,GAAG,2CAAoB,CAAC,SAAS,EAAE,CAAC;QAE/C,wCAAwC;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,2CAAoB,CAAa;YACvD,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,IAAI,CAAC,MAAM;YACjB,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;SAC1C,CAAC,CAAC;QAEH,0CAA0C;QAC1C,IAAI,CAAC,WAAW,CAAC,IAAI,CACjB,IAAI,CAAC,cAAc;QACnB,yEAAyE;QACzE,GAAG,EAAE,CAAC,2CAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CACxD,CAAC;QAEF,mDAAmD;QACnD,IAAI;YACA,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvE,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;SACnC;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACnC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED;;;;OAIG;IACI,wBAAwB,CAAC,OAAiC;QAC7D,OAAO,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAI,IAA6B,EAAE,GAAG,IAAW;QAC9E,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAI,IAAI,EAAE;YAC5D,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAsB;QACzC,iDAAiD;IACrD,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAqB;QACvC,iDAAiD;IACrD,CAAC;IAOD;;OAEG;IACI,OAAO;QACV,WAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;CACJ;AAhGD,gDAgGC"}
@@ -0,0 +1,5 @@
1
+ import { WorkerPool } from './WorkerPool';
2
+ /**
3
+ * A pool of workers that gets pre-baked and reused so we don't pay the worker thread penalty every time we need a new worker.
4
+ */
5
+ export declare const bscProjectWorkerPool: WorkerPool;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bscProjectWorkerPool = void 0;
4
+ const worker_threads_1 = require("worker_threads");
5
+ const worker_threads_2 = require("worker_threads");
6
+ const BscProject_1 = require("../BscProject");
7
+ const WorkerPool_1 = require("./WorkerPool");
8
+ const ThreadRunner_1 = require("./ThreadRunner");
9
+ //if this script is running in a Worker, start the project runner
10
+ /* istanbul ignore next */
11
+ if (!worker_threads_2.isMainThread) {
12
+ const runner = new ThreadRunner_1.ThreadRunner(() => {
13
+ return new BscProject_1.BscProject();
14
+ });
15
+ runner.run(worker_threads_2.parentPort);
16
+ }
17
+ /**
18
+ * A pool of workers that gets pre-baked and reused so we don't pay the worker thread penalty every time we need a new worker.
19
+ */
20
+ exports.bscProjectWorkerPool = new WorkerPool_1.WorkerPool(() => {
21
+ return new worker_threads_1.Worker(__filename, {
22
+ //wire up ts-node if we're running in ts-node
23
+ execArgv: /\.ts$/i.test(__filename)
24
+ ? ['--require', 'ts-node/register']
25
+ /* istanbul ignore next */
26
+ : undefined
27
+ });
28
+ });
29
+ //# sourceMappingURL=BscProjectWorkerPool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BscProjectWorkerPool.js","sourceRoot":"","sources":["../../../src/bsc/threading/BscProjectWorkerPool.ts"],"names":[],"mappings":";;;AAAA,mDAAwC;AACxC,mDAA0D;AAC1D,8CAA2C;AAC3C,6CAA0C;AAC1C,iDAA8C;AAE9C,iEAAiE;AACjE,0BAA0B;AAC1B,IAAI,CAAC,6BAAY,EAAE;IACf,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,GAAG,EAAE;QACjC,OAAO,IAAI,uBAAU,EAAE,CAAC;IAC5B,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,2BAAU,CAAC,CAAC;CAC1B;AAED;;GAEG;AACU,QAAA,oBAAoB,GAAG,IAAI,uBAAU,CAAC,GAAG,EAAE;IACpD,OAAO,IAAI,uBAAM,CACb,UAAU,EACV;QACI,6CAA6C;QAC7C,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/B,CAAC,CAAC,CAAC,WAAW,EAAE,kBAAkB,CAAC;YACnC,0BAA0B;YAC1B,CAAC,CAAC,SAAS;KAClB,CACJ,CAAC;AACN,CAAC,CAAC,CAAC"}
@@ -0,0 +1,99 @@
1
+ /// <reference types="node" />
2
+ import type { parentPort } from 'worker_threads';
3
+ interface PseudoMessagePort {
4
+ on: (name: 'message', cb: (message: any) => any) => any;
5
+ postMessage: typeof parentPort['postMessage'];
6
+ }
7
+ export declare class ThreadMessageHandler<T, TRequestName = MethodNames<T>> {
8
+ constructor(options: {
9
+ name?: string;
10
+ port: PseudoMessagePort;
11
+ onRequest?: (message: WorkerRequest) => any;
12
+ onResponse?: (message: WorkerResponse) => any;
13
+ onUpdate?: (message: WorkerUpdate) => any;
14
+ });
15
+ /**
16
+ * An optional name to help with debugging this handler
17
+ */
18
+ readonly name: string;
19
+ private port;
20
+ private disposables;
21
+ private emitter;
22
+ private activeRequests;
23
+ /**
24
+ * Get the response with this ID
25
+ * @param id the ID of the response
26
+ * @returns the message
27
+ */
28
+ private onResponse;
29
+ /**
30
+ * A unique sequence for identifying messages
31
+ */
32
+ private idSequence;
33
+ /**
34
+ * Send a request to the worker, and wait for a response.
35
+ * @param name the name of the request
36
+ * @param options the request options
37
+ * @param options.data an array of data that will be passed in as params to the target function
38
+ * @param options.id an id for this request
39
+ */
40
+ sendRequest<R>(name: TRequestName, options?: {
41
+ data: any[];
42
+ id?: number;
43
+ }): Promise<WorkerResponse<R>>;
44
+ /**
45
+ * Send a request to the worker, and wait for a response.
46
+ * @param request the request we are responding to
47
+ * @param options options for this request
48
+ */
49
+ sendResponse(request: WorkerMessage, options?: {
50
+ data: any;
51
+ } | {
52
+ error: Error;
53
+ } | undefined): void;
54
+ /**
55
+ * Send a request to the worker, and wait for a response.
56
+ * @param name the name of the request
57
+ * @param options options for the update
58
+ * @param options.data an array of data that will be passed in as params to the target function
59
+ * @param options.id an id for this update
60
+ */
61
+ sendUpdate<T>(name: string, options?: {
62
+ data?: any[];
63
+ id?: number;
64
+ }): void;
65
+ /**
66
+ * Convert an Error object into a plain object so it can be serialized
67
+ * @param error the error to object-ify
68
+ * @returns an object version of an error
69
+ */
70
+ private errorToObject;
71
+ dispose(): void;
72
+ }
73
+ export interface WorkerRequest<TData = any> {
74
+ id: number;
75
+ type: 'request';
76
+ name: string;
77
+ data?: TData;
78
+ }
79
+ export interface WorkerResponse<TData = any> {
80
+ id: number;
81
+ type: 'response';
82
+ name: string;
83
+ data?: TData;
84
+ /**
85
+ * An error occurred on the remote side. There will be no `.data` value
86
+ */
87
+ error?: Error;
88
+ }
89
+ export interface WorkerUpdate<TData = any> {
90
+ id: number;
91
+ type: 'update';
92
+ name: string;
93
+ data?: TData;
94
+ }
95
+ export declare type WorkerMessage<T = any> = WorkerRequest<T> | WorkerResponse<T> | WorkerUpdate<T>;
96
+ export declare type MethodNames<T> = {
97
+ [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
98
+ }[keyof T];
99
+ export {};
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ThreadMessageHandler = void 0;
4
+ const EventEmitter = require("eventemitter3");
5
+ const brighterscript_1 = require("brighterscript");
6
+ const util_1 = require("../../util");
7
+ class ThreadMessageHandler {
8
+ constructor(options) {
9
+ this.disposables = [];
10
+ this.emitter = new EventEmitter();
11
+ this.activeRequests = new Map();
12
+ /**
13
+ * A unique sequence for identifying messages
14
+ */
15
+ this.idSequence = 0;
16
+ this.name = options === null || options === void 0 ? void 0 : options.name;
17
+ this.port = options === null || options === void 0 ? void 0 : options.port;
18
+ const listener = (message) => {
19
+ var _a, _b, _c;
20
+ switch (message.type) {
21
+ case 'request':
22
+ (_a = options === null || options === void 0 ? void 0 : options.onRequest) === null || _a === void 0 ? void 0 : _a.call(options, message);
23
+ break;
24
+ case 'response':
25
+ (_b = options === null || options === void 0 ? void 0 : options.onResponse) === null || _b === void 0 ? void 0 : _b.call(options, message);
26
+ this.emitter.emit(`${message.type}-${message.id}`, message);
27
+ break;
28
+ case 'update':
29
+ (_c = options === null || options === void 0 ? void 0 : options.onUpdate) === null || _c === void 0 ? void 0 : _c.call(options, message);
30
+ break;
31
+ }
32
+ };
33
+ options === null || options === void 0 ? void 0 : options.port.on('message', listener);
34
+ this.disposables.push(() => this.emitter.removeAllListeners(), () => (options === null || options === void 0 ? void 0 : options.port).off('message', listener));
35
+ }
36
+ /**
37
+ * Get the response with this ID
38
+ * @param id the ID of the response
39
+ * @returns the message
40
+ */
41
+ onResponse(id) {
42
+ const deferred = new brighterscript_1.Deferred();
43
+ //store this request so we can resolve it later, or reject if this class is disposed
44
+ this.activeRequests.set(id, {
45
+ id: id,
46
+ deferred: deferred
47
+ });
48
+ this.emitter.once(`response-${id}`, (response) => {
49
+ deferred.resolve(response);
50
+ this.activeRequests.delete(id);
51
+ });
52
+ return deferred.promise;
53
+ }
54
+ /**
55
+ * Send a request to the worker, and wait for a response.
56
+ * @param name the name of the request
57
+ * @param options the request options
58
+ * @param options.data an array of data that will be passed in as params to the target function
59
+ * @param options.id an id for this request
60
+ */
61
+ async sendRequest(name, options) {
62
+ var _a, _b;
63
+ const request = {
64
+ type: 'request',
65
+ name: name,
66
+ data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : [],
67
+ id: (_b = options === null || options === void 0 ? void 0 : options.id) !== null && _b !== void 0 ? _b : this.idSequence++
68
+ };
69
+ const responsePromise = this.onResponse(request.id);
70
+ this.port.postMessage(request);
71
+ const response = await responsePromise;
72
+ if ('error' in response) {
73
+ //throw the error so it causes a rejected promise (like we'd expect)
74
+ throw new Error(`Worker thread encountered an error: ${JSON.stringify(response.error.stack)}`);
75
+ }
76
+ return response;
77
+ }
78
+ /**
79
+ * Send a request to the worker, and wait for a response.
80
+ * @param request the request we are responding to
81
+ * @param options options for this request
82
+ */
83
+ sendResponse(request, options) {
84
+ const response = {
85
+ type: 'response',
86
+ name: request.name,
87
+ id: request.id
88
+ };
89
+ if ('error' in options) {
90
+ //hack: turn the error into a plain json object
91
+ response.error = this.errorToObject(options.error);
92
+ }
93
+ else if ('data' in options) {
94
+ response.data = options.data;
95
+ }
96
+ this.port.postMessage(response);
97
+ }
98
+ /**
99
+ * Send a request to the worker, and wait for a response.
100
+ * @param name the name of the request
101
+ * @param options options for the update
102
+ * @param options.data an array of data that will be passed in as params to the target function
103
+ * @param options.id an id for this update
104
+ */
105
+ sendUpdate(name, options) {
106
+ var _a, _b;
107
+ let update = {
108
+ type: 'update',
109
+ name: name,
110
+ data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : [],
111
+ id: (_b = options === null || options === void 0 ? void 0 : options.id) !== null && _b !== void 0 ? _b : this.idSequence++
112
+ };
113
+ this.port.postMessage(update);
114
+ }
115
+ /**
116
+ * Convert an Error object into a plain object so it can be serialized
117
+ * @param error the error to object-ify
118
+ * @returns an object version of an error
119
+ */
120
+ errorToObject(error) {
121
+ var _a, _b;
122
+ return {
123
+ name: error.name,
124
+ message: error.message,
125
+ stack: error.stack,
126
+ cause: ((_a = error.cause) === null || _a === void 0 ? void 0 : _a.message) && ((_b = error.cause) === null || _b === void 0 ? void 0 : _b.stack) ? this.errorToObject(error.cause) : error.cause
127
+ };
128
+ }
129
+ dispose() {
130
+ util_1.util.applyDispose(this.disposables);
131
+ //reject all active requests
132
+ for (const request of this.activeRequests.values()) {
133
+ request.deferred.reject(new Error(`Request ${request.id} has been rejected because MessageHandler is now disposed`));
134
+ }
135
+ }
136
+ }
137
+ exports.ThreadMessageHandler = ThreadMessageHandler;
138
+ //# sourceMappingURL=ThreadMessageHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadMessageHandler.js","sourceRoot":"","sources":["../../../src/bsc/threading/ThreadMessageHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" />
2
+ import type { MessagePort } from 'worker_threads';
3
+ /**
4
+ * Runner logic for Running a Project in a worker thread.
5
+ */
6
+ export declare class ThreadRunner<T extends ThreadRunnerSubject> {
7
+ private subjectFactory;
8
+ constructor(subjectFactory: () => T);
9
+ private requestInterceptors;
10
+ /**
11
+ * The instance of the object this runner will communicate with. It should have methods with the same names as the request being sent.
12
+ */
13
+ private subject;
14
+ private messageHandler;
15
+ run(parentPort: MessagePort): void;
16
+ /**
17
+ * Fired anytime we get an `activate` request from the client. This allows us to clean up the previous project and make a new one
18
+ */
19
+ private onActivate;
20
+ }
21
+ export interface ThreadRunnerSubject {
22
+ /**
23
+ * Called whenever a new subject has been activated
24
+ */
25
+ activate(...args: any[]): void | Promise<any>;
26
+ /**
27
+ * Called whenever a subject will no longer be used. Allows for cleaning up a subject.
28
+ */
29
+ dispose(): void | Promise<any>;
30
+ }