@design.estate/wcctools 6.1.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.
- package/changelog.md +20 -0
- package/dist_shell/bundle.js +405 -368
- package/dist_shell/bundle.js.map +1 -1
- package/dist_shell/bundle.js.third-party-notices.json +52 -0
- package/dist_shell/bundle.js.third-party-notices.txt +107 -1
- package/dist_shell/index.html +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.bundlestatus.d.ts +36 -0
- package/dist_ts/classes.bundlestatus.js +110 -0
- package/dist_ts/classes.devapi.d.ts +3 -0
- package/dist_ts/classes.devapi.js +8 -1
- package/dist_ts/classes.devserver.d.ts +45 -10
- package/dist_ts/classes.devserver.js +123 -49
- package/dist_ts/cli.js +5 -2
- package/dist_ts/index.d.ts +0 -2
- package/dist_ts/index.js +1 -3
- package/dist_ts_interfaces/requests.d.ts +35 -0
- package/dist_ts_shell/bundlestatus.d.ts +15 -0
- package/dist_ts_shell/bundlestatus.js +64 -0
- package/dist_ts_shell/elements/wcc-contextmenu.d.ts +3 -0
- package/dist_ts_shell/elements/wcc-contextmenu.js +18 -3
- package/dist_ts_shell/elements/wcc-preview-frame.d.ts +6 -0
- package/dist_ts_shell/elements/wcc-preview-frame.js +50 -2
- package/dist_ts_shell/elements/wcc-shell.d.ts +15 -0
- package/dist_ts_shell/elements/wcc-shell.js +45 -3
- package/dist_ts_shell/plugins.d.ts +2 -1
- package/dist_ts_shell/plugins.js +3 -2
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +5 -2
- package/readme.md +6 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.bundlestatus.ts +123 -0
- package/ts/classes.devapi.ts +9 -0
- package/ts/classes.devserver.ts +127 -47
- package/ts/cli.ts +4 -1
- package/ts/index.ts +0 -2
- package/ts_interfaces/bridge.ts +95 -0
- package/ts_interfaces/catalog.ts +37 -0
- package/ts_interfaces/index.ts +4 -0
- package/ts_interfaces/plugins.ts +3 -0
- package/ts_interfaces/requests.ts +65 -0
- package/ts_interfaces/standard.ts +103 -0
- package/ts_shared/index.ts +1 -0
- package/ts_shared/plugins.ts +3 -0
- package/ts_shared/previewroute.ts +58 -0
- package/ts_shell/bundlestatus.ts +68 -0
- package/ts_shell/elements/wcc-contextmenu.ts +306 -0
- package/ts_shell/elements/wcc-preview-frame.ts +167 -0
- package/ts_shell/elements/wcc-properties.ts +998 -0
- package/ts_shell/elements/wcc-record-button.ts +108 -0
- package/ts_shell/elements/wcc-recording-panel.ts +1005 -0
- package/ts_shell/elements/wcc-shell.ts +485 -0
- package/ts_shell/elements/wcc-sidebar.ts +1419 -0
- package/ts_shell/index.html +21 -0
- package/ts_shell/index.ts +4 -0
- package/ts_shell/plugins.ts +12 -0
- package/ts_shell/previewconnection.ts +103 -0
- package/ts_shell/services/recorder.service.ts +451 -0
- package/ts_shell/types/dom-mediacapture-stub/index.d.ts +12 -0
- package/ts_shell/types/dom-mediacapture-stub/package.json +6 -0
- package/ts_shell/types/dom-webcodecs-stub/index.d.ts +2 -0
- package/ts_shell/types/dom-webcodecs-stub/package.json +6 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
|
@@ -75,6 +75,9 @@ let WccPreviewFrame = (() => {
|
|
|
75
75
|
let _isResizing_decorators;
|
|
76
76
|
let _isResizing_initializers = [];
|
|
77
77
|
let _isResizing_extraInitializers = [];
|
|
78
|
+
let _bundleFailures_decorators;
|
|
79
|
+
let _bundleFailures_initializers = [];
|
|
80
|
+
let _bundleFailures_extraInitializers = [];
|
|
78
81
|
var WccPreviewFrame = class extends _classSuper {
|
|
79
82
|
static { _classThis = this; }
|
|
80
83
|
static {
|
|
@@ -85,12 +88,14 @@ let WccPreviewFrame = (() => {
|
|
|
85
88
|
_isNative_decorators = [property({ type: Boolean })];
|
|
86
89
|
_sidebarWidth_decorators = [property({ type: Number })];
|
|
87
90
|
_isResizing_decorators = [property({ type: Boolean })];
|
|
91
|
+
_bundleFailures_decorators = [property({ attribute: false })];
|
|
88
92
|
__esDecorate(this, null, _viewport_decorators, { kind: "accessor", name: "viewport", static: false, private: false, access: { has: obj => "viewport" in obj, get: obj => obj.viewport, set: (obj, value) => { obj.viewport = value; } }, metadata: _metadata }, _viewport_initializers, _viewport_extraInitializers);
|
|
89
93
|
__esDecorate(this, null, _previewSrc_decorators, { kind: "accessor", name: "previewSrc", static: false, private: false, access: { has: obj => "previewSrc" in obj, get: obj => obj.previewSrc, set: (obj, value) => { obj.previewSrc = value; } }, metadata: _metadata }, _previewSrc_initializers, _previewSrc_extraInitializers);
|
|
90
94
|
__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);
|
|
91
95
|
__esDecorate(this, null, _isNative_decorators, { kind: "accessor", name: "isNative", static: false, private: false, access: { has: obj => "isNative" in obj, get: obj => obj.isNative, set: (obj, value) => { obj.isNative = value; } }, metadata: _metadata }, _isNative_initializers, _isNative_extraInitializers);
|
|
92
96
|
__esDecorate(this, null, _sidebarWidth_decorators, { kind: "accessor", name: "sidebarWidth", static: false, private: false, access: { has: obj => "sidebarWidth" in obj, get: obj => obj.sidebarWidth, set: (obj, value) => { obj.sidebarWidth = value; } }, metadata: _metadata }, _sidebarWidth_initializers, _sidebarWidth_extraInitializers);
|
|
93
97
|
__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);
|
|
98
|
+
__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);
|
|
94
99
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
95
100
|
WccPreviewFrame = _classThis = _classDescriptor.value;
|
|
96
101
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -114,6 +119,13 @@ let WccPreviewFrame = (() => {
|
|
|
114
119
|
#isResizing_accessor_storage = (__runInitializers(this, _sidebarWidth_extraInitializers), __runInitializers(this, _isResizing_initializers, false));
|
|
115
120
|
get isResizing() { return this.#isResizing_accessor_storage; }
|
|
116
121
|
set isResizing(value) { this.#isResizing_accessor_storage = value; }
|
|
122
|
+
#bundleFailures_accessor_storage = (__runInitializers(this, _isResizing_extraInitializers), __runInitializers(this, _bundleFailures_initializers, []));
|
|
123
|
+
/**
|
|
124
|
+
* Catalog bundles whose latest run failed: shown over the preview, which shows an outdated
|
|
125
|
+
* bundle or none, until a run finishes and the preview reloads.
|
|
126
|
+
*/
|
|
127
|
+
get bundleFailures() { return this.#bundleFailures_accessor_storage; }
|
|
128
|
+
set bundleFailures(value) { this.#bundleFailures_accessor_storage = value; }
|
|
117
129
|
static styles = [
|
|
118
130
|
css `
|
|
119
131
|
:host {
|
|
@@ -135,6 +147,34 @@ let WccPreviewFrame = (() => {
|
|
|
135
147
|
border: 0;
|
|
136
148
|
background: transparent;
|
|
137
149
|
}
|
|
150
|
+
|
|
151
|
+
.bundle-failure {
|
|
152
|
+
position: absolute;
|
|
153
|
+
inset: 0;
|
|
154
|
+
box-sizing: border-box;
|
|
155
|
+
overflow: auto;
|
|
156
|
+
padding: 24px;
|
|
157
|
+
background: rgba(20, 0, 0, 0.92);
|
|
158
|
+
color: #ffd7d7;
|
|
159
|
+
font-family: 'Geist Sans', 'Inter', sans-serif;
|
|
160
|
+
font-size: 14px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.bundle-failure h2 {
|
|
164
|
+
margin: 0 0 8px;
|
|
165
|
+
font-size: 16px;
|
|
166
|
+
font-weight: 600;
|
|
167
|
+
color: #ff8a8a;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.bundle-failure pre {
|
|
171
|
+
margin: 0 0 24px;
|
|
172
|
+
white-space: pre-wrap;
|
|
173
|
+
overflow-wrap: anywhere;
|
|
174
|
+
font-family: 'Geist Mono', 'Intel One Mono', monospace;
|
|
175
|
+
font-size: 13px;
|
|
176
|
+
line-height: 1.5;
|
|
177
|
+
}
|
|
138
178
|
`,
|
|
139
179
|
];
|
|
140
180
|
get iframe() {
|
|
@@ -181,11 +221,19 @@ let WccPreviewFrame = (() => {
|
|
|
181
221
|
${this.previewSrc ? html `
|
|
182
222
|
<iframe class="preview" title="Preview" src=${this.previewSrc}></iframe>
|
|
183
223
|
` : null}
|
|
224
|
+
${this.bundleFailures.length > 0 ? html `
|
|
225
|
+
<div class="bundle-failure" role="alert">
|
|
226
|
+
${this.bundleFailures.map((bundleArg) => html `
|
|
227
|
+
<h2>bundle failed: ${bundleArg.name}</h2>
|
|
228
|
+
<pre>${bundleArg.errorMessage}</pre>
|
|
229
|
+
`)}
|
|
230
|
+
</div>
|
|
231
|
+
` : null}
|
|
184
232
|
`;
|
|
185
233
|
}
|
|
186
234
|
constructor() {
|
|
187
235
|
super(...arguments);
|
|
188
|
-
__runInitializers(this,
|
|
236
|
+
__runInitializers(this, _bundleFailures_extraInitializers);
|
|
189
237
|
}
|
|
190
238
|
static {
|
|
191
239
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
@@ -194,4 +242,4 @@ let WccPreviewFrame = (() => {
|
|
|
194
242
|
return WccPreviewFrame = _classThis;
|
|
195
243
|
})();
|
|
196
244
|
export { WccPreviewFrame };
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2NjLXByZXZpZXctZnJhbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90c19zaGVsbC9lbGVtZW50cy93Y2MtcHJldmlldy1mcmFtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRS9ILE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBVXpDLHlGQUF5RjtBQUN6RixNQUFNLGdCQUFnQixHQUFHLENBQUMsV0FBeUIsRUFBVSxFQUFFO0lBQzdELFFBQVEsV0FBVyxFQUFFLENBQUM7UUFDcEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQ3hELEtBQUssU0FBUztZQUNaLE9BQU8sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksQ0FBQztRQUN6RCxLQUFLLE9BQU87WUFDVixPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDdkQ7WUFDRSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0lBRVUsZUFBZTs0QkFEM0IsYUFBYSxDQUFDLG1CQUFtQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBQW5CLFNBQVEsV0FBVzs7OztvQ0FDN0MsUUFBUSxFQUFFO3NDQUlWLFFBQVEsRUFBRTs4Q0FHVixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7b0NBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FB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
|
|
@@ -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
|
-
#
|
|
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,
|
|
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, };
|
package/dist_ts_shell/plugins.js
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
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,7 +19,7 @@
|
|
|
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": "^
|
|
22
|
+
"@git.zone/tswatch": "^7.0.0",
|
|
23
23
|
"@push.rocks/smartconfig": "^6.3.0",
|
|
24
24
|
"@push.rocks/smartconsole": "^2.1.0",
|
|
25
25
|
"@push.rocks/smartexit": "^2.2.0",
|
|
@@ -38,6 +38,9 @@
|
|
|
38
38
|
},
|
|
39
39
|
"files": [
|
|
40
40
|
"ts/**/*",
|
|
41
|
+
"ts_interfaces/**/*",
|
|
42
|
+
"ts_shared/**/*",
|
|
43
|
+
"ts_shell/**/*",
|
|
41
44
|
"ts_web/**/*",
|
|
42
45
|
"dist/**/*",
|
|
43
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,15 @@ 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
|
+
|
|
506
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.
|
|
507
511
|
|
|
508
512
|
### `wcctools check` and `wcctools fix`
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/wcctools',
|
|
6
|
-
version: '6.
|
|
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
|
+
}
|
package/ts/classes.devapi.ts
CHANGED
|
@@ -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) {
|