@design.estate/wcctools 6.0.0 → 6.2.0

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 (202) hide show
  1. package/changelog.md +33 -0
  2. package/dist_shell/bundle.js +405 -368
  3. package/dist_shell/bundle.js.map +1 -1
  4. package/dist_shell/bundle.js.third-party-notices.json +52 -0
  5. package/dist_shell/bundle.js.third-party-notices.txt +107 -1
  6. package/dist_shell/index.html +1 -1
  7. package/dist_ts/00_commitinfo_data.js +1 -1
  8. package/dist_ts/classes.bundlestatus.d.ts +36 -0
  9. package/dist_ts/classes.bundlestatus.js +110 -0
  10. package/dist_ts/classes.devapi.d.ts +3 -0
  11. package/dist_ts/classes.devapi.js +8 -1
  12. package/dist_ts/classes.devserver.d.ts +45 -10
  13. package/dist_ts/classes.devserver.js +123 -49
  14. package/dist_ts/cli.js +12 -3
  15. package/dist_ts/index.d.ts +0 -2
  16. package/dist_ts/index.js +1 -3
  17. package/dist_ts/plugins.d.ts +7 -2
  18. package/dist_ts/plugins.js +9 -3
  19. package/dist_ts/standards/baselines.d.ts +27 -0
  20. package/dist_ts/standards/baselines.js +83 -0
  21. package/dist_ts/standards/checker.d.ts +21 -0
  22. package/dist_ts/standards/checker.js +88 -0
  23. package/dist_ts/standards/classes.gitrepo.d.ts +13 -0
  24. package/dist_ts/standards/classes.gitrepo.js +43 -0
  25. package/dist_ts/standards/classes.sourceedits.d.ts +15 -0
  26. package/dist_ts/standards/classes.sourceedits.js +54 -0
  27. package/dist_ts/standards/classes.standardfixer.d.ts +40 -0
  28. package/dist_ts/standards/classes.standardfixer.js +210 -0
  29. package/dist_ts/standards/classes.standardproject.d.ts +80 -0
  30. package/dist_ts/standards/classes.standardproject.js +195 -0
  31. package/dist_ts/standards/classes.standardtree.d.ts +56 -0
  32. package/dist_ts/standards/classes.standardtree.js +207 -0
  33. package/dist_ts/standards/cli.d.ts +7 -0
  34. package/dist_ts/standards/cli.js +89 -0
  35. package/dist_ts/standards/config.d.ts +33 -0
  36. package/dist_ts/standards/config.js +139 -0
  37. package/dist_ts/standards/errors.d.ts +9 -0
  38. package/dist_ts/standards/errors.js +17 -0
  39. package/dist_ts/standards/helpers.ast.d.ts +56 -0
  40. package/dist_ts/standards/helpers.ast.js +172 -0
  41. package/dist_ts/standards/helpers.paths.d.ts +36 -0
  42. package/dist_ts/standards/helpers.paths.js +86 -0
  43. package/dist_ts/standards/index.d.ts +14 -0
  44. package/dist_ts/standards/index.js +15 -0
  45. package/dist_ts/standards/output.d.ts +7 -0
  46. package/dist_ts/standards/output.js +57 -0
  47. package/dist_ts/standards/ratchet.d.ts +15 -0
  48. package/dist_ts/standards/ratchet.js +45 -0
  49. package/dist_ts/standards/rule.d.ts +50 -0
  50. package/dist_ts/standards/rule.js +9 -0
  51. package/dist_ts/standards/rules/barrel.element-index.d.ts +7 -0
  52. package/dist_ts/standards/rules/barrel.element-index.js +108 -0
  53. package/dist_ts/standards/rules/barrel.no-demo-export.d.ts +3 -0
  54. package/dist_ts/standards/rules/barrel.no-demo-export.js +29 -0
  55. package/dist_ts/standards/rules/demo.fixture-not-exported.d.ts +3 -0
  56. package/dist_ts/standards/rules/demo.fixture-not-exported.js +29 -0
  57. package/dist_ts/standards/rules/demo.groups.d.ts +6 -0
  58. package/dist_ts/standards/rules/demo.groups.js +72 -0
  59. package/dist_ts/standards/rules/demo.required.d.ts +3 -0
  60. package/dist_ts/standards/rules/demo.required.js +48 -0
  61. package/dist_ts/standards/rules/demo.separate-file.d.ts +3 -0
  62. package/dist_ts/standards/rules/demo.separate-file.js +38 -0
  63. package/dist_ts/standards/rules/demo.shape.d.ts +3 -0
  64. package/dist_ts/standards/rules/demo.shape.js +38 -0
  65. package/dist_ts/standards/rules/docs.component-index.d.ts +8 -0
  66. package/dist_ts/standards/rules/docs.component-index.js +84 -0
  67. package/dist_ts/standards/rules/element.exported.d.ts +3 -0
  68. package/dist_ts/standards/rules/element.exported.js +33 -0
  69. package/dist_ts/standards/rules/element.literal-tag.d.ts +3 -0
  70. package/dist_ts/standards/rules/element.literal-tag.js +30 -0
  71. package/dist_ts/standards/rules/element.reachable.d.ts +3 -0
  72. package/dist_ts/standards/rules/element.reachable.js +48 -0
  73. package/dist_ts/standards/rules/element.tag-map.d.ts +3 -0
  74. package/dist_ts/standards/rules/element.tag-map.js +83 -0
  75. package/dist_ts/standards/rules/i18n.literals.d.ts +3 -0
  76. package/dist_ts/standards/rules/i18n.literals.js +52 -0
  77. package/dist_ts/standards/rules/index.d.ts +12 -0
  78. package/dist_ts/standards/rules/index.js +83 -0
  79. package/dist_ts/standards/rules/layout.element-folder.d.ts +3 -0
  80. package/dist_ts/standards/rules/layout.element-folder.js +47 -0
  81. package/dist_ts/standards/rules/layout.entry-file-name.d.ts +3 -0
  82. package/dist_ts/standards/rules/layout.entry-file-name.js +71 -0
  83. package/dist_ts/standards/rules/layout.entry.d.ts +3 -0
  84. package/dist_ts/standards/rules/layout.entry.js +38 -0
  85. package/dist_ts/standards/rules/layout.group-folder.d.ts +3 -0
  86. package/dist_ts/standards/rules/layout.group-folder.js +22 -0
  87. package/dist_ts/standards/rules/layout.shared-00.d.ts +3 -0
  88. package/dist_ts/standards/rules/layout.shared-00.js +36 -0
  89. package/dist_ts/standards/rules/naming.class-matches-tag.d.ts +3 -0
  90. package/dist_ts/standards/rules/naming.class-matches-tag.js +26 -0
  91. package/dist_ts/standards/rules/naming.lowercase-files.d.ts +3 -0
  92. package/dist_ts/standards/rules/naming.lowercase-files.js +26 -0
  93. package/dist_ts/standards/rules/naming.tag-prefix.d.ts +3 -0
  94. package/dist_ts/standards/rules/naming.tag-prefix.js +23 -0
  95. package/dist_ts/standards/rules/props.accessor.d.ts +3 -0
  96. package/dist_ts/standards/rules/props.accessor.js +35 -0
  97. package/dist_ts/standards/rules/props.object-no-attribute.d.ts +3 -0
  98. package/dist_ts/standards/rules/props.object-no-attribute.js +42 -0
  99. package/dist_ts/standards/rules/props.reflect-primitive.d.ts +5 -0
  100. package/dist_ts/standards/rules/props.reflect-primitive.js +41 -0
  101. package/dist_ts/standards/rules/props.typed.d.ts +6 -0
  102. package/dist_ts/standards/rules/props.typed.js +64 -0
  103. package/dist_ts/standards/rules/shared.d.ts +38 -0
  104. package/dist_ts/standards/rules/shared.js +103 -0
  105. package/dist_ts/standards/rules/style.bdtheme.d.ts +5 -0
  106. package/dist_ts/standards/rules/style.bdtheme.js +28 -0
  107. package/dist_ts_interfaces/index.d.ts +1 -0
  108. package/dist_ts_interfaces/index.js +2 -1
  109. package/dist_ts_interfaces/requests.d.ts +35 -0
  110. package/dist_ts_interfaces/standard.d.ts +93 -0
  111. package/dist_ts_interfaces/standard.js +6 -0
  112. package/dist_ts_shell/bundlestatus.d.ts +15 -0
  113. package/dist_ts_shell/bundlestatus.js +64 -0
  114. package/dist_ts_shell/elements/wcc-contextmenu.d.ts +3 -0
  115. package/dist_ts_shell/elements/wcc-contextmenu.js +18 -3
  116. package/dist_ts_shell/elements/wcc-preview-frame.d.ts +6 -0
  117. package/dist_ts_shell/elements/wcc-preview-frame.js +50 -2
  118. package/dist_ts_shell/elements/wcc-shell.d.ts +15 -0
  119. package/dist_ts_shell/elements/wcc-shell.js +45 -3
  120. package/dist_ts_shell/plugins.d.ts +2 -1
  121. package/dist_ts_shell/plugins.js +3 -2
  122. package/dist_ts_web/00_commitinfo_data.js +1 -1
  123. package/package.json +8 -3
  124. package/readme.md +40 -3
  125. package/ts/00_commitinfo_data.ts +1 -1
  126. package/ts/classes.bundlestatus.ts +123 -0
  127. package/ts/classes.devapi.ts +9 -0
  128. package/ts/classes.devserver.ts +127 -47
  129. package/ts/cli.ts +12 -2
  130. package/ts/index.ts +0 -2
  131. package/ts/plugins.ts +10 -2
  132. package/ts/standards/baselines.ts +100 -0
  133. package/ts/standards/checker.ts +114 -0
  134. package/ts/standards/classes.gitrepo.ts +48 -0
  135. package/ts/standards/classes.sourceedits.ts +58 -0
  136. package/ts/standards/classes.standardfixer.ts +234 -0
  137. package/ts/standards/classes.standardproject.ts +250 -0
  138. package/ts/standards/classes.standardtree.ts +220 -0
  139. package/ts/standards/cli.ts +86 -0
  140. package/ts/standards/config.ts +160 -0
  141. package/ts/standards/errors.ts +18 -0
  142. package/ts/standards/helpers.ast.ts +208 -0
  143. package/ts/standards/helpers.paths.ts +119 -0
  144. package/ts/standards/index.ts +22 -0
  145. package/ts/standards/output.ts +65 -0
  146. package/ts/standards/ratchet.ts +63 -0
  147. package/ts/standards/rule.ts +58 -0
  148. package/ts/standards/rules/barrel.element-index.ts +112 -0
  149. package/ts/standards/rules/barrel.no-demo-export.ts +30 -0
  150. package/ts/standards/rules/demo.fixture-not-exported.ts +30 -0
  151. package/ts/standards/rules/demo.groups.ts +74 -0
  152. package/ts/standards/rules/demo.required.ts +49 -0
  153. package/ts/standards/rules/demo.separate-file.ts +40 -0
  154. package/ts/standards/rules/demo.shape.ts +42 -0
  155. package/ts/standards/rules/docs.component-index.ts +88 -0
  156. package/ts/standards/rules/element.exported.ts +35 -0
  157. package/ts/standards/rules/element.literal-tag.ts +30 -0
  158. package/ts/standards/rules/element.reachable.ts +49 -0
  159. package/ts/standards/rules/element.tag-map.ts +87 -0
  160. package/ts/standards/rules/i18n.literals.ts +58 -0
  161. package/ts/standards/rules/index.ts +87 -0
  162. package/ts/standards/rules/layout.element-folder.ts +49 -0
  163. package/ts/standards/rules/layout.entry-file-name.ts +73 -0
  164. package/ts/standards/rules/layout.entry.ts +40 -0
  165. package/ts/standards/rules/layout.group-folder.ts +23 -0
  166. package/ts/standards/rules/layout.shared-00.ts +37 -0
  167. package/ts/standards/rules/naming.class-matches-tag.ts +27 -0
  168. package/ts/standards/rules/naming.lowercase-files.ts +27 -0
  169. package/ts/standards/rules/naming.tag-prefix.ts +24 -0
  170. package/ts/standards/rules/props.accessor.ts +37 -0
  171. package/ts/standards/rules/props.object-no-attribute.ts +45 -0
  172. package/ts/standards/rules/props.reflect-primitive.ts +44 -0
  173. package/ts/standards/rules/props.typed.ts +70 -0
  174. package/ts/standards/rules/shared.ts +127 -0
  175. package/ts/standards/rules/style.bdtheme.ts +31 -0
  176. package/ts_interfaces/bridge.ts +95 -0
  177. package/ts_interfaces/catalog.ts +37 -0
  178. package/ts_interfaces/index.ts +4 -0
  179. package/ts_interfaces/plugins.ts +3 -0
  180. package/ts_interfaces/requests.ts +65 -0
  181. package/ts_interfaces/standard.ts +103 -0
  182. package/ts_shared/index.ts +1 -0
  183. package/ts_shared/plugins.ts +3 -0
  184. package/ts_shared/previewroute.ts +58 -0
  185. package/ts_shell/bundlestatus.ts +68 -0
  186. package/ts_shell/elements/wcc-contextmenu.ts +306 -0
  187. package/ts_shell/elements/wcc-preview-frame.ts +167 -0
  188. package/ts_shell/elements/wcc-properties.ts +998 -0
  189. package/ts_shell/elements/wcc-record-button.ts +108 -0
  190. package/ts_shell/elements/wcc-recording-panel.ts +1005 -0
  191. package/ts_shell/elements/wcc-shell.ts +485 -0
  192. package/ts_shell/elements/wcc-sidebar.ts +1419 -0
  193. package/ts_shell/index.html +21 -0
  194. package/ts_shell/index.ts +4 -0
  195. package/ts_shell/plugins.ts +12 -0
  196. package/ts_shell/previewconnection.ts +103 -0
  197. package/ts_shell/services/recorder.service.ts +451 -0
  198. package/ts_shell/types/dom-mediacapture-stub/index.d.ts +12 -0
  199. package/ts_shell/types/dom-mediacapture-stub/package.json +6 -0
  200. package/ts_shell/types/dom-webcodecs-stub/index.d.ts +2 -0
  201. package/ts_shell/types/dom-webcodecs-stub/package.json +6 -0
  202. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -26,6 +26,12 @@ declare global {
26
26
  export declare class WccShell extends DeesElement {
27
27
  /** The path the server serves the preview document on. */
28
28
  accessor previewPath: string;
29
+ /**
30
+ * The dev server's typed API. With it, the shell follows the bundle status and shows a failed
31
+ * catalog bundle over the preview; without it (the shell outside `wcctools dev`), it does not.
32
+ * Read when the shell connects.
33
+ */
34
+ accessor apiPath: string;
29
35
  accessor selection: plugins.interfaces.IWccSelection | null;
30
36
  accessor selectedViewport: TWccViewport;
31
37
  accessor selectedTheme: plugins.interfaces.TWccTheme;
@@ -42,6 +48,8 @@ export declare class WccShell extends DeesElement {
42
48
  accessor advancedEditorOpen: boolean;
43
49
  accessor isResizing: boolean;
44
50
  accessor captureTarget: HTMLElement | null;
51
+ /** The catalog bundles whose latest completed run failed, as the dev server reports them. */
52
+ accessor bundleFailures: plugins.interfaces.IWccBundleStatus[];
45
53
  get isNative(): boolean;
46
54
  private frameScrollY;
47
55
  private sidebarScrollY;
@@ -49,6 +57,7 @@ export declare class WccShell extends DeesElement {
49
57
  /** The selection the preview shows, as far as the shell asked it to. */
50
58
  private previewSelectionKey;
51
59
  private connection;
60
+ private bundleStatusClient;
52
61
  private routeDisposers;
53
62
  private scrollDisposers;
54
63
  private scrollUpdateTimeout;
@@ -57,6 +66,12 @@ export declare class WccShell extends DeesElement {
57
66
  private handleDocumentKeydown;
58
67
  connectedCallback(): Promise<void>;
59
68
  disconnectedCallback(): Promise<void>;
69
+ private startBundleStatus;
70
+ /**
71
+ * Apply the dev server's bundle status: a bundle whose latest completed run failed is shown
72
+ * over the preview until a run of it finishes, which also reloads the preview.
73
+ */
74
+ applyBundleStatus(snapshotArg: plugins.interfaces.IWccBundleStatusSnapshot): void;
60
75
  firstUpdated(): Promise<void>;
61
76
  private connectRoutes;
62
77
  /**
@@ -35,6 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import { DeesElement, property, state, html, customElement } from '@design.estate/dees-element';
36
36
  import * as plugins from '../plugins.js';
37
37
  import { WccPreviewConnection } from '../previewconnection.js';
38
+ import { WccBundleStatusClient } from '../bundlestatus.js';
38
39
  import './wcc-preview-frame.js';
39
40
  import './wcc-sidebar.js';
40
41
  import './wcc-properties.js';
@@ -56,6 +57,9 @@ let WccShell = (() => {
56
57
  let _previewPath_decorators;
57
58
  let _previewPath_initializers = [];
58
59
  let _previewPath_extraInitializers = [];
60
+ let _apiPath_decorators;
61
+ let _apiPath_initializers = [];
62
+ let _apiPath_extraInitializers = [];
59
63
  let _selection_decorators;
60
64
  let _selection_initializers = [];
61
65
  let _selection_extraInitializers = [];
@@ -95,11 +99,15 @@ let WccShell = (() => {
95
99
  let _captureTarget_decorators;
96
100
  let _captureTarget_initializers = [];
97
101
  let _captureTarget_extraInitializers = [];
102
+ let _bundleFailures_decorators;
103
+ let _bundleFailures_initializers = [];
104
+ let _bundleFailures_extraInitializers = [];
98
105
  var WccShell = class extends _classSuper {
99
106
  static { _classThis = this; }
100
107
  static {
101
108
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
102
109
  _previewPath_decorators = [property({ attribute: 'preview-path' })];
110
+ _apiPath_decorators = [property({ attribute: 'api-path' })];
103
111
  _selection_decorators = [property({ attribute: false })];
104
112
  _selectedViewport_decorators = [property()];
105
113
  _selectedTheme_decorators = [property()];
@@ -113,7 +121,9 @@ let WccShell = (() => {
113
121
  _advancedEditorOpen_decorators = [state()];
114
122
  _isResizing_decorators = [state()];
115
123
  _captureTarget_decorators = [state()];
124
+ _bundleFailures_decorators = [state()];
116
125
  __esDecorate(this, null, _previewPath_decorators, { kind: "accessor", name: "previewPath", static: false, private: false, access: { has: obj => "previewPath" in obj, get: obj => obj.previewPath, set: (obj, value) => { obj.previewPath = value; } }, metadata: _metadata }, _previewPath_initializers, _previewPath_extraInitializers);
126
+ __esDecorate(this, null, _apiPath_decorators, { kind: "accessor", name: "apiPath", static: false, private: false, access: { has: obj => "apiPath" in obj, get: obj => obj.apiPath, set: (obj, value) => { obj.apiPath = value; } }, metadata: _metadata }, _apiPath_initializers, _apiPath_extraInitializers);
117
127
  __esDecorate(this, null, _selection_decorators, { kind: "accessor", name: "selection", static: false, private: false, access: { has: obj => "selection" in obj, get: obj => obj.selection, set: (obj, value) => { obj.selection = value; } }, metadata: _metadata }, _selection_initializers, _selection_extraInitializers);
118
128
  __esDecorate(this, null, _selectedViewport_decorators, { kind: "accessor", name: "selectedViewport", static: false, private: false, access: { has: obj => "selectedViewport" in obj, get: obj => obj.selectedViewport, set: (obj, value) => { obj.selectedViewport = value; } }, metadata: _metadata }, _selectedViewport_initializers, _selectedViewport_extraInitializers);
119
129
  __esDecorate(this, null, _selectedTheme_decorators, { kind: "accessor", name: "selectedTheme", static: false, private: false, access: { has: obj => "selectedTheme" in obj, get: obj => obj.selectedTheme, set: (obj, value) => { obj.selectedTheme = value; } }, metadata: _metadata }, _selectedTheme_initializers, _selectedTheme_extraInitializers);
@@ -127,6 +137,7 @@ let WccShell = (() => {
127
137
  __esDecorate(this, null, _advancedEditorOpen_decorators, { kind: "accessor", name: "advancedEditorOpen", static: false, private: false, access: { has: obj => "advancedEditorOpen" in obj, get: obj => obj.advancedEditorOpen, set: (obj, value) => { obj.advancedEditorOpen = value; } }, metadata: _metadata }, _advancedEditorOpen_initializers, _advancedEditorOpen_extraInitializers);
128
138
  __esDecorate(this, null, _isResizing_decorators, { kind: "accessor", name: "isResizing", static: false, private: false, access: { has: obj => "isResizing" in obj, get: obj => obj.isResizing, set: (obj, value) => { obj.isResizing = value; } }, metadata: _metadata }, _isResizing_initializers, _isResizing_extraInitializers);
129
139
  __esDecorate(this, null, _captureTarget_decorators, { kind: "accessor", name: "captureTarget", static: false, private: false, access: { has: obj => "captureTarget" in obj, get: obj => obj.captureTarget, set: (obj, value) => { obj.captureTarget = value; } }, metadata: _metadata }, _captureTarget_initializers, _captureTarget_extraInitializers);
140
+ __esDecorate(this, null, _bundleFailures_decorators, { kind: "accessor", name: "bundleFailures", static: false, private: false, access: { has: obj => "bundleFailures" in obj, get: obj => obj.bundleFailures, set: (obj, value) => { obj.bundleFailures = value; } }, metadata: _metadata }, _bundleFailures_initializers, _bundleFailures_extraInitializers);
130
141
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
131
142
  WccShell = _classThis = _classDescriptor.value;
132
143
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -136,7 +147,15 @@ let WccShell = (() => {
136
147
  /** The path the server serves the preview document on. */
137
148
  get previewPath() { return this.#previewPath_accessor_storage; }
138
149
  set previewPath(value) { this.#previewPath_accessor_storage = value; }
139
- #selection_accessor_storage = (__runInitializers(this, _previewPath_extraInitializers), __runInitializers(this, _selection_initializers, null));
150
+ #apiPath_accessor_storage = (__runInitializers(this, _previewPath_extraInitializers), __runInitializers(this, _apiPath_initializers, ''));
151
+ /**
152
+ * The dev server's typed API. With it, the shell follows the bundle status and shows a failed
153
+ * catalog bundle over the preview; without it (the shell outside `wcctools dev`), it does not.
154
+ * Read when the shell connects.
155
+ */
156
+ get apiPath() { return this.#apiPath_accessor_storage; }
157
+ set apiPath(value) { this.#apiPath_accessor_storage = value; }
158
+ #selection_accessor_storage = (__runInitializers(this, _apiPath_extraInitializers), __runInitializers(this, _selection_initializers, null));
140
159
  get selection() { return this.#selection_accessor_storage; }
141
160
  set selection(value) { this.#selection_accessor_storage = value; }
142
161
  #selectedViewport_accessor_storage = (__runInitializers(this, _selection_extraInitializers), __runInitializers(this, _selectedViewport_initializers, 'desktop'));
@@ -179,10 +198,14 @@ let WccShell = (() => {
179
198
  #captureTarget_accessor_storage = (__runInitializers(this, _isResizing_extraInitializers), __runInitializers(this, _captureTarget_initializers, null));
180
199
  get captureTarget() { return this.#captureTarget_accessor_storage; }
181
200
  set captureTarget(value) { this.#captureTarget_accessor_storage = value; }
201
+ #bundleFailures_accessor_storage = (__runInitializers(this, _captureTarget_extraInitializers), __runInitializers(this, _bundleFailures_initializers, []));
202
+ /** The catalog bundles whose latest completed run failed, as the dev server reports them. */
203
+ get bundleFailures() { return this.#bundleFailures_accessor_storage; }
204
+ set bundleFailures(value) { this.#bundleFailures_accessor_storage = value; }
182
205
  get isNative() {
183
206
  return this.selectedViewport === 'native';
184
207
  }
185
- frameScrollY = (__runInitializers(this, _captureTarget_extraInitializers), 0);
208
+ frameScrollY = (__runInitializers(this, _bundleFailures_extraInitializers), 0);
186
209
  sidebarScrollY = 0;
187
210
  scrollPositionsRestored = false;
188
211
  /** The selection the preview shows, as far as the shell asked it to. */
@@ -202,6 +225,7 @@ let WccShell = (() => {
202
225
  this.debouncedScrollUpdate();
203
226
  },
204
227
  });
228
+ bundleStatusClient = null;
205
229
  routeDisposers = [];
206
230
  scrollDisposers = [];
207
231
  scrollUpdateTimeout;
@@ -281,6 +305,7 @@ let WccShell = (() => {
281
305
  .sidebarWidth=${this.sidebarWidth}
282
306
  .advancedEditorOpen=${this.advancedEditorOpen}
283
307
  .isResizing=${this.isResizing}
308
+ .bundleFailures=${this.bundleFailures}
284
309
  ></wcc-preview-frame>
285
310
  `;
286
311
  }
@@ -299,6 +324,7 @@ let WccShell = (() => {
299
324
  const connected = super.connectedCallback();
300
325
  document.addEventListener('keydown', this.handleDocumentKeydown);
301
326
  this.connection.start();
327
+ this.startBundleStatus();
302
328
  if (this.hasUpdated) {
303
329
  await this.setupSidebarScrollListener();
304
330
  }
@@ -309,6 +335,8 @@ let WccShell = (() => {
309
335
  const disconnected = super.disconnectedCallback();
310
336
  document.removeEventListener('keydown', this.handleDocumentKeydown);
311
337
  this.connection.dispose();
338
+ this.bundleStatusClient?.dispose();
339
+ this.bundleStatusClient = null;
312
340
  this.bridge = null;
313
341
  for (const dispose of this.routeDisposers) {
314
342
  dispose();
@@ -318,6 +346,20 @@ let WccShell = (() => {
318
346
  clearTimeout(this.scrollUpdateTimeout);
319
347
  return disconnected;
320
348
  }
349
+ startBundleStatus() {
350
+ if (!this.apiPath || this.bundleStatusClient) {
351
+ return;
352
+ }
353
+ this.bundleStatusClient = new WccBundleStatusClient(this.apiPath, (snapshotArg) => this.applyBundleStatus(snapshotArg));
354
+ this.bundleStatusClient.start();
355
+ }
356
+ /**
357
+ * Apply the dev server's bundle status: a bundle whose latest completed run failed is shown
358
+ * over the preview until a run of it finishes, which also reloads the preview.
359
+ */
360
+ applyBundleStatus(snapshotArg) {
361
+ this.bundleFailures = snapshotArg.bundles.filter((bundleArg) => bundleArg.errorMessage !== undefined);
362
+ }
321
363
  async firstUpdated() {
322
364
  await this.setupSidebarScrollListener();
323
365
  }
@@ -521,4 +563,4 @@ let WccShell = (() => {
521
563
  return WccShell = _classThis;
522
564
  })();
523
565
  export { WccShell };
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXNoZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfc2hlbGwvZWxlbWVudHMvd2NjLXNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNySCxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxxQkFBcUIsQ0FBQztBQVc3QixNQUFNLFNBQVMsR0FBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFxRCxFQUFpQixFQUFFLENBQzVGLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFRM0c7Ozs7O0dBS0c7SUFFVSxRQUFROzRCQURwQixhQUFhLENBQUMsV0FBVyxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBQW5CLFNBQVEsV0FBVzs7Ozt1Q0FFdEMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO3FDQUd2QyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7NENBRzlCLFFB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
566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXNoZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfc2hlbGwvZWxlbWVudHMvd2NjLXNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNySCxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUczRCxPQUFPLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxxQkFBcUIsQ0FBQztBQVc3QixNQUFNLFNBQVMsR0FBbUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQUM7QUFFaEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFxRCxFQUFpQixFQUFFLENBQzVGLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFRM0c7Ozs7O0dBS0c7SUFFVSxRQUFROzRCQURwQixhQUFhLENBQUMsV0FBVyxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBQW5CLFNBQVEsV0FBVzs7Ozt1Q0FFdEMsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDO21DQVF2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
@@ -1,4 +1,5 @@
1
+ import * as typedrequest from '@api.global/typedrequest';
1
2
  import * as deesDomtools from '@design.estate/dees-domtools';
2
3
  import * as interfaces from '../dist_ts_interfaces/index.js';
3
4
  import * as shared from '../dist_ts_shared/index.js';
4
- export { deesDomtools, interfaces, shared, };
5
+ export { typedrequest, deesDomtools, interfaces, shared, };
@@ -1,5 +1,6 @@
1
+ import * as typedrequest from '@api.global/typedrequest';
1
2
  import * as deesDomtools from '@design.estate/dees-domtools';
2
3
  import * as interfaces from '../dist_ts_interfaces/index.js';
3
4
  import * as shared from '../dist_ts_shared/index.js';
4
- export { deesDomtools, interfaces, shared, };
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3NoZWxsL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFlBQVksTUFBTSw4QkFBOEIsQ0FBQztBQUU3RCxPQUFPLEtBQUssVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxNQUFNLE1BQU0sdUJBQXVCLENBQUM7QUFFaEQsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxHQUNQLENBQUMifQ==
5
+ export { typedrequest, deesDomtools, interfaces, shared, };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3NoZWxsL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssWUFBWSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELE9BQU8sS0FBSyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxHQUNQLENBQUMifQ==
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/wcctools',
6
- version: '6.0.0',
6
+ version: '6.2.0',
7
7
  description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUseUJBQXlCO0lBQy9CLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxtSkFBbUo7Q0FDakssQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/wcctools",
3
- "version": "6.0.0",
3
+ "version": "6.2.0",
4
4
  "private": false,
5
5
  "description": "A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.",
6
6
  "bin": {
@@ -19,10 +19,12 @@
19
19
  "@api.global/typedserver": "^14.2.1",
20
20
  "@design.estate/dees-domtools": "^5.0.0",
21
21
  "@design.estate/dees-element": "^4.0.0",
22
- "@git.zone/tswatch": "^6.0.1",
22
+ "@git.zone/tswatch": "^7.0.0",
23
+ "@push.rocks/smartconfig": "^6.3.0",
23
24
  "@push.rocks/smartconsole": "^2.1.0",
24
25
  "@push.rocks/smartexit": "^2.2.0",
25
- "lit": "^3.3.2"
26
+ "lit": "^3.3.2",
27
+ "typescript": "~6.0.3"
26
28
  },
27
29
  "devDependencies": {
28
30
  "@git.zone/tsbuild": "^5.1.2",
@@ -36,6 +38,9 @@
36
38
  },
37
39
  "files": [
38
40
  "ts/**/*",
41
+ "ts_interfaces/**/*",
42
+ "ts_shared/**/*",
43
+ "ts_shell/**/*",
39
44
  "ts_web/**/*",
40
45
  "dist/**/*",
41
46
  "dist_*/**/*",
package/readme.md CHANGED
@@ -165,7 +165,7 @@ pnpm exec wcctools dev # port from the tswatch configuration, else 30
165
165
  pnpm exec wcctools dev --port 0 # any free port
166
166
  ```
167
167
 
168
- It prints the shell's address, for example `wcctools dev: http://localhost:3002/wcctools/`. Saving a source file rebuilds the bundle and reloads only the preview frame; the shell keeps its state. `Ctrl+C` stops the server and the watchers.
168
+ It prints the shell's address, for example `wcctools dev: http://localhost:3002/wcctools/`. Saving a source file rebuilds the bundle and reloads only the preview frame; the shell keeps its state. When a bundle fails, the shell shows `bundle failed` with the bundler's message over the preview until the next run of that bundle finishes. `Ctrl+C` (or `SIGTERM`) stops the server and the watchers.
169
169
 
170
170
  ## 📂 Sections Configuration
171
171
 
@@ -498,11 +498,48 @@ Bundles and watches the catalogue as the project's `@git.zone/tswatch` configura
498
498
  |------|--------|
499
499
  | `/` | Redirects to `/wcctools/` |
500
500
  | `/wcctools/`, `/wcctools-route/...` | The shell |
501
- | `/wcctools/typedrequest` | The shell's typed API |
501
+ | `/wcctools/typedrequest` | The shell's typed API: the server info (`getDevServerInfo`) and the bundle status (`getBundleStatus`) |
502
502
  | every other path | The catalogue's serve directory (default `dist_watch/`), with live reload for the preview document |
503
503
 
504
504
  `--port` overrides the configured port; `0` picks a free port.
505
505
 
506
+ The shell follows the bundle status: per bundle the state of its latest run (`started`, `finished` or `failed`), the duration of the latest completed run and, while its latest completed run failed, the bundler's error message. A failed bundle is shown over the preview until a run of it finishes, which also reloads the preview. The typed API is read-only.
507
+
508
+ `wcctools dev` owns the process signals: on `SIGINT` or `SIGTERM` it stops the server and tswatch's bundling and watching once, within tswatch's shutdown deadline (the longest `stopGracePeriod` of the configured watcher commands plus a margin), and exits.
509
+
510
+ Every `wcctools` command exits with code 2 on a usage error (an unknown command or option, a missing or invalid option value) and with 1 on any other failure.
511
+
512
+ ### `wcctools check` and `wcctools fix`
513
+
514
+ Check a catalogue against the wcctools component standard ([docs/standard.md](https://code.foss.global/design.estate/wcctools/src/branch/main/docs/standard.md), a draft: rule ids, severities and defaults may still change until it is declared stable): file layout, naming, element registration, barrels, demos and the attribute surface of public properties, plus the theme, wording and component-index ratchets of the dees-catalog family. Both commands run in the repository root and read `.smartconfig.json`:
515
+
516
+ ```json
517
+ {
518
+ "@design.estate/wcctools": {
519
+ "standard": {
520
+ "profile": "base",
521
+ "tagPrefix": "my"
522
+ }
523
+ }
524
+ }
525
+ ```
526
+
527
+ `profile` is `base` or `dees`; `tagPrefix` is the tag prefix without its hyphen. Exceptions go into `standard.allowlist` (rule id → `'<file>#<member>'` → `'<category>: <reason>'`), accepted error counts of an existing codebase into `standard.baselines` (rule id → file → count, only shrinking).
528
+
529
+ ```bash
530
+ wcctools check # findings as text; exit 0 ok, 1 failing errors, 2 configuration or usage error
531
+ wcctools check --json # one IStandardReport on stdout
532
+ wcctools check --verbose # also info findings, covered findings and baseline slack
533
+ wcctools check --init-baseline # record the current error counts (only while no baselines exist)
534
+ wcctools check --update-baseline # lower the baselines to the current counts; refuses to raise any
535
+
536
+ wcctools fix --dry-run # show the moves and edits without writing
537
+ wcctools fix # apply every automatic fix
538
+ wcctools fix --rule props/reflect-primitive # also opt-in rules, one rule at a time
539
+ ```
540
+
541
+ `wcctools fix` needs a clean work tree and never commits; it validates every path it would write before writing anything and refuses (exit code 2) a plan that leaves the repository root. It edits source text by syntax-node spans, so formatting and comments stay as they are; it moves files with `git mv` and rewrites the relative imports that pointed at them across the repository, and it checks again at the end. Review the result with `git diff` and commit it yourself.
542
+
506
543
  ### `setupWccTools(config)`
507
544
 
508
545
  Sets up the catalogue's preview document with sections configuration. The shell reads a data-only description of the sections from it; element classes and template factories never leave the preview document.
@@ -540,7 +577,7 @@ The wrapper provides full DOM API access:
540
577
 
541
578
  ### `@design.estate/wcctools/interfaces`
542
579
 
543
- The contracts between the shell, the preview document and the dev server, for tools that drive a preview: the catalogue manifest (`IWccCatalogManifest`), the preview bridge the preview document installs as `window.wccPreview` (`IWccPreviewBridge`: render a demo, switch the theme, read and edit the rendered element's properties) and the dev server's typed requests.
580
+ The contracts between the shell, the preview document and the dev server, for tools that drive a preview: the catalogue manifest (`IWccCatalogManifest`), the preview bridge the preview document installs as `window.wccPreview` (`IWccPreviewBridge`: render a demo, switch the theme, read and edit the rendered element's properties) and the dev server's typed requests, and the component standard's configuration and reports (`IStandardConfig`, `IStandardReport`, `IStandardFixResult`).
544
581
 
545
582
  ```typescript
546
583
  import type { IWccPreviewBridge } from '@design.estate/wcctools/interfaces';
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/wcctools',
6
- version: '6.0.0',
6
+ version: '6.2.0',
7
7
  description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.'
8
8
  }
@@ -0,0 +1,123 @@
1
+ import * as plugins from './plugins.js';
2
+
3
+ /** The longest time a status request waits for a change before it answers the unchanged status. */
4
+ export const bundleStatusWaitLimitMs = 25_000;
5
+
6
+ /** What a status request answers while the board is closed: the server is not serving. */
7
+ export const bundleStatusClosedMessage = 'wcctools: the dev server is not serving the bundle status.';
8
+
9
+ /**
10
+ * The status of the catalog bundles, as tswatch's bundle events report it, for the shell's
11
+ * `getBundleStatus` requests. Every event raises the revision and answers the requests waiting for
12
+ * a change. While closed (the server is not serving), requests are refused with a typed error, so
13
+ * a client backs off as it does for any failed request.
14
+ */
15
+ export class WccBundleStatusBoard {
16
+ private readonly bundles = new Map<string, plugins.interfaces.IWccBundleStatus>();
17
+ private revision = 0;
18
+ private isOpen = false;
19
+ /** Settles one waiting request: answers the current snapshot, or refuses; each removes itself. */
20
+ private readonly waiters = new Set<(refusalArg?: Error) => void>();
21
+
22
+ /** Starts a run of the server: the bundles of an earlier run are forgotten. */
23
+ public open() {
24
+ this.bundles.clear();
25
+ this.isOpen = true;
26
+ this.changed();
27
+ }
28
+
29
+ /** Ends the run: every waiting request is refused now, later ones at once. */
30
+ public close() {
31
+ this.isOpen = false;
32
+ const refusal = this.createClosedError();
33
+ for (const settle of [...this.waiters]) {
34
+ settle(refusal);
35
+ }
36
+ }
37
+
38
+ /** The number of requests waiting for a change. */
39
+ public getWaiterCount(): number {
40
+ return this.waiters.size;
41
+ }
42
+
43
+ public record(eventArg: plugins.tswatch.TBundleEvent) {
44
+ const previous = this.bundles.get(eventArg.name);
45
+ const status: plugins.interfaces.IWccBundleStatus = { name: eventArg.name, state: eventArg.type };
46
+ switch (eventArg.type) {
47
+ case 'started':
48
+ // The latest completed run stays reported while the next one runs
49
+ if (previous?.durationMs !== undefined) {
50
+ status.durationMs = previous.durationMs;
51
+ }
52
+ if (previous?.errorMessage !== undefined) {
53
+ status.errorMessage = previous.errorMessage;
54
+ }
55
+ break;
56
+ case 'finished':
57
+ status.durationMs = eventArg.durationMs;
58
+ break;
59
+ case 'failed':
60
+ status.durationMs = eventArg.durationMs;
61
+ status.errorMessage = eventArg.errorMessage;
62
+ break;
63
+ }
64
+ this.bundles.set(eventArg.name, status);
65
+ this.changed();
66
+ }
67
+
68
+ public getSnapshot(): plugins.interfaces.IWccBundleStatusSnapshot {
69
+ return {
70
+ revision: this.revision,
71
+ bundles: [...this.bundles.values()].map((statusArg) => ({ ...statusArg })),
72
+ };
73
+ }
74
+
75
+ /**
76
+ * The snapshot once it differs from `afterRevisionArg`, or after the wait limit; at once without
77
+ * a revision or for a revision that is no longer current. Refused while closed. When
78
+ * `abortSignalArg` aborts (the client went away), the wait ends at once and releases its timer;
79
+ * it answers the current snapshot, which the transport drops.
80
+ */
81
+ public waitForChange(
82
+ afterRevisionArg: number | undefined,
83
+ abortSignalArg?: AbortSignal,
84
+ ): Promise<plugins.interfaces.IWccBundleStatusSnapshot> {
85
+ if (!this.isOpen) {
86
+ return Promise.reject(this.createClosedError());
87
+ }
88
+ if (afterRevisionArg === undefined || afterRevisionArg !== this.revision || abortSignalArg?.aborted) {
89
+ return Promise.resolve(this.getSnapshot());
90
+ }
91
+ return new Promise((resolve, reject) => {
92
+ const settle = (refusalArg?: Error) => {
93
+ clearTimeout(waitLimit);
94
+ abortSignalArg?.removeEventListener('abort', onAbort);
95
+ this.waiters.delete(settle);
96
+ if (refusalArg) {
97
+ reject(refusalArg);
98
+ } else {
99
+ resolve(this.getSnapshot());
100
+ }
101
+ };
102
+ const onAbort = () => settle();
103
+ const waitLimit = setTimeout(() => settle(), bundleStatusWaitLimitMs);
104
+ abortSignalArg?.addEventListener('abort', onAbort, { once: true });
105
+ this.waiters.add(settle);
106
+ });
107
+ }
108
+
109
+ private changed() {
110
+ this.revision++;
111
+ this.answerWaiters();
112
+ }
113
+
114
+ private answerWaiters() {
115
+ for (const settle of [...this.waiters]) {
116
+ settle();
117
+ }
118
+ }
119
+
120
+ private createClosedError() {
121
+ return new plugins.typedrequest.TypedResponseError(bundleStatusClosedMessage);
122
+ }
123
+ }
@@ -1,4 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
+ import { WccBundleStatusBoard } from './classes.bundlestatus.js';
2
3
 
3
4
  /**
4
5
  * The typed API the shell reaches on `/wcctools/typedrequest`. Later features register their
@@ -6,6 +7,8 @@ import * as plugins from './plugins.js';
6
7
  */
7
8
  export class WccDevApi {
8
9
  public readonly typedrouter = new plugins.typedrequest.TypedRouter();
10
+ /** The catalog bundles' status, fed with tswatch's bundle events while the server runs. */
11
+ public readonly bundleStatus = new WccBundleStatusBoard();
9
12
  private serverInfo: plugins.interfaces.IWccDevServerInfo | null = null;
10
13
 
11
14
  constructor() {
@@ -17,6 +20,12 @@ export class WccDevApi {
17
20
  return { ...this.serverInfo };
18
21
  }),
19
22
  );
23
+ this.typedrouter.addTypedHandler(
24
+ new plugins.typedrequest.TypedHandler<plugins.interfaces.IReq_GetBundleStatus>('getBundleStatus', async (requestArg, typedToolsArg) => {
25
+ // A client that goes away ends its wait, so no waiter or timer outlives the request
26
+ return this.bundleStatus.waitForChange(requestArg.afterRevision, typedToolsArg?.abortSignal);
27
+ }),
28
+ );
20
29
  }
21
30
 
22
31
  public setServerInfo(infoArg: plugins.interfaces.IWccDevServerInfo) {