@oddkin/workbench 0.0.0-stage → 1.0.0-beta.1
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/LICENSE +21 -0
- package/README.md +66 -2
- package/dist/app/card-previews.d.ts +14 -0
- package/dist/app/card-previews.d.ts.map +1 -0
- package/dist/app/card-previews.js +140 -0
- package/dist/app/card-previews.js.map +1 -0
- package/dist/app/copy.d.ts +48 -0
- package/dist/app/copy.d.ts.map +1 -0
- package/dist/app/copy.js +52 -0
- package/dist/app/copy.js.map +1 -0
- package/dist/app/define.d.ts +3 -0
- package/dist/app/define.d.ts.map +1 -0
- package/dist/app/define.js +10 -0
- package/dist/app/define.js.map +1 -0
- package/dist/app/details.d.ts +22 -0
- package/dist/app/details.d.ts.map +1 -0
- package/dist/app/details.js +17 -0
- package/dist/app/details.js.map +1 -0
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +9 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/routes.d.ts +26 -0
- package/dist/app/routes.d.ts.map +1 -0
- package/dist/app/routes.js +96 -0
- package/dist/app/routes.js.map +1 -0
- package/dist/app/search.d.ts +17 -0
- package/dist/app/search.d.ts.map +1 -0
- package/dist/app/search.js +52 -0
- package/dist/app/search.js.map +1 -0
- package/dist/app/shell.d.ts +29 -0
- package/dist/app/shell.d.ts.map +1 -0
- package/dist/app/shell.js +478 -0
- package/dist/app/shell.js.map +1 -0
- package/dist/app/styles.d.ts +2 -0
- package/dist/app/styles.d.ts.map +1 -0
- package/dist/app/styles.js +356 -0
- package/dist/app/styles.js.map +1 -0
- package/dist/app/theme-studio.d.ts +12 -0
- package/dist/app/theme-studio.d.ts.map +1 -0
- package/dist/app/theme-studio.js +14 -0
- package/dist/app/theme-studio.js.map +1 -0
- package/dist/app/views.d.ts +38 -0
- package/dist/app/views.d.ts.map +1 -0
- package/dist/app/views.js +252 -0
- package/dist/app/views.js.map +1 -0
- package/dist/config/index.d.ts +170 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +148 -0
- package/dist/config/index.js.map +1 -0
- package/dist/conformance/button.d.ts +2 -0
- package/dist/conformance/button.d.ts.map +1 -0
- package/dist/conformance/button.js +233 -0
- package/dist/conformance/button.js.map +1 -0
- package/dist/conformance/index.d.ts +107 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +60 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/data/build.d.ts +36 -0
- package/dist/data/build.d.ts.map +1 -0
- package/dist/data/build.js +260 -0
- package/dist/data/build.js.map +1 -0
- package/dist/data/import-map.d.ts +59 -0
- package/dist/data/import-map.d.ts.map +1 -0
- package/dist/data/import-map.js +195 -0
- package/dist/data/import-map.js.map +1 -0
- package/dist/data/index.d.ts +14 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/theme-studio.d.ts +21 -0
- package/dist/data/theme-studio.d.ts.map +1 -0
- package/dist/data/theme-studio.js +112 -0
- package/dist/data/theme-studio.js.map +1 -0
- package/dist/data/types.d.ts +187 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +4 -0
- package/dist/data/types.js.map +1 -0
- package/dist/examples/index.d.ts +101 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/dist/examples/index.js +106 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/frame/index.d.ts +9 -0
- package/dist/frame/index.d.ts.map +1 -0
- package/dist/frame/index.js +482 -0
- package/dist/frame/index.js.map +1 -0
- package/dist/internal/diagnostics.d.ts +17 -0
- package/dist/internal/diagnostics.d.ts.map +1 -0
- package/dist/internal/diagnostics.js +19 -0
- package/dist/internal/diagnostics.js.map +1 -0
- package/dist/node/bin.d.ts +3 -0
- package/dist/node/bin.d.ts.map +1 -0
- package/dist/node/bin.js +12 -0
- package/dist/node/bin.js.map +1 -0
- package/dist/node/cli.d.ts +17 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +198 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.d.ts +28 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +80 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/example-modules.d.ts +8 -0
- package/dist/node/example-modules.d.ts.map +1 -0
- package/dist/node/example-modules.js +28 -0
- package/dist/node/example-modules.js.map +1 -0
- package/dist/node/generated.d.ts +19 -0
- package/dist/node/generated.d.ts.map +1 -0
- package/dist/node/generated.js +109 -0
- package/dist/node/generated.js.map +1 -0
- package/dist/node/html.d.ts +35 -0
- package/dist/node/html.d.ts.map +1 -0
- package/dist/node/html.js +51 -0
- package/dist/node/html.js.map +1 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +15 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/inputs.d.ts +26 -0
- package/dist/node/inputs.d.ts.map +1 -0
- package/dist/node/inputs.js +282 -0
- package/dist/node/inputs.js.map +1 -0
- package/dist/node/packages.d.ts +35 -0
- package/dist/node/packages.d.ts.map +1 -0
- package/dist/node/packages.js +87 -0
- package/dist/node/packages.js.map +1 -0
- package/dist/node/preload.d.ts +10 -0
- package/dist/node/preload.d.ts.map +1 -0
- package/dist/node/preload.js +61 -0
- package/dist/node/preload.js.map +1 -0
- package/dist/node/server.d.ts +42 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +410 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/static.d.ts +43 -0
- package/dist/node/static.d.ts.map +1 -0
- package/dist/node/static.js +157 -0
- package/dist/node/static.js.map +1 -0
- package/dist/node/workbench.d.ts +43 -0
- package/dist/node/workbench.d.ts.map +1 -0
- package/dist/node/workbench.js +204 -0
- package/dist/node/workbench.js.map +1 -0
- package/dist/pages/build.d.ts +22 -0
- package/dist/pages/build.d.ts.map +1 -0
- package/dist/pages/build.js +363 -0
- package/dist/pages/build.js.map +1 -0
- package/dist/pages/defaults.d.ts +16 -0
- package/dist/pages/defaults.d.ts.map +1 -0
- package/dist/pages/defaults.js +88 -0
- package/dist/pages/defaults.js.map +1 -0
- package/dist/pages/index.d.ts +14 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +10 -0
- package/dist/pages/index.js.map +1 -0
- package/dist/pages/navigation.d.ts +48 -0
- package/dist/pages/navigation.d.ts.map +1 -0
- package/dist/pages/navigation.js +83 -0
- package/dist/pages/navigation.js.map +1 -0
- package/dist/pages/types.d.ts +148 -0
- package/dist/pages/types.d.ts.map +1 -0
- package/dist/pages/types.js +3 -0
- package/dist/pages/types.js.map +1 -0
- package/dist/panels/catalog-define.d.ts +3 -0
- package/dist/panels/catalog-define.d.ts.map +1 -0
- package/dist/panels/catalog-define.js +7 -0
- package/dist/panels/catalog-define.js.map +1 -0
- package/dist/panels/catalog-layout-styles.d.ts +2 -0
- package/dist/panels/catalog-layout-styles.d.ts.map +1 -0
- package/dist/panels/catalog-layout-styles.js +54 -0
- package/dist/panels/catalog-layout-styles.js.map +1 -0
- package/dist/panels/catalog-styles.d.ts +2 -0
- package/dist/panels/catalog-styles.d.ts.map +1 -0
- package/dist/panels/catalog-styles.js +106 -0
- package/dist/panels/catalog-styles.js.map +1 -0
- package/dist/panels/catalog.d.ts +37 -0
- package/dist/panels/catalog.d.ts.map +1 -0
- package/dist/panels/catalog.js +74 -0
- package/dist/panels/catalog.js.map +1 -0
- package/dist/panels/component-define.d.ts +3 -0
- package/dist/panels/component-define.d.ts.map +1 -0
- package/dist/panels/component-define.js +6 -0
- package/dist/panels/component-define.js.map +1 -0
- package/dist/panels/component-detail.d.ts +49 -0
- package/dist/panels/component-detail.d.ts.map +1 -0
- package/dist/panels/component-detail.js +1352 -0
- package/dist/panels/component-detail.js.map +1 -0
- package/dist/panels/component.d.ts +17 -0
- package/dist/panels/component.d.ts.map +1 -0
- package/dist/panels/component.js +10 -0
- package/dist/panels/component.js.map +1 -0
- package/dist/panels/example-styles.d.ts +2 -0
- package/dist/panels/example-styles.d.ts.map +1 -0
- package/dist/panels/example-styles.js +343 -0
- package/dist/panels/example-styles.js.map +1 -0
- package/dist/panels/foundation-define.d.ts +3 -0
- package/dist/panels/foundation-define.d.ts.map +1 -0
- package/dist/panels/foundation-define.js +6 -0
- package/dist/panels/foundation-define.js.map +1 -0
- package/dist/panels/foundation-detail.d.ts +23 -0
- package/dist/panels/foundation-detail.d.ts.map +1 -0
- package/dist/panels/foundation-detail.js +216 -0
- package/dist/panels/foundation-detail.js.map +1 -0
- package/dist/panels/foundation.d.ts +15 -0
- package/dist/panels/foundation.d.ts.map +1 -0
- package/dist/panels/foundation.js +9 -0
- package/dist/panels/foundation.js.map +1 -0
- package/dist/panels/model.d.ts +184 -0
- package/dist/panels/model.d.ts.map +1 -0
- package/dist/panels/model.js +488 -0
- package/dist/panels/model.js.map +1 -0
- package/dist/panels/styles.d.ts +3 -0
- package/dist/panels/styles.d.ts.map +1 -0
- package/dist/panels/styles.js +265 -0
- package/dist/panels/styles.js.map +1 -0
- package/dist/panels/theme-model.d.ts +69 -0
- package/dist/panels/theme-model.d.ts.map +1 -0
- package/dist/panels/theme-model.js +166 -0
- package/dist/panels/theme-model.js.map +1 -0
- package/dist/panels/theme-studio.d.ts +32 -0
- package/dist/panels/theme-studio.d.ts.map +1 -0
- package/dist/panels/theme-studio.js +375 -0
- package/dist/panels/theme-studio.js.map +1 -0
- package/dist/preview/frame.d.ts +44 -0
- package/dist/preview/frame.d.ts.map +1 -0
- package/dist/preview/frame.js +260 -0
- package/dist/preview/frame.js.map +1 -0
- package/dist/preview/index.d.ts +26 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +58 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/preview/theme-generation.d.ts +33 -0
- package/dist/preview/theme-generation.d.ts.map +1 -0
- package/dist/preview/theme-generation.js +48 -0
- package/dist/preview/theme-generation.js.map +1 -0
- package/dist/protocol/index.d.ts +222 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +272 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/testing/index.d.ts +47 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +145 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +118 -4
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
/** Runtime entry loaded only by a Workbench preview document. */
|
|
2
|
+
import { createScope, scopeStats } from '@oddkin/core/scope';
|
|
3
|
+
import { frameEnvelope, isCompatibleFrameMessage, isFrameMountPayload, isFrameRequest, isFrameSpecimenPayload, isJsonValue, } from '../protocol/index.js';
|
|
4
|
+
const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
|
|
5
|
+
const errorCode = (error, kind) => error instanceof RegistrationIncompatibleError ? error.code : `frame.${kind}.failed`;
|
|
6
|
+
class RegistrationIncompatibleError extends Error {
|
|
7
|
+
code = 'frame.registration.incompatible';
|
|
8
|
+
}
|
|
9
|
+
function readIdentity(win) {
|
|
10
|
+
const params = new URLSearchParams(win.location.search);
|
|
11
|
+
const frame = params.get('frame');
|
|
12
|
+
const generation = Number(params.get('generation'));
|
|
13
|
+
if (!frame || !Number.isSafeInteger(generation) || generation < 1)
|
|
14
|
+
throw new Error('Preview frame URL must include a frame id and positive generation.');
|
|
15
|
+
return { frame, generation };
|
|
16
|
+
}
|
|
17
|
+
function post(runtime, kind, payload) {
|
|
18
|
+
const port = runtime.port;
|
|
19
|
+
if (!port)
|
|
20
|
+
return;
|
|
21
|
+
port.postMessage({ ...frameEnvelope(runtime.identity, kind), payload });
|
|
22
|
+
}
|
|
23
|
+
function fail(runtime, phase, error) {
|
|
24
|
+
const message = errorMessage(error);
|
|
25
|
+
clearElement(runtime);
|
|
26
|
+
runtime.mount = undefined;
|
|
27
|
+
runtime.wrapper.replaceChildren();
|
|
28
|
+
const alert = runtime.document.createElement('p');
|
|
29
|
+
alert.setAttribute('role', 'alert');
|
|
30
|
+
alert.textContent = `Preview ${phase} failed: ${message}`;
|
|
31
|
+
runtime.wrapper.append(alert);
|
|
32
|
+
post(runtime, 'error', { phase, message });
|
|
33
|
+
}
|
|
34
|
+
function applySettings(runtime, settings) {
|
|
35
|
+
const root = runtime.document.documentElement;
|
|
36
|
+
const container = runtime.wrapper;
|
|
37
|
+
if (settings?.container) {
|
|
38
|
+
container.style.inlineSize = `${settings.container.width}px`;
|
|
39
|
+
container.style.blockSize =
|
|
40
|
+
settings.container.height === undefined ? 'auto' : `${settings.container.height}px`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
container.style.inlineSize = '';
|
|
44
|
+
container.style.blockSize = '';
|
|
45
|
+
}
|
|
46
|
+
if (settings?.direction)
|
|
47
|
+
container.dir = settings.direction;
|
|
48
|
+
else
|
|
49
|
+
container.removeAttribute('dir');
|
|
50
|
+
const attributes = ['oddMode', 'oddDensity', 'oddProduct', 'oddProfile'];
|
|
51
|
+
const values = [settings?.mode, settings?.density, settings?.product, settings?.profile];
|
|
52
|
+
attributes.forEach((key, index) => {
|
|
53
|
+
const value = values[index];
|
|
54
|
+
if (value === undefined)
|
|
55
|
+
delete container.dataset[key];
|
|
56
|
+
else
|
|
57
|
+
container.dataset[key] = value;
|
|
58
|
+
});
|
|
59
|
+
if (settings?.mode)
|
|
60
|
+
root.dataset['oddMode'] = settings.mode;
|
|
61
|
+
else
|
|
62
|
+
delete root.dataset['oddMode'];
|
|
63
|
+
}
|
|
64
|
+
function clearElement(runtime) {
|
|
65
|
+
runtime.mountScope?.dispose();
|
|
66
|
+
runtime.mountScope = undefined;
|
|
67
|
+
runtime.element?.remove();
|
|
68
|
+
runtime.element = undefined;
|
|
69
|
+
}
|
|
70
|
+
function loadRegistration(runtime, registration) {
|
|
71
|
+
if (runtime.registrations.has(registration))
|
|
72
|
+
return Promise.resolve();
|
|
73
|
+
const scope = runtime.scope;
|
|
74
|
+
if (!scope || scope.disposed)
|
|
75
|
+
return Promise.reject(new Error('The preview frame was disposed.'));
|
|
76
|
+
// The runtime lives in the frame's realm, so its import loads into the frame's registry; a
|
|
77
|
+
// strict Content-Security-Policy (no inline script, Trusted Types) allows it.
|
|
78
|
+
return import(/* @vite-ignore */ registration).then(() => {
|
|
79
|
+
if (scope.disposed)
|
|
80
|
+
throw new Error('The preview frame was disposed.');
|
|
81
|
+
}, (error) => {
|
|
82
|
+
throw new Error(String(error));
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/** Load a component's registration once per frame and create it with its initial state. */
|
|
86
|
+
async function createPreviewElement(runtime, config) {
|
|
87
|
+
const existing = runtime.registrations.get(config.tag);
|
|
88
|
+
if (existing && existing !== config.registration)
|
|
89
|
+
throw new RegistrationIncompatibleError(`The <${config.tag}> registration changed; replace this frame before mounting it again.`);
|
|
90
|
+
await loadRegistration(runtime, config.registration);
|
|
91
|
+
const constructor = runtime.window.customElements.get(config.tag);
|
|
92
|
+
if (!constructor)
|
|
93
|
+
throw new Error(`Registration did not define <${config.tag}>.`);
|
|
94
|
+
runtime.registrations.set(config.tag, config.registration);
|
|
95
|
+
const element = runtime.document.createElement(config.tag);
|
|
96
|
+
for (const [name, value] of Object.entries(config.properties ?? {}))
|
|
97
|
+
Reflect.set(element, name, value);
|
|
98
|
+
for (const [name, value] of Object.entries(config.attributes ?? {})) {
|
|
99
|
+
if (value === null)
|
|
100
|
+
element.removeAttribute(name);
|
|
101
|
+
else
|
|
102
|
+
element.setAttribute(name, value);
|
|
103
|
+
}
|
|
104
|
+
// Through the CSSOM: a strict style-src allows it, unlike a style attribute.
|
|
105
|
+
for (const [name, value] of Object.entries(config.styles ?? {}))
|
|
106
|
+
element.style.setProperty(name, value);
|
|
107
|
+
for (const [name, text] of Object.entries(config.slots ?? {})) {
|
|
108
|
+
const slot = runtime.document.createElement('span');
|
|
109
|
+
if (name)
|
|
110
|
+
slot.slot = name;
|
|
111
|
+
slot.textContent = text;
|
|
112
|
+
element.append(slot);
|
|
113
|
+
}
|
|
114
|
+
return element;
|
|
115
|
+
}
|
|
116
|
+
async function mount(runtime, config) {
|
|
117
|
+
clearElement(runtime);
|
|
118
|
+
runtime.wrapper.replaceChildren();
|
|
119
|
+
applySettings(runtime, config.settings);
|
|
120
|
+
const element = await createPreviewElement(runtime, config);
|
|
121
|
+
runtime.element = element;
|
|
122
|
+
runtime.wrapper.append(element);
|
|
123
|
+
runtime.mount = config;
|
|
124
|
+
runtime.mountScope = runtime.scope?.child({ name: `preview-example:${config.example}` });
|
|
125
|
+
if (!config.fixture)
|
|
126
|
+
return;
|
|
127
|
+
try {
|
|
128
|
+
await runFixture(runtime, config.fixture, config.example, element);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
// The element stays: only the example's setup is missing (a module the host does not serve,
|
|
132
|
+
// or a fixture the page's policy stops).
|
|
133
|
+
post(runtime, 'error', { phase: 'fixture', message: errorMessage(error) });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Run the example's fixture once its element is connected, as `mountExample` does in tests. */
|
|
137
|
+
async function runFixture(runtime, url, example, element) {
|
|
138
|
+
const module = (await import(/* @vite-ignore */ url));
|
|
139
|
+
const fixture = module.default?.examples?.[example.slice(example.indexOf('/') + 1)]?.fixture;
|
|
140
|
+
const scope = runtime.mountScope;
|
|
141
|
+
if (typeof fixture !== 'function' || !scope)
|
|
142
|
+
return;
|
|
143
|
+
await fixture({
|
|
144
|
+
scope,
|
|
145
|
+
element,
|
|
146
|
+
mount(content) {
|
|
147
|
+
const host = runtime.document.createElement('div');
|
|
148
|
+
runtime.wrapper.append(host);
|
|
149
|
+
if (content instanceof runtime.window.Node)
|
|
150
|
+
host.append(content);
|
|
151
|
+
else if (module.oddkinFrameRender) {
|
|
152
|
+
const part = module.oddkinFrameRender(content, host);
|
|
153
|
+
scope.add(() => part.dispose(), 'fixture template');
|
|
154
|
+
}
|
|
155
|
+
else
|
|
156
|
+
host.textContent = String(content);
|
|
157
|
+
return host.firstElementChild ?? host;
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
await element.updateComplete;
|
|
161
|
+
}
|
|
162
|
+
/** Every role's element in one frame, each captioned with its role. */
|
|
163
|
+
async function specimen(runtime, config) {
|
|
164
|
+
clearElement(runtime);
|
|
165
|
+
runtime.mount = undefined;
|
|
166
|
+
runtime.wrapper.replaceChildren();
|
|
167
|
+
applySettings(runtime, config.settings);
|
|
168
|
+
const list = runtime.document.createElement('div');
|
|
169
|
+
list.dataset['oddkinSpecimen'] = '';
|
|
170
|
+
for (const item of config.items) {
|
|
171
|
+
const figure = runtime.document.createElement('figure');
|
|
172
|
+
figure.dataset['role'] = item.role;
|
|
173
|
+
const caption = runtime.document.createElement('figcaption');
|
|
174
|
+
caption.textContent = item.label;
|
|
175
|
+
figure.append(caption, await createPreviewElement(runtime, item));
|
|
176
|
+
list.append(figure);
|
|
177
|
+
}
|
|
178
|
+
runtime.wrapper.append(list);
|
|
179
|
+
}
|
|
180
|
+
function replaceTheme(runtime, cssText) {
|
|
181
|
+
if (runtime.theme) {
|
|
182
|
+
runtime.theme.replaceSync(cssText);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
const Sheet = runtime.window.CSSStyleSheet;
|
|
186
|
+
if (!Sheet || !('adoptedStyleSheets' in runtime.document))
|
|
187
|
+
throw new Error('Constructable stylesheets are unavailable in the preview frame.');
|
|
188
|
+
const sheet = new Sheet();
|
|
189
|
+
sheet.replaceSync(cssText);
|
|
190
|
+
runtime.document.adoptedStyleSheets = [...runtime.document.adoptedStyleSheets, sheet];
|
|
191
|
+
runtime.theme = sheet;
|
|
192
|
+
}
|
|
193
|
+
const DETAIL_LIMIT = 2000;
|
|
194
|
+
/**
|
|
195
|
+
* A plain-JSON summary of an event detail: cycles, DOM nodes, functions, `Map`/`Set`, errors,
|
|
196
|
+
* and class instances are described rather than transferred, and the result is size-capped.
|
|
197
|
+
*/
|
|
198
|
+
export function summarizeDetail(value) {
|
|
199
|
+
const seen = new WeakSet();
|
|
200
|
+
const walk = (current, depth) => {
|
|
201
|
+
if (current === null || typeof current === 'boolean' || typeof current === 'string')
|
|
202
|
+
return current;
|
|
203
|
+
if (typeof current === 'number')
|
|
204
|
+
return Number.isFinite(current) ? current : String(current);
|
|
205
|
+
if (current === undefined)
|
|
206
|
+
return '[undefined]';
|
|
207
|
+
if (typeof current === 'bigint')
|
|
208
|
+
return `${current}n`;
|
|
209
|
+
if (typeof current === 'symbol')
|
|
210
|
+
return String(current);
|
|
211
|
+
if (typeof current === 'function')
|
|
212
|
+
return `[Function ${current.name || 'anonymous'}]`;
|
|
213
|
+
const object = current;
|
|
214
|
+
if (seen.has(object))
|
|
215
|
+
return '[Circular]';
|
|
216
|
+
if (depth > 4)
|
|
217
|
+
return '[…]';
|
|
218
|
+
if (typeof object.nodeType === 'number' && 'nodeName' in object) {
|
|
219
|
+
const node = object;
|
|
220
|
+
return node.nodeType === 1
|
|
221
|
+
? `<${node.localName}${node.id ? `#${node.id}` : ''}>`
|
|
222
|
+
: `[${node.nodeName}]`;
|
|
223
|
+
}
|
|
224
|
+
if (object instanceof Error)
|
|
225
|
+
return `[${object.name}: ${object.message}]`;
|
|
226
|
+
seen.add(object);
|
|
227
|
+
try {
|
|
228
|
+
if (object instanceof Map)
|
|
229
|
+
return {
|
|
230
|
+
'[Map]': object.size,
|
|
231
|
+
entries: [...object]
|
|
232
|
+
.slice(0, 20)
|
|
233
|
+
.map(([k, v]) => [walk(k, depth + 1), walk(v, depth + 1)]),
|
|
234
|
+
};
|
|
235
|
+
if (object instanceof Set)
|
|
236
|
+
return {
|
|
237
|
+
'[Set]': object.size,
|
|
238
|
+
values: [...object].slice(0, 20).map((v) => walk(v, depth + 1)),
|
|
239
|
+
};
|
|
240
|
+
if (Array.isArray(object)) {
|
|
241
|
+
const items = object.slice(0, 20).map((v) => walk(v, depth + 1));
|
|
242
|
+
if (object.length > 20)
|
|
243
|
+
items.push(`[${object.length - 20} more]`);
|
|
244
|
+
return items;
|
|
245
|
+
}
|
|
246
|
+
const prototype = Object.getPrototypeOf(object);
|
|
247
|
+
if (prototype !== Object.prototype && prototype !== null)
|
|
248
|
+
return `[${prototype.constructor?.name || 'Object'}]`;
|
|
249
|
+
const out = {};
|
|
250
|
+
const keys = Object.keys(object);
|
|
251
|
+
for (const key of keys.slice(0, 20))
|
|
252
|
+
out[key] = walk(object[key], depth + 1);
|
|
253
|
+
if (keys.length > 20)
|
|
254
|
+
out['[more]'] = keys.length - 20;
|
|
255
|
+
return out;
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
seen.delete(object);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
const summary = walk(value, 0);
|
|
262
|
+
const text = JSON.stringify(summary);
|
|
263
|
+
return text.length > DETAIL_LIMIT ? `[Truncated: ${text.slice(0, DETAIL_LIMIT)}…]` : summary;
|
|
264
|
+
}
|
|
265
|
+
function listenToElement(runtime, scope) {
|
|
266
|
+
const element = runtime.element;
|
|
267
|
+
if (!element)
|
|
268
|
+
return;
|
|
269
|
+
const tag = runtime.mount?.tag ?? element.localName;
|
|
270
|
+
for (const name of runtime.mount?.events ?? [])
|
|
271
|
+
scope.listen(runtime.wrapper, name, (event) => {
|
|
272
|
+
const payload = {
|
|
273
|
+
id: `event:${tag}#${name}`,
|
|
274
|
+
name,
|
|
275
|
+
time: runtime.window.performance.now(),
|
|
276
|
+
bubbles: event.bubbles,
|
|
277
|
+
composed: event.composed,
|
|
278
|
+
cancelable: event.cancelable,
|
|
279
|
+
target: event.target?.localName ?? element.localName,
|
|
280
|
+
};
|
|
281
|
+
const detail = event.detail;
|
|
282
|
+
if (detail !== undefined && detail !== null)
|
|
283
|
+
payload['detail'] = summarizeDetail(detail);
|
|
284
|
+
post(runtime, 'event', payload);
|
|
285
|
+
}, true);
|
|
286
|
+
// On the element itself, after the component's own handlers have updated the property.
|
|
287
|
+
for (const pair of runtime.mount?.sync ?? [])
|
|
288
|
+
scope.listen(element, pair.event, () => {
|
|
289
|
+
const value = Reflect.get(element, pair.property);
|
|
290
|
+
post(runtime, 'state', {
|
|
291
|
+
property: pair.property,
|
|
292
|
+
value: isJsonValue(value) ? value : summarizeDetail(value),
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
async function handle(runtime, scope, request) {
|
|
297
|
+
try {
|
|
298
|
+
switch (request.kind) {
|
|
299
|
+
case 'mount':
|
|
300
|
+
if (!isFrameMountPayload(request.payload))
|
|
301
|
+
throw new TypeError('mount requires a valid example payload.');
|
|
302
|
+
await mount(runtime, request.payload);
|
|
303
|
+
if (runtime.mountScope)
|
|
304
|
+
listenToElement(runtime, runtime.mountScope);
|
|
305
|
+
post(runtime, 'state', { scopeStats: scopeStats() });
|
|
306
|
+
return { mounted: true };
|
|
307
|
+
case 'specimen':
|
|
308
|
+
if (!isFrameSpecimenPayload(request.payload))
|
|
309
|
+
throw new TypeError('specimen requires valid role items.');
|
|
310
|
+
await specimen(runtime, request.payload);
|
|
311
|
+
return { mounted: request.payload.items.length };
|
|
312
|
+
case 'set': {
|
|
313
|
+
if (!runtime.element)
|
|
314
|
+
throw new Error('There is no mounted component to update.');
|
|
315
|
+
if (request.payload.cssProperty !== undefined) {
|
|
316
|
+
const value = request.payload.cssValue;
|
|
317
|
+
if (value === null || value === undefined)
|
|
318
|
+
runtime.element.style.removeProperty(request.payload.cssProperty);
|
|
319
|
+
else
|
|
320
|
+
runtime.element.style.setProperty(request.payload.cssProperty, value);
|
|
321
|
+
}
|
|
322
|
+
else if (request.payload.property !== undefined) {
|
|
323
|
+
if (request.payload.unset === true)
|
|
324
|
+
Reflect.deleteProperty(runtime.element, request.payload.property);
|
|
325
|
+
else if (Object.hasOwn(request.payload, 'value'))
|
|
326
|
+
Reflect.set(runtime.element, request.payload.property, request.payload.value);
|
|
327
|
+
else
|
|
328
|
+
throw new TypeError('A property update needs a value or unset: true.');
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
const value = request.payload.attributeValue;
|
|
332
|
+
if (request.payload.attribute === undefined)
|
|
333
|
+
throw new TypeError('A set request needs a property or attribute name.');
|
|
334
|
+
if (value === null)
|
|
335
|
+
runtime.element.removeAttribute(request.payload.attribute);
|
|
336
|
+
else if (typeof value === 'string')
|
|
337
|
+
runtime.element.setAttribute(request.payload.attribute, value);
|
|
338
|
+
else
|
|
339
|
+
throw new TypeError('An attribute update needs a string or null value.');
|
|
340
|
+
}
|
|
341
|
+
return { updated: true };
|
|
342
|
+
}
|
|
343
|
+
case 'slot': {
|
|
344
|
+
if (!runtime.element)
|
|
345
|
+
throw new Error('There is no mounted component to update.');
|
|
346
|
+
for (const child of [...runtime.element.children])
|
|
347
|
+
if ((child.getAttribute('slot') ?? '') === request.payload.name)
|
|
348
|
+
child.remove();
|
|
349
|
+
const slot = runtime.document.createElement('span');
|
|
350
|
+
if (request.payload.name)
|
|
351
|
+
slot.slot = request.payload.name;
|
|
352
|
+
slot.textContent = request.payload.text;
|
|
353
|
+
runtime.element.append(slot);
|
|
354
|
+
return { updated: true };
|
|
355
|
+
}
|
|
356
|
+
case 'reset':
|
|
357
|
+
if (!runtime.mount)
|
|
358
|
+
throw new Error('There is no mounted example to reset.');
|
|
359
|
+
await mount(runtime, runtime.mount);
|
|
360
|
+
if (runtime.mountScope)
|
|
361
|
+
listenToElement(runtime, runtime.mountScope);
|
|
362
|
+
post(runtime, 'state', { scopeStats: scopeStats() });
|
|
363
|
+
return { reset: true };
|
|
364
|
+
case 'theme': {
|
|
365
|
+
replaceTheme(runtime, request.payload.cssText);
|
|
366
|
+
return { updated: true };
|
|
367
|
+
}
|
|
368
|
+
case 'settings': {
|
|
369
|
+
applySettings(runtime, request.payload);
|
|
370
|
+
return { updated: true };
|
|
371
|
+
}
|
|
372
|
+
case 'inspect':
|
|
373
|
+
throw new Error('inspectPreview types are available; frame inspection is not implemented yet.');
|
|
374
|
+
case 'dispose':
|
|
375
|
+
return { disposed: true };
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
fail(runtime, request.kind, error);
|
|
380
|
+
throw error;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
/** Install the runtime on a frame's own Window. Exported for controlled browser tests. */
|
|
384
|
+
export function installFrameRuntime(win = window) {
|
|
385
|
+
const doc = win.document;
|
|
386
|
+
const identity = readIdentity(win);
|
|
387
|
+
const wrapper = doc.querySelector('[data-oddkin-preview]');
|
|
388
|
+
if (!wrapper)
|
|
389
|
+
throw new Error('Preview frame document is missing its preview container.');
|
|
390
|
+
const runtime = {
|
|
391
|
+
identity,
|
|
392
|
+
window: win,
|
|
393
|
+
document: doc,
|
|
394
|
+
scope: undefined,
|
|
395
|
+
mountScope: undefined,
|
|
396
|
+
port: undefined,
|
|
397
|
+
lastRequest: 0,
|
|
398
|
+
mount: undefined,
|
|
399
|
+
element: undefined,
|
|
400
|
+
theme: undefined,
|
|
401
|
+
wrapper,
|
|
402
|
+
registrations: new Map(),
|
|
403
|
+
rejectedRequests: 0,
|
|
404
|
+
staleRequests: 0,
|
|
405
|
+
};
|
|
406
|
+
const hello = frameEnvelope(identity, 'hello');
|
|
407
|
+
win.parent.postMessage(hello, win.location.origin);
|
|
408
|
+
win.addEventListener('message', (event) => {
|
|
409
|
+
if (event.source !== win.parent ||
|
|
410
|
+
event.origin !== win.location.origin ||
|
|
411
|
+
event.ports.length !== 1)
|
|
412
|
+
return;
|
|
413
|
+
const message = event.data;
|
|
414
|
+
if (!isCompatibleFrameMessage(message) ||
|
|
415
|
+
message.kind !== 'connect' ||
|
|
416
|
+
message.frame !== identity.frame ||
|
|
417
|
+
message.generation !== identity.generation ||
|
|
418
|
+
runtime.scope)
|
|
419
|
+
return;
|
|
420
|
+
const port = event.ports[0];
|
|
421
|
+
if (!port)
|
|
422
|
+
return;
|
|
423
|
+
runtime.port = port;
|
|
424
|
+
const scope = createScope({ name: `preview-frame:${identity.frame}:${identity.generation}` });
|
|
425
|
+
runtime.scope = scope;
|
|
426
|
+
scope.add(() => port.close(), 'message port');
|
|
427
|
+
// Requests run one at a time, in their order: a change that arrives while a mount is still
|
|
428
|
+
// loading its module graph applies to the element that mount creates.
|
|
429
|
+
let queue = Promise.resolve();
|
|
430
|
+
const run = (request) => handle(runtime, scope, request).then((payload) => {
|
|
431
|
+
if (scope.disposed)
|
|
432
|
+
return;
|
|
433
|
+
const reply = {
|
|
434
|
+
...frameEnvelope(identity, 'reply'),
|
|
435
|
+
replyTo: request.id,
|
|
436
|
+
...(payload && isJsonValue(payload) ? { payload } : {}),
|
|
437
|
+
};
|
|
438
|
+
port.postMessage(reply);
|
|
439
|
+
if (request.kind === 'dispose')
|
|
440
|
+
scope.dispose();
|
|
441
|
+
}, (error) => {
|
|
442
|
+
if (scope.disposed)
|
|
443
|
+
return;
|
|
444
|
+
port.postMessage({
|
|
445
|
+
...frameEnvelope(identity, 'reply'),
|
|
446
|
+
replyTo: request.id,
|
|
447
|
+
error: { code: errorCode(error, request.kind), message: errorMessage(error) },
|
|
448
|
+
});
|
|
449
|
+
});
|
|
450
|
+
scope.listen(port, 'message', (portEvent) => {
|
|
451
|
+
const request = portEvent.data;
|
|
452
|
+
if (!isFrameRequest(request)) {
|
|
453
|
+
runtime.rejectedRequests++;
|
|
454
|
+
post(runtime, 'state', { rejectedRequests: runtime.rejectedRequests });
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
if (request.frame !== identity.frame ||
|
|
458
|
+
request.generation !== identity.generation ||
|
|
459
|
+
request.id <= runtime.lastRequest) {
|
|
460
|
+
runtime.staleRequests++;
|
|
461
|
+
post(runtime, 'state', { staleRequests: runtime.staleRequests });
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
runtime.lastRequest = request.id;
|
|
465
|
+
queue = queue.then(() => run(request)).catch(() => undefined);
|
|
466
|
+
});
|
|
467
|
+
port.start();
|
|
468
|
+
scope.listen(win, 'error', (event) => fail(runtime, 'runtime', event.error ?? event.message));
|
|
469
|
+
scope.listen(win, 'unhandledrejection', (event) => fail(runtime, 'runtime', event.reason));
|
|
470
|
+
const observer = new win.ResizeObserver((entries) => {
|
|
471
|
+
const size = entries[0]?.contentRect;
|
|
472
|
+
if (size)
|
|
473
|
+
post(runtime, 'size', { width: size.width, height: size.height });
|
|
474
|
+
});
|
|
475
|
+
observer.observe(wrapper);
|
|
476
|
+
scope.add(() => observer.disconnect(), 'resize observer');
|
|
477
|
+
post(runtime, 'state', { connected: true, scopeStats: scopeStats() });
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
if (typeof window !== 'undefined' && window.parent !== window)
|
|
481
|
+
installFrameRuntime(window);
|
|
482
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/frame/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Diagnostics shared by the DOM-free Workbench entries. */
|
|
2
|
+
export interface WorkbenchDiagnostic {
|
|
3
|
+
/** Stable code, e.g. `config.key.unknown`. */
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly severity: 'error' | 'warning' | 'info';
|
|
6
|
+
readonly message: string;
|
|
7
|
+
/** JSON pointer or id the diagnostic is about. */
|
|
8
|
+
readonly path?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class DiagnosticList {
|
|
11
|
+
readonly items: WorkbenchDiagnostic[];
|
|
12
|
+
error(code: string, message: string, path?: string): void;
|
|
13
|
+
warn(code: string, message: string, path?: string): void;
|
|
14
|
+
get hasErrors(): boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const isObject: (value: unknown) => value is Record<string, unknown>;
|
|
17
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,EAAE,CAAM;IAC3C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAExD;IACD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAOvD;IACD,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAED,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class DiagnosticList {
|
|
2
|
+
items = [];
|
|
3
|
+
error(code, message, path) {
|
|
4
|
+
this.items.push({ code, severity: 'error', message, ...(path === undefined ? {} : { path }) });
|
|
5
|
+
}
|
|
6
|
+
warn(code, message, path) {
|
|
7
|
+
this.items.push({
|
|
8
|
+
code,
|
|
9
|
+
severity: 'warning',
|
|
10
|
+
message,
|
|
11
|
+
...(path === undefined ? {} : { path }),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
get hasErrors() {
|
|
15
|
+
return this.items.some((d) => d.severity === 'error');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const isObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
19
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/internal/diagnostics.ts"],"names":[],"mappings":"AAUA,MAAM,OAAO,cAAc;IAChB,KAAK,GAA0B,EAAE,CAAC;IAC3C,KAAK,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;QAChD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,CAAC,IAAY,EAAE,OAAe,EAAE,IAAa;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,IAAI;YACJ,QAAQ,EAAE,SAAS;YACnB,OAAO;YACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC3E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/node/bin.ts"],"names":[],"mappings":""}
|
package/dist/node/bin.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { run } from './cli.js';
|
|
3
|
+
const controller = new AbortController();
|
|
4
|
+
for (const signal of ['SIGINT', 'SIGTERM'])
|
|
5
|
+
process.once(signal, () => controller.abort());
|
|
6
|
+
process.exitCode = await run(process.argv.slice(2), {
|
|
7
|
+
out: (text) => console.log(text),
|
|
8
|
+
err: (text) => console.error(text),
|
|
9
|
+
signal: controller.signal,
|
|
10
|
+
inherit: true,
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/node/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AACzC,KAAK,MAAM,MAAM,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAU;IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;AACpG,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IAClD,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;IAClC,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,OAAO,EAAE,IAAI;CACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DevServer } from './server.js';
|
|
2
|
+
export interface CliIO {
|
|
3
|
+
readonly out: (text: string) => void;
|
|
4
|
+
readonly err: (text: string) => void;
|
|
5
|
+
/** Ends a long-running command (`workbench dev`); the bin aborts it on SIGINT and SIGTERM. */
|
|
6
|
+
readonly signal?: AbortSignal;
|
|
7
|
+
/** Let delegated commands write to this process's terminal directly (the bin sets it). */
|
|
8
|
+
readonly inherit?: boolean;
|
|
9
|
+
/** Receives the dev server once it listens. */
|
|
10
|
+
readonly onServer?: (server: DevServer) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const USAGE = "Usage:\n oddkin analyze <tsconfig.json> [options] Analyze a component library with @oddkin/analyzer\n (the options of oddkin-analyze; \"oddkin analyze --help\")\n oddkin workbench dev [--config <file or directory>] [--port <number>] [--host <name>] [--no-watch]\n Serve the Workbench with live updates (port 4175)\n oddkin workbench build [--config <file or directory>] [--out <directory>] [--base <path>] [--routing history|hash]\n Write the Workbench as a static app (default .oddkin/workbench-build)\n oddkin --help | --version";
|
|
13
|
+
/** The analyzer's command, resolved from this package like any dependency. */
|
|
14
|
+
export declare function analyzerBin(): string;
|
|
15
|
+
/** Run `oddkin` with `args`; resolves with the exit code. */
|
|
16
|
+
export declare function run(args: readonly string[], io: CliIO): Promise<number>;
|
|
17
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/node/cli.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAI3F,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,0FAA0F;IAC1F,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;CACjD;AAED,eAAO,MAAM,KAAK,iqBAOU,CAAC;AAM7B,8EAA8E;AAC9E,wBAAgB,WAAW,IAAI,MAAM,CAKpC;AAmJD,6DAA6D;AAC7D,wBAAsB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB7E"}
|