@hydranium/core 1.0.0-next.266 → 1.0.0-next.268

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 (126) hide show
  1. package/lib/documents/ast-document-manager.d.ts.map +1 -1
  2. package/lib/documents/ast-document-manager.js +4 -3
  3. package/lib/documents/ast-document-manager.js.map +1 -1
  4. package/lib/documents/document-release-handler.d.ts +2 -2
  5. package/lib/documents/document-release-handler.d.ts.map +1 -1
  6. package/lib/documents/document-release-handler.js +14 -19
  7. package/lib/documents/document-release-handler.js.map +1 -1
  8. package/lib/documents/hydranium-text-documents.d.ts.map +1 -1
  9. package/lib/documents/hydranium-text-documents.js +7 -10
  10. package/lib/documents/hydranium-text-documents.js.map +1 -1
  11. package/lib/documents/language-client-shadow.d.ts.map +1 -1
  12. package/lib/documents/language-client-shadow.js +2 -1
  13. package/lib/documents/language-client-shadow.js.map +1 -1
  14. package/lib/documents/version-sync-service.d.ts +18 -14
  15. package/lib/documents/version-sync-service.d.ts.map +1 -1
  16. package/lib/documents/version-sync-service.js +15 -13
  17. package/lib/documents/version-sync-service.js.map +1 -1
  18. package/lib/langium/diagnostics/lsp-logger.d.ts.map +1 -1
  19. package/lib/langium/diagnostics/lsp-logger.js +2 -2
  20. package/lib/langium/diagnostics/lsp-logger.js.map +1 -1
  21. package/lib/langium/document-builder/document-builder.d.ts +2 -2
  22. package/lib/langium/document-builder/document-builder.d.ts.map +1 -1
  23. package/lib/langium/document-builder/document-builder.js +23 -10
  24. package/lib/langium/document-builder/document-builder.js.map +1 -1
  25. package/lib/langium/integrity/integrity-service.d.ts.map +1 -1
  26. package/lib/langium/integrity/integrity-service.js +5 -1
  27. package/lib/langium/integrity/integrity-service.js.map +1 -1
  28. package/lib/langium/model-service/client-session.d.ts.map +1 -1
  29. package/lib/langium/model-service/client-session.js +20 -3
  30. package/lib/langium/model-service/client-session.js.map +1 -1
  31. package/lib/langium/model-service/model-service.d.ts +4 -3
  32. package/lib/langium/model-service/model-service.d.ts.map +1 -1
  33. package/lib/langium/model-service/model-service.js +49 -19
  34. package/lib/langium/model-service/model-service.js.map +1 -1
  35. package/lib/langium/project/abstract-project-manager.d.ts.map +1 -1
  36. package/lib/langium/project/abstract-project-manager.js +4 -4
  37. package/lib/langium/project/abstract-project-manager.js.map +1 -1
  38. package/lib/langium/scope/hydranium-scope-computation.d.ts +6 -0
  39. package/lib/langium/scope/hydranium-scope-computation.d.ts.map +1 -1
  40. package/lib/langium/scope/hydranium-scope-computation.js +6 -10
  41. package/lib/langium/scope/hydranium-scope-computation.js.map +1 -1
  42. package/lib/langium/validation/document-validator.d.ts.map +1 -1
  43. package/lib/langium/validation/document-validator.js +5 -3
  44. package/lib/langium/validation/document-validator.js.map +1 -1
  45. package/lib/langium/workspace/hydranium-workspace-lock.d.ts +1 -1
  46. package/lib/langium/workspace/hydranium-workspace-lock.js +1 -1
  47. package/lib/langium/workspace/hydranium-workspace-lock.js.map +1 -1
  48. package/lib/langium/workspace/hydranium-workspace-manager.d.ts.map +1 -1
  49. package/lib/langium/workspace/hydranium-workspace-manager.js +4 -5
  50. package/lib/langium/workspace/hydranium-workspace-manager.js.map +1 -1
  51. package/lib/langium/workspace/persistent-file-system-provider.d.ts.map +1 -1
  52. package/lib/langium/workspace/persistent-file-system-provider.js +2 -1
  53. package/lib/langium/workspace/persistent-file-system-provider.js.map +1 -1
  54. package/lib/launcher/integrated-server.d.ts +3 -1
  55. package/lib/launcher/integrated-server.d.ts.map +1 -1
  56. package/lib/lsp/hydranium-document-update-handler.d.ts.map +1 -1
  57. package/lib/lsp/hydranium-document-update-handler.js +5 -5
  58. package/lib/lsp/hydranium-document-update-handler.js.map +1 -1
  59. package/lib/node/event-loop-monitor.d.ts.map +1 -1
  60. package/lib/node/event-loop-monitor.js +2 -1
  61. package/lib/node/event-loop-monitor.js.map +1 -1
  62. package/lib/node/log-preamble-node.d.ts +5 -3
  63. package/lib/node/log-preamble-node.d.ts.map +1 -1
  64. package/lib/node/log-preamble-node.js +13 -10
  65. package/lib/node/log-preamble-node.js.map +1 -1
  66. package/lib/node/memory-monitor.d.ts +2 -2
  67. package/lib/node/memory-monitor.d.ts.map +1 -1
  68. package/lib/node/memory-monitor.js +3 -5
  69. package/lib/node/memory-monitor.js.map +1 -1
  70. package/lib/node/node-file-system-provider.d.ts +5 -2
  71. package/lib/node/node-file-system-provider.d.ts.map +1 -1
  72. package/lib/node/node-file-system-provider.js +5 -2
  73. package/lib/node/node-file-system-provider.js.map +1 -1
  74. package/lib/node/server-diagnostics.js +1 -1
  75. package/lib/node/server-diagnostics.js.map +1 -1
  76. package/lib/node/socket-launcher.d.ts.map +1 -1
  77. package/lib/node/socket-launcher.js +4 -4
  78. package/lib/node/socket-launcher.js.map +1 -1
  79. package/lib/node/stdio-launcher.d.ts.map +1 -1
  80. package/lib/node/stdio-launcher.js +12 -3
  81. package/lib/node/stdio-launcher.js.map +1 -1
  82. package/lib/testing/playwright/server-log-capture.d.ts +7 -0
  83. package/lib/testing/playwright/server-log-capture.d.ts.map +1 -1
  84. package/lib/testing/playwright/server-log-capture.js +12 -0
  85. package/lib/testing/playwright/server-log-capture.js.map +1 -1
  86. package/lib/testing/playwright/server-log-fixture.d.ts +16 -0
  87. package/lib/testing/playwright/server-log-fixture.d.ts.map +1 -1
  88. package/lib/testing/playwright/server-log-fixture.js +25 -6
  89. package/lib/testing/playwright/server-log-fixture.js.map +1 -1
  90. package/lib/testing/playwright/server-log-region.d.ts +15 -0
  91. package/lib/testing/playwright/server-log-region.d.ts.map +1 -0
  92. package/lib/testing/playwright/server-log-region.js +30 -0
  93. package/lib/testing/playwright/server-log-region.js.map +1 -0
  94. package/lib/util/connection-liveness.d.ts.map +1 -1
  95. package/lib/util/connection-liveness.js +3 -2
  96. package/lib/util/connection-liveness.js.map +1 -1
  97. package/package.json +5 -5
  98. package/src/documents/ast-document-manager.ts +7 -3
  99. package/src/documents/document-release-handler.ts +15 -21
  100. package/src/documents/hydranium-text-documents.ts +13 -12
  101. package/src/documents/language-client-shadow.ts +2 -1
  102. package/src/documents/version-sync-service.ts +32 -24
  103. package/src/langium/diagnostics/lsp-logger.ts +2 -1
  104. package/src/langium/document-builder/document-builder.ts +30 -11
  105. package/src/langium/integrity/integrity-service.ts +4 -1
  106. package/src/langium/model-service/client-session.ts +20 -3
  107. package/src/langium/model-service/model-service.ts +55 -24
  108. package/src/langium/project/abstract-project-manager.ts +4 -4
  109. package/src/langium/scope/hydranium-scope-computation.ts +12 -12
  110. package/src/langium/validation/document-validator.ts +5 -3
  111. package/src/langium/workspace/hydranium-workspace-lock.ts +2 -2
  112. package/src/langium/workspace/hydranium-workspace-manager.ts +4 -5
  113. package/src/langium/workspace/persistent-file-system-provider.ts +2 -1
  114. package/src/launcher/integrated-server.ts +3 -1
  115. package/src/lsp/hydranium-document-update-handler.ts +15 -7
  116. package/src/node/event-loop-monitor.ts +2 -1
  117. package/src/node/log-preamble-node.ts +20 -10
  118. package/src/node/memory-monitor.ts +4 -5
  119. package/src/node/node-file-system-provider.ts +5 -2
  120. package/src/node/server-diagnostics.ts +1 -1
  121. package/src/node/socket-launcher.ts +4 -4
  122. package/src/node/stdio-launcher.ts +11 -3
  123. package/src/testing/playwright/server-log-capture.ts +14 -0
  124. package/src/testing/playwright/server-log-fixture.ts +46 -6
  125. package/src/testing/playwright/server-log-region.ts +32 -0
  126. package/src/util/connection-liveness.ts +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"server-log-capture.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-log-capture.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-capture.ts"],"names":[],"mappings":"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"}
@@ -302,6 +302,18 @@ export function forwardBrowserConsole(page, workspacePath, options = {}) {
302
302
  }
303
303
  });
304
304
  }
305
+ /** The label a `Warn` or `Error` entry starts with; continuation lines of a stack never do. */
306
+ const WARN_OR_ERROR_LINE = /^\[(Warn|Error)\s*-/;
307
+ /**
308
+ * The `Warn` and `Error` lines of `text` that no pattern of `allowlist`
309
+ * matches; its keys are the reasons the lines are expected. A clean run logs
310
+ * neither: `warn` is an anomaly that was handled and `error` is work that
311
+ * failed, so either one in a passing spec is a defect or a missing allowance.
312
+ */
313
+ export function findUnexpectedServerLogLines(text, allowlist = {}) {
314
+ const patterns = Object.values(allowlist);
315
+ return text.split('\n').filter(line => WARN_OR_ERROR_LINE.test(line) && !patterns.some(pattern => pattern.test(line)));
316
+ }
305
317
  /**
306
318
  * Per-test server-log capture, called from a spec's `afterEach` with the test's
307
319
  * workspace path:
@@ -1 +1 @@
1
- {"version":3,"file":"server-log-capture.js","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-log-capture.js","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACJ,oBAAoB,EACpB,0BAA0B,EAC1B,qBAAqB,EAErB,aAAa,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AACrE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAC3E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,8BAA8B,CAAC;AAE7E,+GAA+G;AAC/G,MAAM,CAAC,MAAM,0BAA0B,GAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAKlF,SAAS,aAAa,CAAC,KAAyB;IAC7C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,CAAC;AAED,mFAAmF;AACnF,SAAS,qBAAqB,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,sFAAsF;AACtF,MAAM,qBAAqB,GAAG,aAAa,CAAC;AA0C5C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAA4B,EAAE;IACnE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,GAAG,GAA2B;QACjC,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,qBAAqB,MAAM,CAAC;KACnE,CAAC;IACF,GAAG,CAAC,0BAA0B,CAAC;QAC5B,OAAO,CAAC,KAAK;YACb,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACtD,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACjD,OAAO,CAAC;IACX,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iCAAiC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClG,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC;AAiBD;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,OAAO,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IACzC,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACF,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACN,sEAAsE;QACtE,kDAAkD;QAClD,OAAO,EAAE,CAAC;IACb,CAAC;IACD,8EAA8E;IAC9E,2EAA2E;IAC3E,MAAM,KAAK,GAAgC,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,MAAc,EAAQ,EAAE;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO;QACV,CAAC;QACD,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/E,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC;YACF,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACN,SAAS;QACZ,CAAC;IACJ,CAAC,CAAC;IACF,6EAA6E;IAC7E,2DAA2D;IAC3D,MAAM,YAAY,GAAG,IAAI,GAAG,CACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CACjI,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,SAAS;QACZ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACF,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACN,SAAS;QACZ,CAAC;QACD,IAAI,CAAC;YACF,UAAU,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACN,SAAS;QACZ,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACT,SAAS;QACZ,CAAC;QACD,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB,EAAE,OAAO,GAAqB,EAAE;IACvF,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,4BAA4B,CAAC,aAAqB,EAAE,OAAO,GAAqB,EAAE;IAC/F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO,SAAS,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AAC7E,CAAC;AAoBD;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,QAA2B,EAAE,aAAqB,EAAE,OAAO,GAA2B,EAAE;IACnH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO;IACV,CAAC;IACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACrD,IAAI,CAAC;QACF,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,EAAE,kBAAkB,QAAQ,CAAC,KAAK,UAAU,CAAC,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACN,sEAAsE;IACzE,CAAC;IACD,+EAA+E;IAC/E,kFAAkF;IAClF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACN,SAAS;QACZ,CAAC;IACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,aAAqB,EAAE,IAAY,EAAE,OAAO,GAAqB,EAAE;IAChG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO;IACV,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACxE,IAAI,CAAC;QACF,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACN,+DAA+D;IAClE,CAAC;AACJ,CAAC;AAkBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,qBAAqB,CAClC,IAAqB,EACrB,aAAqB,EACrB,OAAO,GAAiD,EAAE;IAE1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO;IACV,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CACnB,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,IAAI,0BAA0B,CACpH,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAChF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO;QACV,CAAC;QACD,IAAI,CAAC;YACF,cAAc,CAAC,IAAI,EAAE,cAAc,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACN,+DAA+D;QAClE,CAAC;IACJ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,+FAA+F;AAC/F,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAY,EAAE,SAAS,GAAqC,EAAE;IACxG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1H,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAClC,QAA2B,EAC3B,aAAqB,EACrB,OAAO,GAA2B,EAAE;IAEpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnE,IAAI,CAAC,GAAG,EAAE,CAAC;QACR,OAAO;IACV,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC;IAC5C,IAAI,CAAC;QACF,cAAc,CAAC,IAAI,EAAE,gBAAgB,QAAQ,CAAC,KAAK,MAAM,MAAM,UAAU,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACN,sEAAsE;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,IAAI,SAAS,CAAC;IAC5G,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC;IACjF,IAAI,CAAC,YAAY,EAAE,CAAC;QACjB,OAAO;IACV,CAAC;IACD,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,WAAW,GAAqC;QACnD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE;QAClC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;KAC3G,CAAC;IACF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,SAAS;QACZ,CAAC;QACD,IAAI,CAAC;YACF,MAAM,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACN,yCAAyC;QAC5C,CAAC;IACJ,CAAC;AACJ,CAAC"}
@@ -16,6 +16,21 @@ export interface ServerLogFixtures {
16
16
  * `attachServerLog` in `beforeEach` / `afterEach` instead.
17
17
  */
18
18
  serverLogWorkspace: string;
19
+ /**
20
+ * Fail a test whose part of the server log holds a `Warn` or `Error` line
21
+ * that {@link serverLogAllowlist} does not match. Off by default; reads
22
+ * nothing when capture is off.
23
+ */
24
+ serverLogClean: boolean;
25
+ /**
26
+ * The `Warn` and `Error` lines {@link serverLogClean} lets through: each key
27
+ * is why the line is expected, and its pattern is matched against the whole
28
+ * line, label and timestamp included. A pattern takes neither the `g` nor
29
+ * the `y` flag, which make `test` resume from its last match. An object
30
+ * rather than a list, because Playwright reads an array whose second entry
31
+ * is an object as a fixture's `[value, options]`.
32
+ */
33
+ serverLogAllowlist: Readonly<Record<string, RegExp>>;
19
34
  }
20
35
  /** Full fixture set including the internal side-effect-only auto fixture. */
21
36
  interface ServerLogTestFixtures extends ServerLogFixtures {
@@ -28,6 +43,7 @@ interface ServerLogTestFixtures extends ServerLogFixtures {
28
43
  * (teardown) — i.e. the `beforeEach` + `afterEach` pair fused into one auto
29
44
  * fixture. Compose onto any test base, or use the pre-extended {@link test}.
30
45
  * Override `serverLogWorkspace` to wire the workspace; otherwise it's inert.
46
+ * Set `serverLogClean` to also fail a test on an unexpected `Warn` or `Error`.
31
47
  */
32
48
  export declare const serverLogFixtures: Fixtures<ServerLogTestFixtures, object, PlaywrightTestArgs & PlaywrightTestOptions>;
33
49
  /** Pre-extended test with {@link serverLogFixtures} applied, for adopters on the plain base. */
@@ -1 +1 @@
1
- {"version":3,"file":"server-log-fixture.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAKlF,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAGpH,MAAM,WAAW,iBAAiB;IAC/B;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC7B;AAED,6EAA6E;AAC7E,UAAU,qBAAsB,SAAQ,iBAAiB;IACtD,sFAAsF;IACtF,gBAAgB,EAAE,IAAI,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAcjH,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,IAAI,+MAAwD,CAAC"}
1
+ {"version":3,"file":"server-log-fixture.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAKlF,OAAO,EAAgB,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAUpH,MAAM,WAAW,iBAAiB;IAC/B;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED,6EAA6E;AAC7E,UAAU,qBAAsB,SAAQ,iBAAiB;IACtD,sFAAsF;IACtF,gBAAgB,EAAE,IAAI,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CA+BjH,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,IAAI,+MAAwD,CAAC"}
@@ -10,24 +10,43 @@
10
10
  // The plain functions in `server-log-capture.ts` stay playwright-free; only
11
11
  // adopters that use this fixture need `@playwright/test` installed.
12
12
  import { test as base } from '@playwright/test';
13
- import { attachServerLog, markServerLog } from './server-log-capture.js';
13
+ import { attachServerLog, DEFAULT_SERVER_LOG_ATTACH_ENV, findUnexpectedServerLogLines, markServerLog, resolveServerLogPath } from './server-log-capture.js';
14
+ import { readServerLogRegion } from './server-log-region.js';
14
15
  /**
15
16
  * Composable fixtures for per-test server-log capture: writes the start marker
16
17
  * before each test (setup) and attaches the log on failure after each test
17
18
  * (teardown) — i.e. the `beforeEach` + `afterEach` pair fused into one auto
18
19
  * fixture. Compose onto any test base, or use the pre-extended {@link test}.
19
20
  * Override `serverLogWorkspace` to wire the workspace; otherwise it's inert.
21
+ * Set `serverLogClean` to also fail a test on an unexpected `Warn` or `Error`.
20
22
  */
21
23
  export const serverLogFixtures = {
22
24
  serverLogWorkspace: ['', { option: true }],
25
+ serverLogClean: [false, { option: true }],
26
+ serverLogAllowlist: [{}, { option: true }],
23
27
  serverLogCapture: [
24
- async ({ serverLogWorkspace }, use) => {
25
- if (serverLogWorkspace) {
26
- markServerLog(base.info(), serverLogWorkspace);
28
+ async ({ serverLogWorkspace, serverLogClean, serverLogAllowlist }, use) => {
29
+ if (!serverLogWorkspace) {
30
+ await use(undefined);
31
+ return;
27
32
  }
33
+ markServerLog(base.info(), serverLogWorkspace);
28
34
  await use(undefined);
29
- if (serverLogWorkspace) {
30
- await attachServerLog(base.info(), serverLogWorkspace);
35
+ const file = resolveServerLogPath(serverLogWorkspace);
36
+ const region = file ? readServerLogRegion(file) : '';
37
+ let problem;
38
+ if (serverLogClean) {
39
+ const unexpected = findUnexpectedServerLogLines(region, serverLogAllowlist);
40
+ if (unexpected.length > 0) {
41
+ problem = `The server logged ${unexpected.length} unexpected Warn or Error line(s):\n${unexpected.join('\n')}`;
42
+ }
43
+ }
44
+ // The failure-only policy reads the test's status, which failing here
45
+ // does not change; a run set to attach nothing still attaches nothing.
46
+ const attachOn = process.env[DEFAULT_SERVER_LOG_ATTACH_ENV] === 'never' ? 'never' : 'always';
47
+ await attachServerLog(base.info(), serverLogWorkspace, problem ? { attachOn } : {});
48
+ if (problem) {
49
+ throw new Error(problem);
31
50
  }
32
51
  },
33
52
  { auto: true }
@@ -1 +1 @@
1
- {"version":3,"file":"server-log-fixture.js","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,kFAAkF;AAClF,4EAA4E;AAC5E,oEAAoE;AACpE,OAAO,EAAE,IAAI,IAAI,IAAI,EAAsE,MAAM,kBAAkB,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAmBzE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwF;IACnH,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,gBAAgB,EAAE;QACf,KAAK,EAAE,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAiB,EAAE;YAClD,IAAI,kBAAkB,EAAE,CAAC;gBACtB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,IAAI,kBAAkB,EAAE,CAAC;gBACtB,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC1D,CAAC;QACJ,CAAC;QACD,EAAE,IAAI,EAAE,IAAI,EAAE;KAChB;CACH,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAwB,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"server-log-fixture.js","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-fixture.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,kFAAkF;AAClF,4EAA4E;AAC5E,oEAAoE;AACpE,OAAO,EAAE,IAAI,IAAI,IAAI,EAAsE,MAAM,kBAAkB,CAAC;AACpH,OAAO,EACJ,eAAe,EACf,6BAA6B,EAC7B,4BAA4B,EAC5B,aAAa,EACb,oBAAoB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAkC7D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAwF;IACnH,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACzC,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,gBAAgB,EAAE;QACf,KAAK,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAiB,EAAE;YACtF,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACvB,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;gBACrB,OAAO;YACV,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC/C,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,IAAI,OAA2B,CAAC;YAChC,IAAI,cAAc,EAAE,CAAC;gBAClB,MAAM,UAAU,GAAG,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;gBAC5E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,GAAG,qBAAqB,UAAU,CAAC,MAAM,uCAAuC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClH,CAAC;YACJ,CAAC;YACD,sEAAsE;YACtE,uEAAuE;YACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC7F,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpF,IAAI,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;QACJ,CAAC;QACD,EAAE,IAAI,EAAE,IAAI,EAAE;KAChB;CACH,CAAC;AAEF,gGAAgG;AAChG,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAwB,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,15 @@
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 MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ /**
10
+ * The part of `file` written since the last read of it, up to its last complete
11
+ * line, since the server may be mid-write. Every test reads, checked or not, so
12
+ * a test that is not checked leaves no lines to the next one.
13
+ */
14
+ export declare function readServerLogRegion(file: string): string;
15
+ //# sourceMappingURL=server-log-region.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-log-region.d.ts","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-region.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAUlF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASxD"}
@@ -0,0 +1,30 @@
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 MIT License which is available in the project root.
6
+ *
7
+ * SPDX-License-Identifier: MIT
8
+ ********************************************************************************/
9
+ import { existsSync, readFileSync } from 'node:fs';
10
+ /**
11
+ * How far each log has been read. A suite starts its app before its first
12
+ * test's marker, so reading from the marker would leave startup unread.
13
+ */
14
+ const readUpTo = new Map();
15
+ /**
16
+ * The part of `file` written since the last read of it, up to its last complete
17
+ * line, since the server may be mid-write. Every test reads, checked or not, so
18
+ * a test that is not checked leaves no lines to the next one.
19
+ */
20
+ export function readServerLogRegion(file) {
21
+ if (!existsSync(file)) {
22
+ return '';
23
+ }
24
+ const log = readFileSync(file);
25
+ const end = log.lastIndexOf('\n') + 1;
26
+ const text = log.subarray(readUpTo.get(file) ?? 0, end).toString('utf-8');
27
+ readUpTo.set(file, end);
28
+ return text;
29
+ }
30
+ //# sourceMappingURL=server-log-region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-log-region.js","sourceRoot":"","sources":["../../../src/testing/playwright/server-log-region.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD;;;GAGG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACb,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1E,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connection-liveness.d.ts","sourceRoot":"","sources":["../../src/util/connection-liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAuClF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO3D;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASvD"}
1
+ {"version":3,"file":"connection-liveness.d.ts","sourceRoot":"","sources":["../../src/util/connection-liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAyClF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO3D;AAOD;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CASvD"}
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * SPDX-License-Identifier: MIT
8
8
  ********************************************************************************/
9
+ import { describeError } from '@hydranium/protocol';
9
10
  /**
10
11
  * Phrases that mean a call lost its connection. Matched on the message because
11
12
  * the condition surfaces in shapes that share no discriminator:
@@ -60,7 +61,7 @@ export function isConnectionGoneError(err) {
60
61
  if (isDestroyedStreamError(err)) {
61
62
  return true;
62
63
  }
63
- const message = err instanceof Error ? err.message : String(err);
64
+ const message = describeError(err);
64
65
  const normalized = message.toLowerCase();
65
66
  return CONNECTION_GONE_PATTERNS.some(pattern => pattern.test(normalized));
66
67
  }
@@ -85,7 +86,7 @@ export function isClientGoneError(err) {
85
86
  if (err instanceof Error && 'code' in err && typeof err.code === 'string' && SOCKET_GONE_CODES.has(err.code)) {
86
87
  return true;
87
88
  }
88
- const message = err instanceof Error ? err.message : String(err);
89
+ const message = describeError(err);
89
90
  return SOCKET_GONE_PATTERN.test(message.toLowerCase());
90
91
  }
91
92
  //# sourceMappingURL=connection-liveness.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-liveness.js","sourceRoot":"","sources":["../../src/util/connection-liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,wBAAwB,GAAG;IAC9B,wBAAwB;IACxB,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,8BAA8B;CAChC,CAAC;AAEF,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAErD,SAAS,sBAAsB,CAAC,GAAY;IACzC,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAC/C,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC3C,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACf,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5G,OAAO,IAAI,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"connection-liveness.js","sourceRoot":"","sources":["../../src/util/connection-liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,wBAAwB,GAAG;IAC9B,wBAAwB;IACxB,sBAAsB;IACtB,yBAAyB;IACzB,uBAAuB;IACvB,8BAA8B;CAChC,CAAC;AAEF,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AAErD,SAAS,sBAAsB,CAAC,GAAY;IACzC,OAAO,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,qBAAqB,CAAC;AACtF,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAC/C,IAAI,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAE3D,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC3C,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACf,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5G,OAAO,IAAI,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC1D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hydranium/core",
3
- "version": "1.0.0-next.266",
3
+ "version": "1.0.0-next.268",
4
4
  "description": "Foundational runtime of the hydranium framework: AST coordination layer (services, integrity, AST extension, serialization, multi-client documents) plus the LSP textual head at the /lsp subpath. Consumed by protocol-head packages (@hydranium/data-server, @hydranium/glsp-server).",
5
5
  "keywords": [
6
6
  "ast",
@@ -83,8 +83,8 @@
83
83
  "diff": "^5.2.0"
84
84
  },
85
85
  "devDependencies": {
86
- "@hydranium/langium": "1.0.0-next.266",
87
- "@hydranium/protocol": "1.0.0-next.266",
86
+ "@hydranium/langium": "1.0.0-next.268",
87
+ "@hydranium/protocol": "1.0.0-next.268",
88
88
  "@playwright/test": "^1.40.0",
89
89
  "@types/diff": "^5.2.0",
90
90
  "rimraf": "^5.0.0",
@@ -96,8 +96,8 @@
96
96
  "vscode-languageserver-types": "^3.17.5"
97
97
  },
98
98
  "peerDependencies": {
99
- "@hydranium/langium": "1.0.0-next.266",
100
- "@hydranium/protocol": "1.0.0-next.266",
99
+ "@hydranium/langium": "1.0.0-next.268",
100
+ "@hydranium/protocol": "1.0.0-next.268",
101
101
  "@playwright/test": "^1.40.0",
102
102
  "vscode-jsonrpc": "^9.0.0",
103
103
  "vscode-languageserver": "~10.0.1",
@@ -17,7 +17,8 @@ import {
17
17
  asModelVersion,
18
18
  type ModelVersion,
19
19
  type TextVersion,
20
- UNRECORDED_VERSION
20
+ UNRECORDED_VERSION,
21
+ describeErrorWithStack
21
22
  } from '@hydranium/protocol';
22
23
  import { type AstNode, DocumentState, type LangiumDocument, type LangiumDocuments, URI, UriUtils } from '@hydranium/langium';
23
24
  import { type LogNameOptions } from '../langium/diagnostics/logger.js';
@@ -443,8 +444,11 @@ export class DefaultAstDocumentManager<
443
444
  }
444
445
  const built = this.getDocument(args.uri);
445
446
  if (creates && built) {
446
- // Without an LSP head nothing else builds the opened text.
447
- void this.services.workspace.VersionSyncService.syncTo(built.uri, this.textDocuments.version(args.uri));
447
+ // Without an LSP head nothing else builds the opened text. Nothing
448
+ // waits on the build either, so its failure ends here.
449
+ this.services.workspace.VersionSyncService.syncTo(built.uri, this.textDocuments.version(args.uri))?.catch((error: unknown) =>
450
+ this.tracer.with(args.uri).error(`The build of the opened text failed. ${describeErrorWithStack(error)}`)
451
+ );
448
452
  }
449
453
  }
450
454
  return Disposable.create(() => this.close(args));
@@ -8,7 +8,7 @@
8
8
  ********************************************************************************/
9
9
 
10
10
  import { type URI, UriUtils } from '@hydranium/langium';
11
- import { type CanonicalUri, type Tracer } from '@hydranium/protocol';
11
+ import { type CanonicalUri, type Tracer, describeError, describeErrorWithStack } from '@hydranium/protocol';
12
12
  import { type CancellationToken, type Disposable } from 'vscode-languageserver';
13
13
  import { type LogNameOptions } from '../langium/diagnostics/logger.js';
14
14
  import { HYDRANIUM_BUILD_REASONS } from '../langium/document-builder/document-builder.js';
@@ -38,7 +38,7 @@ export interface ReleasedDocument {
38
38
  */
39
39
  export class DocumentReleaseSkippedError extends Error {
40
40
  constructor(cause: unknown) {
41
- super(`Release skipped: the connection or the workspace went away. ${cause instanceof Error ? cause.message : String(cause)}`, {
41
+ super(`Release skipped: the connection or the workspace went away. ${describeError(cause)}`, {
42
42
  cause
43
43
  });
44
44
  this.name = 'DocumentReleaseSkippedError';
@@ -149,16 +149,13 @@ export class DefaultDocumentReleaseHandler implements DocumentReleaseHandler {
149
149
  }
150
150
  // The build holds the file's text: only what followed its parse, such as the diagnostics publish, was lost.
151
151
  const { error } = outcome;
152
- this.tracer
153
- .with(released.uri)
154
- .debug(`Revert on release skipped after its parse: ${error instanceof Error ? error.message : String(error)}`);
152
+ this.tracer.with(released.uri).debug(`Revert on release skipped after its parse: ${describeError(error)}`);
155
153
  return;
156
154
  }
157
155
  if (outcome.kind === 'failed') {
156
+ // Handled below, by a recovery build or the client holding the document again; one that fails rejects on its own.
158
157
  const { error } = outcome;
159
- this.tracer
160
- .with(released.uri)
161
- .error(`Revert on release dropped. ${error instanceof Error ? (error.stack ?? error.message) : String(error)}`);
158
+ this.tracer.with(released.uri).warn(`Revert on release failed; building in its place. ${describeErrorWithStack(error)}`);
162
159
  }
163
160
  const parsed = 'parsed' in outcome && outcome.parsed;
164
161
  // Without it, a revert stopped short, or an override that built nothing,
@@ -171,15 +168,12 @@ export class DefaultDocumentReleaseHandler implements DocumentReleaseHandler {
171
168
  this.services.workspace.LangiumDocuments.getDocument(target) !== undefined) ||
172
169
  outcome.kind === 'failed';
173
170
  const recover = async (): Promise<void> => {
174
- const failure = 'Build after a revert that stopped short failed; the build keeps the released text';
175
- let built: boolean;
176
171
  try {
177
- built = await this.requestRecoveryBuild(released, target, 'decision' in outcome && outcome.decision === 'remove');
172
+ await this.requestRecoveryBuild(released, target, 'decision' in outcome && outcome.decision === 'remove');
178
173
  } catch (err: unknown) {
179
- throw new Error(`${failure}. ${err instanceof Error ? err.message : String(err)}`, { cause: err });
180
- }
181
- if (!built) {
182
- throw new Error(failure);
174
+ throw new Error(`Build after a revert that stopped short failed; the build keeps the released text. ${describeError(err)}`, {
175
+ cause: err
176
+ });
183
177
  }
184
178
  };
185
179
  await this.waitForReleaseBuild(released, target, parsed, stoppedShort && !released.isReclaimed() ? recover : undefined);
@@ -290,8 +284,8 @@ export class DefaultDocumentReleaseHandler implements DocumentReleaseHandler {
290
284
  }
291
285
  }
292
286
 
293
- /** The build in place of a release that stopped short; answers whether it ran. */
294
- protected requestRecoveryBuild(released: ReleasedDocument, target: URI, deleted: boolean): Promise<boolean> {
287
+ /** The build in place of a release that stopped short; rejects with its error when it was given up. */
288
+ protected requestRecoveryBuild(released: ReleasedDocument, target: URI, deleted: boolean): Promise<void> {
295
289
  return this.services.workspace.VersionSyncService.requestRecoveryBuild(target, {
296
290
  deleted,
297
291
  reason: HYDRANIUM_BUILD_REASONS.didRelease,
@@ -319,8 +313,8 @@ export class DefaultDocumentReleaseHandler implements DocumentReleaseHandler {
319
313
  const workspace = this.services.workspace;
320
314
  // A client holding the document again keeps what the build holds for it.
321
315
  if (parsed || workspace.LangiumDocuments.getDocument(target) === undefined || released.isReclaimed()) {
322
- // Settled now, so a failed recovery build is only logged.
323
- startRecovery?.().catch((err: unknown) => this.tracer.with(released.uri).error(err instanceof Error ? err.message : String(err)));
316
+ // The release got what it waits for, so a failed recovery build is diagnosis; its retry warned.
317
+ startRecovery?.().catch((err: unknown) => this.tracer.with(released.uri).debug(describeErrorWithStack(err)));
324
318
  return Promise.resolve();
325
319
  }
326
320
  return new Promise<void>((resolve, reject) => {
@@ -352,9 +346,9 @@ export class DefaultDocumentReleaseHandler implements DocumentReleaseHandler {
352
346
  }
353
347
  },
354
348
  (err: unknown) => {
355
- // Settled by a parse that came first, so only logged.
349
+ // Settled by a parse or removal that came first, so diagnosis; its retry warned.
356
350
  if (ended) {
357
- this.tracer.with(released.uri).error(err instanceof Error ? err.message : String(err));
351
+ this.tracer.with(released.uri).debug(describeErrorWithStack(err));
358
352
  } else {
359
353
  finish(() => reject(err));
360
354
  }
@@ -54,7 +54,9 @@ import {
54
54
  type TextVersion,
55
55
  STALE_VERSION,
56
56
  type Tracer,
57
- UNRECORDED_VERSION
57
+ UNRECORDED_VERSION,
58
+ describeError,
59
+ describeErrorWithStack
58
60
  } from '@hydranium/protocol';
59
61
  import { type LogNameOptions } from '../langium/diagnostics/logger.js';
60
62
  import { LANGUAGE_CLIENT_ID } from './client-ids.js';
@@ -467,9 +469,11 @@ export class HydraniumTextDocuments<T extends TextDocument = TextDocument> exten
467
469
  return;
468
470
  }
469
471
  }
470
- this.log(
472
+ // Diagnosis: one comes with every keystroke.
473
+ this.logUri(
471
474
  document.uri,
472
- `Update to version ${document.version} by ${this.formatClientId(clientId)}${committed.changed ? '' : ' (content unchanged)'}`
475
+ `Update to version ${document.version} by ${this.formatClientId(clientId)}${committed.changed ? '' : ' (content unchanged)'}`,
476
+ 'debug'
473
477
  );
474
478
  this.__onDidChangeContent.fire(Object.freeze({ document, clientId }));
475
479
  }
@@ -501,9 +505,10 @@ export class HydraniumTextDocuments<T extends TextDocument = TextDocument> exten
501
505
  // Unchanged text calls no update: a configuration may return a new document for one.
502
506
  const { document, changed } =
503
507
  synced.getText() === text ? { document: synced, changed: false } : this.commitChange(key, synced, [{ text }], clientId);
504
- this.log(
508
+ this.logUri(
505
509
  document.uri,
506
- `Update to version ${document.version} by ${this.formatClientId(clientId)}${changed ? '' : ' (content unchanged)'}`
510
+ `Update to version ${document.version} by ${this.formatClientId(clientId)}${changed ? '' : ' (content unchanged)'}`,
511
+ 'debug'
507
512
  );
508
513
  this.__onDidChangeContent.fire(Object.freeze({ document, clientId }));
509
514
  return document.version;
@@ -643,9 +648,7 @@ export class HydraniumTextDocuments<T extends TextDocument = TextDocument> exten
643
648
  if (isDocumentReleaseSkippedError(err)) {
644
649
  this.tracer.with(released.uri).debug(err.message);
645
650
  } else {
646
- this.tracer
647
- .with(released.uri)
648
- .error(`Release handler failed. ${err instanceof Error ? (err.stack ?? err.message) : String(err)}`);
651
+ this.tracer.with(released.uri).error(`Release handler failed. ${describeErrorWithStack(err)}`);
649
652
  }
650
653
  // Left unsettled, a watcher keeps the document dirty though the store answers clean.
651
654
  announceClean(false);
@@ -709,9 +712,7 @@ export class HydraniumTextDocuments<T extends TextDocument = TextDocument> exten
709
712
  this.services.workspace.FileSystemProvider.readFile(UriUtils.toUri(uri))
710
713
  );
711
714
  } catch (err: unknown) {
712
- this.tracer
713
- .with(uri)
714
- .debug(`Editor save not announced: reading the file back failed. ${err instanceof Error ? err.message : String(err)}`);
715
+ this.tracer.with(uri).debug(`Editor save not announced: reading the file back failed. ${describeError(err)}`);
715
716
  return;
716
717
  }
717
718
  // What the file holds, not what the editor meant to write: an editor
@@ -1204,7 +1205,7 @@ export class HydraniumTextDocuments<T extends TextDocument = TextDocument> exten
1204
1205
  this.services.workspace.FileSystemProvider.readFile(UriUtils.toUri(key))
1205
1206
  );
1206
1207
  } catch (err: unknown) {
1207
- this.tracer.with(key).debug(`Disk baseline: the file cannot be read. ${err instanceof Error ? err.message : String(err)}`);
1208
+ this.tracer.with(key).debug(`Disk baseline: the file cannot be read. ${describeError(err)}`);
1208
1209
  }
1209
1210
  this.setDiskBaseline(key, onDisk);
1210
1211
  }
@@ -333,10 +333,11 @@ export class DefaultLanguageClientShadow<T extends TextDocument = TextDocument>
333
333
  notifyOutcome: outcome => {
334
334
  if (!settled) {
335
335
  settled = true;
336
+ // Routine: an edit in the editor moved the version on before the push arrived.
336
337
  if (outcome === 'refused' && version !== null) {
337
338
  this.tracer
338
339
  .with(key)
339
- .warn(
340
+ .debug(
340
341
  `Language client refused applyEdit addressed at version ${version} (it last declared version ${state.declaredVersion})`
341
342
  );
342
343
  }