@hozu/cli 0.7.0 → 0.8.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 (136) hide show
  1. package/dist/cdp.d.ts.map +1 -1
  2. package/dist/cdp.js +1 -0
  3. package/dist/cdp.js.map +1 -1
  4. package/dist/commands/add-widget.d.ts.map +1 -1
  5. package/dist/commands/add-widget.js +4 -5
  6. package/dist/commands/add-widget.js.map +1 -1
  7. package/dist/commands/add.d.ts.map +1 -1
  8. package/dist/commands/add.js +4 -10
  9. package/dist/commands/add.js.map +1 -1
  10. package/dist/commands/app.d.ts +27 -0
  11. package/dist/commands/app.d.ts.map +1 -0
  12. package/dist/commands/app.js +148 -0
  13. package/dist/commands/app.js.map +1 -0
  14. package/dist/commands/browse-page.d.ts +2 -0
  15. package/dist/commands/browse-page.d.ts.map +1 -0
  16. package/dist/commands/browse-page.js +228 -0
  17. package/dist/commands/browse-page.js.map +1 -0
  18. package/dist/commands/browse-tab.d.ts +80 -0
  19. package/dist/commands/browse-tab.d.ts.map +1 -0
  20. package/dist/commands/browse-tab.js +431 -0
  21. package/dist/commands/browse-tab.js.map +1 -0
  22. package/dist/commands/browse-world.d.ts +36 -0
  23. package/dist/commands/browse-world.d.ts.map +1 -0
  24. package/dist/commands/browse-world.js +108 -0
  25. package/dist/commands/browse-world.js.map +1 -0
  26. package/dist/commands/browse.d.ts +24 -3
  27. package/dist/commands/browse.d.ts.map +1 -1
  28. package/dist/commands/browse.js +341 -407
  29. package/dist/commands/browse.js.map +1 -1
  30. package/dist/commands/check.d.ts +1 -2
  31. package/dist/commands/check.d.ts.map +1 -1
  32. package/dist/commands/check.js +24 -27
  33. package/dist/commands/check.js.map +1 -1
  34. package/dist/commands/map.d.ts +12 -0
  35. package/dist/commands/map.d.ts.map +1 -1
  36. package/dist/commands/map.js +83 -3
  37. package/dist/commands/map.js.map +1 -1
  38. package/dist/commands/migrate-agent.d.ts +12 -0
  39. package/dist/commands/migrate-agent.d.ts.map +1 -0
  40. package/dist/commands/migrate-agent.js +6 -0
  41. package/dist/commands/migrate-agent.js.map +1 -0
  42. package/dist/commands/migrate-app.d.ts +15 -0
  43. package/dist/commands/migrate-app.d.ts.map +1 -0
  44. package/dist/commands/migrate-app.js +334 -0
  45. package/dist/commands/migrate-app.js.map +1 -0
  46. package/dist/commands/migrate-ast.d.ts +63 -0
  47. package/dist/commands/migrate-ast.d.ts.map +1 -0
  48. package/dist/commands/migrate-ast.js +257 -0
  49. package/dist/commands/migrate-ast.js.map +1 -0
  50. package/dist/commands/migrate-forms.d.ts +4 -0
  51. package/dist/commands/migrate-forms.d.ts.map +1 -0
  52. package/dist/commands/migrate-forms.js +120 -0
  53. package/dist/commands/migrate-forms.js.map +1 -0
  54. package/dist/commands/migrate-freshness.d.ts +4 -0
  55. package/dist/commands/migrate-freshness.d.ts.map +1 -0
  56. package/dist/commands/migrate-freshness.js +47 -0
  57. package/dist/commands/migrate-freshness.js.map +1 -0
  58. package/dist/commands/migrate-head.d.ts +8 -0
  59. package/dist/commands/migrate-head.d.ts.map +1 -0
  60. package/dist/commands/migrate-head.js +132 -0
  61. package/dist/commands/migrate-head.js.map +1 -0
  62. package/dist/commands/migrate-links.d.ts +5 -0
  63. package/dist/commands/migrate-links.d.ts.map +1 -0
  64. package/dist/commands/migrate-links.js +55 -0
  65. package/dist/commands/migrate-links.js.map +1 -0
  66. package/dist/commands/migrate-lists.d.ts +9 -0
  67. package/dist/commands/migrate-lists.d.ts.map +1 -0
  68. package/dist/commands/migrate-lists.js +225 -0
  69. package/dist/commands/migrate-lists.js.map +1 -0
  70. package/dist/commands/migrate-normalize.d.ts +27 -0
  71. package/dist/commands/migrate-normalize.d.ts.map +1 -0
  72. package/dist/commands/migrate-normalize.js +252 -0
  73. package/dist/commands/migrate-normalize.js.map +1 -0
  74. package/dist/commands/migrate-ops.d.ts +4 -0
  75. package/dist/commands/migrate-ops.d.ts.map +1 -0
  76. package/dist/commands/migrate-ops.js +192 -0
  77. package/dist/commands/migrate-ops.js.map +1 -0
  78. package/dist/commands/migrate-parts.d.ts +7 -0
  79. package/dist/commands/migrate-parts.d.ts.map +1 -0
  80. package/dist/commands/migrate-parts.js +166 -0
  81. package/dist/commands/migrate-parts.js.map +1 -0
  82. package/dist/commands/migrate-stale.d.ts +24 -0
  83. package/dist/commands/migrate-stale.d.ts.map +1 -0
  84. package/dist/commands/migrate-stale.js +114 -0
  85. package/dist/commands/migrate-stale.js.map +1 -0
  86. package/dist/commands/migrate.d.ts +21 -0
  87. package/dist/commands/migrate.d.ts.map +1 -0
  88. package/dist/commands/migrate.js +358 -0
  89. package/dist/commands/migrate.js.map +1 -0
  90. package/dist/commands/plan.d.ts.map +1 -1
  91. package/dist/commands/plan.js +2 -6
  92. package/dist/commands/plan.js.map +1 -1
  93. package/dist/commands/request.d.ts +13 -16
  94. package/dist/commands/request.d.ts.map +1 -1
  95. package/dist/commands/request.js +140 -161
  96. package/dist/commands/request.js.map +1 -1
  97. package/dist/commands/scaffold.d.ts.map +1 -1
  98. package/dist/commands/scaffold.js +10 -8
  99. package/dist/commands/scaffold.js.map +1 -1
  100. package/dist/commands/seed-lock.d.ts +2 -0
  101. package/dist/commands/seed-lock.d.ts.map +1 -0
  102. package/dist/commands/seed-lock.js +6 -0
  103. package/dist/commands/seed-lock.js.map +1 -0
  104. package/dist/commands/serve.d.ts +6 -0
  105. package/dist/commands/serve.d.ts.map +1 -0
  106. package/dist/commands/serve.js +31 -0
  107. package/dist/commands/serve.js.map +1 -0
  108. package/dist/commands/skill.d.ts.map +1 -1
  109. package/dist/commands/skill.js +1 -2
  110. package/dist/commands/skill.js.map +1 -1
  111. package/dist/commands/validate.d.ts +13 -0
  112. package/dist/commands/validate.d.ts.map +1 -1
  113. package/dist/commands/validate.js +51 -5
  114. package/dist/commands/validate.js.map +1 -1
  115. package/dist/contract.d.ts +124 -7
  116. package/dist/contract.d.ts.map +1 -1
  117. package/dist/main.d.ts +8 -0
  118. package/dist/main.d.ts.map +1 -1
  119. package/dist/main.js +99 -31
  120. package/dist/main.js.map +1 -1
  121. package/dist/output.d.ts.map +1 -1
  122. package/dist/output.js +28 -2
  123. package/dist/output.js.map +1 -1
  124. package/dist/render.d.ts.map +1 -1
  125. package/dist/render.js +5 -1
  126. package/dist/render.js.map +1 -1
  127. package/package.json +7 -7
  128. package/schema/browse.schema.json +180 -0
  129. package/schema/check.schema.json +28 -8
  130. package/schema/inspect.schema.json +114 -3
  131. package/schema/map.schema.json +62 -0
  132. package/schema/migrate.schema.json +649 -0
  133. package/schema/plan.schema.json +8 -22
  134. package/schema/request.schema.json +133 -8
  135. package/schema/skill.schema.json +22 -1
  136. package/schema/validate.schema.json +28 -8
@@ -0,0 +1,431 @@
1
+ import { dirname, extname, join } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { Worker } from 'node:worker_threads';
4
+ import { HozuCliError } from '../errors.js';
5
+ import { BuildFailed } from './app.js';
6
+ import { PAGE } from './browse-page.js';
7
+ export const ORIGIN = 'http://localhost';
8
+ const QUIET_MS = 200;
9
+ const SETTLE_MS = 500;
10
+ const CAP_MS = 8000;
11
+ const RETRY_MS = 20;
12
+ const COUNTED = new Set(['Document', 'Fetch', 'XHR']);
13
+ const STILL = `!document.getAnimations().some((a) => a.playState === 'running' && a.effect?.getComputedTiming().iterations !== Infinity)`;
14
+ const READY = `(() => {
15
+ const key = Symbol.for('hozu.browse.mutated')
16
+ if (!window[key]) {
17
+ window[key] = { at: performance.now() }
18
+ new MutationObserver(() => { window[key].at = performance.now() })
19
+ .observe(document, { subtree: true, childList: true, characterData: true, attributes: true })
20
+ return false
21
+ }
22
+ return performance.now() - window[key].at >= ${QUIET_MS} &&
23
+ (!document.getElementById('hozu-payload') || document.documentElement.hasAttribute('data-hozu-ready')) &&
24
+ ${STILL}
25
+ })()`;
26
+ export const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
27
+ /** One app world (module graph, data, session store) per mode, in its own worker. */
28
+ export class World {
29
+ cookies;
30
+ worker;
31
+ next = 0;
32
+ heads = new Map();
33
+ chunks = new Map();
34
+ constructor(config, cwd, sessions) {
35
+ const self = fileURLToPath(import.meta.url);
36
+ this.worker = new Worker(join(dirname(self), `browse-world${extname(self)}`), {
37
+ workerData: { config, cwd, sessions },
38
+ });
39
+ this.cookies = new Promise((resolve, reject) => {
40
+ this.worker.on('message', (m) => {
41
+ if ('ready' in m)
42
+ return resolve(m.cookies);
43
+ if ('failed' in m) {
44
+ const { code, message, suggestions, diagnostics } = m.failed;
45
+ return reject(diagnostics
46
+ ? new BuildFailed(diagnostics)
47
+ : new HozuCliError(code, message, suggestions));
48
+ }
49
+ if ('chunk' in m)
50
+ return this.chunks.get(m.id)?.(m.chunk);
51
+ if ('end' in m) {
52
+ this.chunks.get(m.id)?.(null);
53
+ this.chunks.delete(m.id);
54
+ return;
55
+ }
56
+ const pending = this.heads.get(m.id);
57
+ this.heads.delete(m.id);
58
+ if ('error' in m) {
59
+ this.chunks.get(m.id)?.(null);
60
+ pending?.reject(new Error(m.error));
61
+ }
62
+ else
63
+ pending?.resolve(m);
64
+ });
65
+ this.worker.once('error', (e) => reject(new HozuCliError('config', `hozu browse: ${e.message}`)));
66
+ });
67
+ }
68
+ fetch(request, onChunk) {
69
+ const id = ++this.next;
70
+ this.chunks.set(id, onChunk);
71
+ return new Promise((resolve, reject) => {
72
+ this.heads.set(id, { resolve, reject });
73
+ this.worker.postMessage({ id, ...request });
74
+ });
75
+ }
76
+ cancel(id) {
77
+ this.chunks.delete(id);
78
+ this.worker.postMessage({ cancel: id });
79
+ }
80
+ close() {
81
+ return this.worker.terminate();
82
+ }
83
+ }
84
+ class Live {
85
+ frames = [];
86
+ waiting = null;
87
+ buffer = '';
88
+ id;
89
+ fulfill;
90
+ constructor(id, fulfill) {
91
+ this.id = id;
92
+ this.fulfill = fulfill;
93
+ }
94
+ chunk(text) {
95
+ this.buffer += text.replace(/\r\n?/g, '\n');
96
+ const parts = this.buffer.split('\n\n');
97
+ this.buffer = parts.pop() ?? '';
98
+ for (const frame of parts)
99
+ if (frame.split('\n').some((l) => l && !l.startsWith(':')))
100
+ this.frames.push(frame);
101
+ this.flush();
102
+ }
103
+ wait(requestId, session) {
104
+ this.waiting = { requestId, session };
105
+ this.flush();
106
+ }
107
+ flush() {
108
+ if (!this.waiting || !this.frames.length)
109
+ return;
110
+ const { requestId, session } = this.waiting;
111
+ this.waiting = null;
112
+ this.fulfill(requestId, session, `retry: ${RETRY_MS}\n\n${this.frames.join('\n\n')}\n\n`);
113
+ this.frames = [];
114
+ }
115
+ }
116
+ const bodyOf = (request) => {
117
+ if (request.postDataEntries?.length)
118
+ return new Uint8Array(Buffer.concat(request.postDataEntries.map((e) => Buffer.from(e.bytes ?? '', 'base64'))));
119
+ return request.postData === undefined ? null : new Uint8Array(Buffer.from(request.postData));
120
+ };
121
+ const pathOf = (url) => (url.startsWith(ORIGIN) ? url.slice(ORIGIN.length) || '/' : url);
122
+ /** One browser context and page for one actor in one mode. */
123
+ export class Tab {
124
+ sessionId = '';
125
+ targetId = '';
126
+ status = 0;
127
+ loaded = false;
128
+ requested = false;
129
+ snapshot = { url: '', title: '', text: '', widget: [] };
130
+ sessions = new Set();
131
+ prerender = new Set();
132
+ tracked = new Map();
133
+ urls = new Map();
134
+ live = new Map();
135
+ invalidPosts = new Set();
136
+ lastActivity = Date.now();
137
+ activity = 0;
138
+ marked = 0;
139
+ location = '';
140
+ prerendering = '';
141
+ cdp;
142
+ world;
143
+ mode;
144
+ actor;
145
+ errors;
146
+ constructor(cdp, world, mode, actor, errors) {
147
+ this.cdp = cdp;
148
+ this.world = world;
149
+ this.mode = mode;
150
+ this.actor = actor;
151
+ this.errors = errors;
152
+ }
153
+ send(method, params = {}, session = this.sessionId) {
154
+ return this.cdp.send(method, params, session);
155
+ }
156
+ async start(cookie, reducedMotion) {
157
+ const { browserContextId } = await this.cdp.send('Target.createBrowserContext', {});
158
+ const { targetId } = await this.cdp.send('Target.createTarget', { url: 'about:blank', browserContextId });
159
+ this.targetId = targetId;
160
+ const { sessionId } = await this.cdp.send('Target.attachToTarget', { targetId, flatten: true });
161
+ this.sessionId = sessionId;
162
+ this.sessions.add(sessionId);
163
+ await this.enable(sessionId);
164
+ await this.send('Page.enable');
165
+ await this.send('Target.setAutoAttach', { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });
166
+ if (cookie) {
167
+ const eq = cookie.indexOf('=');
168
+ await this.send('Network.setCookie', {
169
+ name: cookie.slice(0, eq),
170
+ value: cookie.slice(eq + 1),
171
+ url: ORIGIN,
172
+ httpOnly: true,
173
+ });
174
+ }
175
+ await this.send('Emulation.setDeviceMetricsOverride', {
176
+ width: 1280,
177
+ height: 800,
178
+ deviceScaleFactor: 1,
179
+ mobile: false,
180
+ });
181
+ if (reducedMotion)
182
+ await this.send('Emulation.setEmulatedMedia', {
183
+ features: [{ name: 'prefers-reduced-motion', value: 'reduce' }],
184
+ });
185
+ if (this.mode === 'off')
186
+ await this.send('Emulation.setScriptExecutionDisabled', { value: true });
187
+ }
188
+ async enable(session) {
189
+ await this.send('Fetch.enable', { patterns: [{ urlPattern: `${ORIGIN}/*` }] }, session);
190
+ await this.send('Network.enable', {}, session);
191
+ await this.send('Runtime.enable', {}, session);
192
+ await this.send('Log.enable', {}, session);
193
+ if (session !== this.sessionId)
194
+ await this.send('Page.enable', {}, session).catch(() => { });
195
+ }
196
+ error(e, session) {
197
+ const prerender = this.prerender.has(session);
198
+ const url = e.url ?? (prerender ? this.prerendering : this.location);
199
+ this.errors.push({
200
+ ...e,
201
+ ...(url ? { url } : {}),
202
+ ...(prerender ? { type: `prerender ${e.type ?? ''}`.trim() } : {}),
203
+ ...(this.actor === null ? {} : { actor: this.actor }),
204
+ mode: this.mode,
205
+ });
206
+ }
207
+ handle(method, params, session) {
208
+ if (method === 'Target.attachedToTarget') {
209
+ const child = params.sessionId;
210
+ this.sessions.add(child);
211
+ if (params.targetInfo?.subtype === 'prerender' || params.targetInfo?.type === 'page')
212
+ this.prerender.add(child);
213
+ void this.enable(child)
214
+ .catch(() => { })
215
+ .then(() => this.send('Runtime.runIfWaitingForDebugger', {}, child).catch(() => { }));
216
+ return true;
217
+ }
218
+ if (method === 'Fetch.requestPaused') {
219
+ void this.paused(params, session);
220
+ return true;
221
+ }
222
+ const main = session === this.sessionId;
223
+ if (method.startsWith('Network.')) {
224
+ const id = params.requestId;
225
+ if (method === 'Network.requestWillBeSent') {
226
+ const type = params.type ?? 'Other';
227
+ this.urls.set(id, { url: params.request.url, type });
228
+ if (type === 'EventSource')
229
+ return true;
230
+ this.tracked.set(id, type);
231
+ this.activity++;
232
+ if (main && COUNTED.has(type))
233
+ this.requested = true;
234
+ }
235
+ if (!this.tracked.has(id))
236
+ return true;
237
+ this.lastActivity = Date.now();
238
+ if (method === 'Network.loadingFinished')
239
+ this.tracked.delete(id);
240
+ if (method === 'Network.loadingFailed') {
241
+ this.tracked.delete(id);
242
+ const r = this.urls.get(id);
243
+ const script = this.mode === 'off' && (params.type ?? r?.type) === 'Script';
244
+ const blocked = params.blockedReason === 'inspector' || params.blockedReason === 'csp';
245
+ if (!params.canceled && !blocked && !script)
246
+ this.error({
247
+ kind: 'request',
248
+ text: params.errorText || params.blockedReason || 'failed',
249
+ at: r ? pathOf(r.url) : null,
250
+ type: params.type ?? r?.type,
251
+ }, session);
252
+ }
253
+ if (method === 'Network.responseReceived') {
254
+ const url = pathOf(params.response.url);
255
+ const type = params.type ?? 'Other';
256
+ if (main && type === 'Document' && params.frameId === this.targetId)
257
+ this.status = params.response.status;
258
+ const status = params.response.status;
259
+ const favicon = type === 'Other' && url === '/favicon.ico';
260
+ if (status >= 400 && !this.invalidPosts.has(id) && !favicon)
261
+ this.error({
262
+ kind: 'request',
263
+ text: `${status} ${url}`,
264
+ at: url,
265
+ type,
266
+ ...(type === 'Document' ? { url } : {}),
267
+ }, session);
268
+ }
269
+ return true;
270
+ }
271
+ if (method === 'Runtime.exceptionThrown') {
272
+ const d = params.exceptionDetails;
273
+ const frame = d.stackTrace?.callFrames?.[0];
274
+ this.error({
275
+ kind: 'exception',
276
+ text: d.exception?.description?.split('\n')[0] ?? d.text,
277
+ at: frame ? `${pathOf(frame.url)}:${frame.lineNumber + 1}` : (d.url ?? null),
278
+ type: d.exception?.className ?? 'exception',
279
+ }, session);
280
+ return true;
281
+ }
282
+ if (method === 'Runtime.consoleAPICalled' && params.type === 'error') {
283
+ const frame = params.stackTrace?.callFrames?.[0];
284
+ this.error({
285
+ kind: 'console',
286
+ text: params.args
287
+ .map((a) => a.value !== undefined ? String(a.value) : String(a.description ?? a.type).split('\n')[0])
288
+ .join(' '),
289
+ at: frame ? `${pathOf(frame.url)}:${frame.lineNumber + 1}` : null,
290
+ type: 'console.error',
291
+ }, session);
292
+ return true;
293
+ }
294
+ if (method === 'Log.entryAdded') {
295
+ const e = params.entry;
296
+ if (e.level === 'error' && !['network', 'javascript', 'console-api'].includes(e.source))
297
+ this.error({
298
+ kind: 'console',
299
+ text: e.text,
300
+ at: e.url ? `${pathOf(e.url)}${e.lineNumber === undefined ? '' : `:${e.lineNumber + 1}`}` : null,
301
+ type: e.source,
302
+ }, session);
303
+ return true;
304
+ }
305
+ if (main && method === 'Page.frameRequestedNavigation' && params.frameId === this.targetId) {
306
+ this.loaded = false;
307
+ this.activity++;
308
+ }
309
+ if (main && method === 'Page.frameStartedLoading' && params.frameId === this.targetId) {
310
+ this.loaded = false;
311
+ this.activity++;
312
+ for (const live of this.live.values())
313
+ this.world.cancel(live.id);
314
+ this.live.clear();
315
+ }
316
+ if (method === 'Page.frameNavigated' && !params.frame.parentId) {
317
+ const url = new URL(params.frame.url);
318
+ url.searchParams.delete('__hozu');
319
+ if (main)
320
+ this.location = pathOf(url.href);
321
+ else
322
+ this.prerendering = pathOf(url.href);
323
+ }
324
+ if (main && method === 'Page.loadEventFired')
325
+ this.loaded = true;
326
+ return true;
327
+ }
328
+ fulfill(requestId, session, status, headers, body) {
329
+ return this.send('Fetch.fulfillRequest', {
330
+ requestId,
331
+ responseCode: status,
332
+ responseHeaders: headers,
333
+ body: Buffer.from(body).toString('base64'),
334
+ }, session).catch(() => { });
335
+ }
336
+ async paused(params, session) {
337
+ const r = params.request;
338
+ const existing = r.method === 'GET' ? this.live.get(r.url) : undefined;
339
+ if (existing)
340
+ return existing.wait(params.requestId, session);
341
+ let live = null;
342
+ try {
343
+ const head = await this.world.fetch({ url: r.url, method: r.method, headers: r.headers, body: bodyOf(r) }, (chunk) => {
344
+ if (chunk !== null)
345
+ live?.chunk(chunk);
346
+ });
347
+ const headers = head.headers
348
+ .filter(([k]) => k !== 'content-length')
349
+ .map(([name, value]) => ({ name, value }));
350
+ if (!head.stream) {
351
+ if (head.status === 400 && r.method === 'POST' && params.resourceType === 'Document')
352
+ this.invalidPosts.add(params.networkId ?? params.requestId);
353
+ return this.fulfill(params.requestId, session, head.status, headers, head.body ?? new Uint8Array());
354
+ }
355
+ live = new Live(head.id, (id, s, body) => void this.fulfill(id, s, 200, headers, body));
356
+ this.live.set(r.url, live);
357
+ live.wait(params.requestId, session);
358
+ }
359
+ catch (error) {
360
+ this.error({ kind: 'request', text: `the app threw: ${String(error)}`, at: pathOf(r.url) }, session);
361
+ await this.send('Fetch.failRequest', { requestId: params.requestId, errorReason: 'Failed' }, session).catch(() => { });
362
+ }
363
+ }
364
+ evaluate(expression) {
365
+ return this.send('Runtime.evaluate', { expression, returnByValue: true, awaitPromise: true }).then((r) => {
366
+ if (r.exceptionDetails)
367
+ throw new Error(r.exceptionDetails.exception?.description ?? r.exceptionDetails.text);
368
+ return r.result.value;
369
+ });
370
+ }
371
+ page(call) {
372
+ return this.evaluate(`${PAGE}.${call}`);
373
+ }
374
+ mark() {
375
+ this.marked = this.activity;
376
+ }
377
+ async settle() {
378
+ const start = Date.now();
379
+ while (this.activity === this.marked && Date.now() - start < SETTLE_MS)
380
+ await sleep(25);
381
+ while (Date.now() - start < CAP_MS) {
382
+ if (this.tracked.size === 0 && Date.now() - this.lastActivity >= QUIET_MS && this.loaded) {
383
+ const ready = await this.evaluate(this.mode === 'off' ? STILL : READY).catch(() => false);
384
+ if (ready)
385
+ return;
386
+ }
387
+ await sleep(50);
388
+ }
389
+ }
390
+ async open(path) {
391
+ this.loaded = false;
392
+ this.lastActivity = Date.now();
393
+ this.mark();
394
+ await this.send('Page.navigate', { url: ORIGIN + path });
395
+ await this.settle();
396
+ }
397
+ async look() {
398
+ this.snapshot = await this.page('snapshot()').catch(() => this.snapshot);
399
+ return this.snapshot;
400
+ }
401
+ async mouse(x, y) {
402
+ for (const type of ['mouseMoved', 'mousePressed', 'mouseReleased'])
403
+ await this.send('Input.dispatchMouseEvent', { type, x, y, button: 'left', clickCount: 1 });
404
+ }
405
+ async key(name) {
406
+ const key = KEYS[name] ?? {
407
+ code: `Key${name.toUpperCase()}`,
408
+ keyCode: name.toUpperCase().charCodeAt(0),
409
+ text: name,
410
+ };
411
+ const base = { key: name === 'Space' ? ' ' : name, code: key.code, windowsVirtualKeyCode: key.keyCode };
412
+ await this.send('Input.dispatchKeyEvent', {
413
+ type: 'keyDown',
414
+ ...base,
415
+ ...(key.text ? { text: key.text } : {}),
416
+ });
417
+ await this.send('Input.dispatchKeyEvent', { type: 'keyUp', ...base });
418
+ }
419
+ }
420
+ const KEYS = {
421
+ Enter: { code: 'Enter', keyCode: 13, text: '\r' },
422
+ Escape: { code: 'Escape', keyCode: 27 },
423
+ Tab: { code: 'Tab', keyCode: 9 },
424
+ Backspace: { code: 'Backspace', keyCode: 8 },
425
+ Space: { code: 'Space', keyCode: 32, text: ' ' },
426
+ ArrowUp: { code: 'ArrowUp', keyCode: 38 },
427
+ ArrowDown: { code: 'ArrowDown', keyCode: 40 },
428
+ ArrowLeft: { code: 'ArrowLeft', keyCode: 37 },
429
+ ArrowRight: { code: 'ArrowRight', keyCode: 39 },
430
+ };
431
+ //# sourceMappingURL=browse-tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browse-tab.js","sourceRoot":"","sources":["../../src/commands/browse-tab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ export type WorldRequest = {
2
+ id: number;
3
+ url: string;
4
+ method: string;
5
+ headers: Record<string, string>;
6
+ body: Uint8Array | null;
7
+ } | {
8
+ cancel: number;
9
+ };
10
+ export type WorldReply = {
11
+ ready: true;
12
+ cookies: (string | null)[];
13
+ } | {
14
+ failed: {
15
+ code: string;
16
+ message: string;
17
+ suggestions: string[];
18
+ diagnostics?: unknown[];
19
+ };
20
+ } | {
21
+ id: number;
22
+ status: number;
23
+ headers: [string, string][];
24
+ stream: boolean;
25
+ body?: Uint8Array;
26
+ } | {
27
+ id: number;
28
+ chunk: string;
29
+ } | {
30
+ id: number;
31
+ end: true;
32
+ } | {
33
+ id: number;
34
+ error: string;
35
+ };
36
+ //# sourceMappingURL=browse-world.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browse-world.d.ts","sourceRoot":"","sources":["../../src/commands/browse-world.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,YAAY,GACpB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GACrG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtB,MAAM,MAAM,UAAU,GAClB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;CAAE,GAC3C;IAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAA;CAAE,GAC7F;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC/F;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,GACzB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA"}
@@ -0,0 +1,108 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { dirname, extname, join } from 'node:path';
4
+ import { parentPort, workerData } from 'node:worker_threads';
5
+ import { HozuCliError } from '../errors.js';
6
+ import { load } from '../load.js';
7
+ import { BuildFailed } from './app.js';
8
+ import { appParts } from './request.js';
9
+ const MIME = {
10
+ '.png': 'image/png',
11
+ '.jpg': 'image/jpeg',
12
+ '.jpeg': 'image/jpeg',
13
+ '.svg': 'image/svg+xml',
14
+ '.ico': 'image/x-icon',
15
+ '.webp': 'image/webp',
16
+ '.json': 'application/json',
17
+ '.txt': 'text/plain',
18
+ '.css': 'text/css',
19
+ '.js': 'text/javascript',
20
+ '.woff2': 'font/woff2',
21
+ };
22
+ const { config, cwd, sessions } = workerData;
23
+ const port = parentPort;
24
+ const post = (reply) => port.postMessage(reply);
25
+ try {
26
+ const loaded = await load(config, cwd);
27
+ const parts = await appParts(loaded, 'browse', sessions);
28
+ const root = dirname(loaded.path);
29
+ const build = parts.build;
30
+ const server = await parts.importFrom('@hozu/runtime-server', ['npm install @hozu/runtime-server']);
31
+ const css = await parts.importFrom('@hozu/css', ['npm install @hozu/css']);
32
+ const styles = await css.compileStyles(build, { base: root });
33
+ const widgets = parts.module.options.widgets ? await parts.module.options.widgets(build) : null;
34
+ const handler = server.createHandler(parts.module.app, {
35
+ styles,
36
+ widgets,
37
+ env: process.env,
38
+ readFile: (file) => readFile(file),
39
+ ...(parts.session ? { session: parts.session } : {}),
40
+ });
41
+ const publicDir = join(root, 'public');
42
+ const respond = async (request) => {
43
+ const response = await handler.fetch(request);
44
+ const file = join(publicDir, decodeURIComponent(new URL(request.url).pathname));
45
+ if (response.status !== 404 || !file.startsWith(publicDir) || !existsSync(file))
46
+ return response;
47
+ return new Response(await readFile(file).catch(() => null), {
48
+ headers: { 'content-type': MIME[extname(file)] ?? 'application/octet-stream' },
49
+ });
50
+ };
51
+ const streams = new Map();
52
+ port.on('message', async (message) => {
53
+ if ('cancel' in message) {
54
+ await streams
55
+ .get(message.cancel)
56
+ ?.cancel()
57
+ .catch(() => { });
58
+ streams.delete(message.cancel);
59
+ return;
60
+ }
61
+ const { id, url, method, headers, body } = message;
62
+ try {
63
+ const response = await respond(new Request(url, {
64
+ method,
65
+ headers,
66
+ ...(body && method !== 'GET' && method !== 'HEAD' ? { body } : {}),
67
+ }));
68
+ const head = [...response.headers].filter(([k]) => k !== 'set-cookie');
69
+ for (const c of response.headers.getSetCookie())
70
+ head.push(['set-cookie', c]);
71
+ if (!(response.headers.get('content-type') ?? '').startsWith('text/event-stream') || !response.body) {
72
+ const bytes = new Uint8Array(await response.arrayBuffer());
73
+ post({ id, status: response.status, headers: head, stream: false, body: bytes });
74
+ return;
75
+ }
76
+ post({ id, status: response.status, headers: head, stream: true });
77
+ const reader = response.body.getReader();
78
+ streams.set(id, reader);
79
+ const decoder = new TextDecoder();
80
+ for (;;) {
81
+ const { done, value } = await reader.read();
82
+ if (done)
83
+ break;
84
+ post({ id, chunk: decoder.decode(value, { stream: true }) });
85
+ }
86
+ streams.delete(id);
87
+ post({ id, end: true });
88
+ }
89
+ catch (error) {
90
+ post({ id, error: String(error) });
91
+ }
92
+ });
93
+ post({ ready: true, cookies: parts.cookies });
94
+ }
95
+ catch (error) {
96
+ const e = error instanceof HozuCliError
97
+ ? error
98
+ : new HozuCliError('config', error instanceof Error ? error.message : String(error));
99
+ post({
100
+ failed: {
101
+ code: e.code,
102
+ message: e.message,
103
+ suggestions: e.suggestions,
104
+ ...(e instanceof BuildFailed ? { diagnostics: e.diagnostics } : {}),
105
+ },
106
+ });
107
+ }
108
+ //# sourceMappingURL=browse-world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browse-world.js","sourceRoot":"","sources":["../../src/commands/browse-world.ts"],"names":[],"mappings":"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"}