lastriko 0.1.2 → 0.1.7

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 (63) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/integration/ws-flow.integration.test.js +38 -140
  3. package/dist/__tests__/integration/ws-flow.integration.test.js.map +1 -1
  4. package/dist/client/events.js +169 -49
  5. package/dist/client/events.js.map +1 -1
  6. package/dist/client/swap.d.ts +14 -1
  7. package/dist/client/swap.js +185 -7
  8. package/dist/client/swap.js.map +1 -1
  9. package/dist/client/ws.d.ts +1 -0
  10. package/dist/client/ws.js +214 -35
  11. package/dist/client/ws.js.map +1 -1
  12. package/dist/client/ws.test.js +6 -146
  13. package/dist/client/ws.test.js.map +1 -1
  14. package/dist/components/context.d.ts +14 -2
  15. package/dist/components/context.js +330 -5
  16. package/dist/components/context.js.map +1 -1
  17. package/dist/components/context.test.js +74 -56
  18. package/dist/components/context.test.js.map +1 -1
  19. package/dist/components/registry.d.ts +2 -2
  20. package/dist/components/registry.js +52 -4
  21. package/dist/components/registry.js.map +1 -1
  22. package/dist/components/types.d.ts +180 -4
  23. package/dist/engine/code-highlight.d.ts +1 -0
  24. package/dist/engine/code-highlight.js +64 -0
  25. package/dist/engine/code-highlight.js.map +1 -0
  26. package/dist/engine/code-highlight.test.d.ts +1 -0
  27. package/dist/engine/code-highlight.test.js +15 -0
  28. package/dist/engine/code-highlight.test.js.map +1 -0
  29. package/dist/engine/executor.js +16 -0
  30. package/dist/engine/executor.js.map +1 -1
  31. package/dist/engine/executor.test.js +33 -4
  32. package/dist/engine/executor.test.js.map +1 -1
  33. package/dist/engine/messages.d.ts +9 -1
  34. package/dist/engine/messages.js.map +1 -1
  35. package/dist/engine/messages.test.d.ts +1 -0
  36. package/dist/engine/messages.test.js +39 -0
  37. package/dist/engine/messages.test.js.map +1 -0
  38. package/dist/engine/renderer.js +241 -14
  39. package/dist/engine/renderer.js.map +1 -1
  40. package/dist/engine/renderer.test.js +230 -202
  41. package/dist/engine/renderer.test.js.map +1 -1
  42. package/dist/engine/server.d.ts +2 -0
  43. package/dist/engine/server.js +57 -6
  44. package/dist/engine/server.js.map +1 -1
  45. package/dist/engine/server.test.js +105 -4
  46. package/dist/engine/server.test.js.map +1 -1
  47. package/dist/engine/watcher.d.ts +17 -1
  48. package/dist/engine/watcher.js +42 -5
  49. package/dist/engine/watcher.js.map +1 -1
  50. package/dist/engine/watcher.test.d.ts +1 -0
  51. package/dist/engine/watcher.test.js +62 -0
  52. package/dist/engine/watcher.test.js.map +1 -0
  53. package/dist/engine/websocket.d.ts +2 -0
  54. package/dist/engine/websocket.hub.test.js +24 -0
  55. package/dist/engine/websocket.hub.test.js.map +1 -1
  56. package/dist/engine/websocket.js +6 -1
  57. package/dist/engine/websocket.js.map +1 -1
  58. package/dist/index.d.ts +3 -1
  59. package/dist/index.js +1 -0
  60. package/dist/index.js.map +1 -1
  61. package/dist/style.css +150 -0
  62. package/dist/theme/lastriko.css +150 -0
  63. package/package.json +5 -1
@@ -1,226 +1,254 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { renderComponent, renderPage } from './renderer';
3
- function textHandle(content) {
2
+ import { renderComponent } from './renderer';
3
+ function textHandle(id, content) {
4
4
  return {
5
- id: 'text-1',
5
+ id,
6
6
  type: 'text',
7
7
  props: { content },
8
8
  get value() {
9
- return content;
9
+ return this.props.content;
10
10
  },
11
11
  update(next) {
12
- content = next;
13
12
  this.props.content = next;
14
13
  },
15
14
  };
16
15
  }
17
- describe('renderer', () => {
18
- it('includes data-lk-id and escapes text', () => {
19
- const html = renderComponent(textHandle('<img src=x onerror=alert(1)>'));
20
- expect(html).toContain('data-lk-id="text-1"');
21
- expect(html).not.toContain('<img');
22
- expect(html).toContain('&lt;img src=x onerror=alert(1)&gt;');
23
- });
24
- it('renders input and stream components with expected markers', () => {
25
- const handles = [
26
- {
27
- id: 'textInput-1',
28
- type: 'textInput',
29
- props: { label: 'Name', value: 'Ada', multiline: false },
30
- get value() {
31
- return this.props.value;
32
- },
33
- update: () => { },
34
- },
35
- {
36
- id: 'streamText-1',
37
- type: 'streamText',
38
- props: { text: 'hello', isStreaming: true, format: 'plain', cursor: true },
39
- get value() {
40
- return this.props.text;
41
- },
42
- get text() {
43
- return this.props.text;
44
- },
45
- get isStreaming() {
46
- return this.props.isStreaming;
47
- },
48
- append: () => { },
49
- done: () => { },
50
- clear: () => { },
51
- update: () => { },
52
- },
53
- ];
54
- const html = renderPage(handles);
55
- expect(html).toContain('data-lk-id="textInput-1"');
56
- expect(html).toContain('data-lk-stream-body');
57
- expect(html).toContain('data-lk-stream-cursor');
16
+ describe('renderer phase 3 components', () => {
17
+ it('renders multiSelect, colorPicker, and dateInput', () => {
18
+ const multi = renderComponent({
19
+ id: 'multiSelect-1',
20
+ type: 'multiSelect',
21
+ props: {
22
+ label: 'Models',
23
+ value: ['a'],
24
+ options: [{ label: 'A', value: 'a' }, { label: 'B', value: 'b' }],
25
+ },
26
+ get value() {
27
+ return this.props.value;
28
+ },
29
+ update: () => { },
30
+ });
31
+ expect(multi).toContain('data-lk-kind="multiSelect"');
32
+ expect(multi).toContain('type="checkbox"');
33
+ const color = renderComponent({
34
+ id: 'colorPicker-1',
35
+ type: 'colorPicker',
36
+ props: { label: 'Accent', value: '#ff0000', format: 'hex' },
37
+ get value() {
38
+ return this.props.value;
39
+ },
40
+ update: () => { },
41
+ });
42
+ expect(color).toContain('type="color"');
43
+ expect(color).toContain('#ff0000');
44
+ const date = renderComponent({
45
+ id: 'dateInput-1',
46
+ type: 'dateInput',
47
+ props: { label: 'When', value: '2026-04-08', type: 'date' },
48
+ get value() {
49
+ return this.props.value;
50
+ },
51
+ update: () => { },
52
+ });
53
+ expect(date).toContain('type="date"');
54
+ expect(date).toContain('2026-04-08');
58
55
  });
59
- it('renders markdown with parsed bold (not literal asterisks)', () => {
60
- const md = {
61
- id: 'markdown-1',
62
- type: 'markdown',
63
- props: { content: '**x**' },
56
+ it('renders video audio and diff', () => {
57
+ const video = renderComponent({
58
+ id: 'video-1',
59
+ type: 'video',
60
+ props: { src: 'https://example.com/video.mp4', controls: true, autoplay: true, muted: true, loop: false, width: '100%' },
64
61
  value: undefined,
65
62
  update: () => { },
66
- };
67
- const html = renderComponent(md);
68
- expect(html).toContain('<strong>x</strong>');
69
- expect(html).not.toContain('**x**');
63
+ });
64
+ expect(video).toContain('<video');
65
+ expect(video).toContain('loading="lazy"');
66
+ const audio = renderComponent({
67
+ id: 'audio-1',
68
+ type: 'audio',
69
+ props: { src: 'https://example.com/audio.mp3', controls: true, label: 'audio' },
70
+ value: undefined,
71
+ update: () => { },
72
+ });
73
+ expect(audio).toContain('<audio');
74
+ const diff = renderComponent({
75
+ id: 'diff-1',
76
+ type: 'diff',
77
+ props: { before: 'a\nb', after: 'a\nc', mode: 'split', beforeLabel: 'Before', afterLabel: 'After' },
78
+ value: undefined,
79
+ update: () => { },
80
+ });
81
+ expect(diff).toContain('lk-diff');
82
+ expect(diff).toContain('lk-diff-line removed');
83
+ expect(diff).toContain('lk-diff-line added');
70
84
  });
71
- it('tab buttons omit disabled attribute when tab is enabled', () => {
72
- const handles = [
73
- textHandle('a'),
74
- textHandle('b'),
75
- {
76
- id: 'tabs-1',
77
- type: 'tabs',
78
- props: {
79
- active: 'One',
80
- tabs: [
81
- { label: 'One', disabled: false, ids: ['text-1'] },
82
- { label: 'Two', disabled: true, ids: ['text-2'] },
83
- ],
84
- },
85
- get value() {
86
- return 'One';
87
- },
88
- update: () => { },
89
- },
90
- ];
91
- const html = renderPage(handles);
92
- const oneOpen = html.match(/<button[^>]*data-lk-tab-target="One"[^>]*>/)?.[0] ?? '';
93
- const twoOpen = html.match(/<button[^>]*data-lk-tab-target="Two"[^>]*>/)?.[0] ?? '';
94
- expect(oneOpen).not.toContain('disabled');
95
- expect(twoOpen).toContain('disabled');
85
+ it('renders accordion and fullscreen containers', () => {
86
+ const byId = new Map();
87
+ byId.set('text-1', textHandle('text-1', 'section text'));
88
+ const accordion = renderComponent({
89
+ id: 'accordion-1',
90
+ type: 'accordion',
91
+ props: {
92
+ sections: [{ label: 'Section', defaultOpen: true, ids: ['text-1'] }],
93
+ opts: { allowMultiple: false },
94
+ },
95
+ value: undefined,
96
+ update: () => { },
97
+ }, byId);
98
+ expect(accordion).toContain('lk-accordion');
99
+ expect(accordion).toContain('<details');
100
+ const fullscreen = renderComponent({
101
+ id: 'fullscreen-1',
102
+ type: 'fullscreen',
103
+ props: {
104
+ ids: ['text-1'],
105
+ trigger: 'button',
106
+ label: 'Open fullscreen',
107
+ open: true,
108
+ },
109
+ get value() {
110
+ return true;
111
+ },
112
+ update: () => { },
113
+ open: () => { },
114
+ close: () => { },
115
+ }, byId);
116
+ expect(fullscreen).toContain('lk-fullscreen');
117
+ expect(fullscreen).toContain('lk-fullscreen-overlay');
96
118
  });
97
- it('renders shell composition containing child content', () => {
98
- const handles = [
99
- textHandle('inside shell'),
100
- {
101
- id: 'shell-1',
102
- type: 'shell',
103
- props: {
104
- regions: { header: [], sidebar: [], main: ['text-1'], footer: [] },
105
- opts: { sidebarPosition: 'left', sidebarWidth: '260px' },
119
+ it('renders modelCompare parameterPanel filmStrip and beforeAfter', () => {
120
+ const compare = renderComponent({
121
+ id: 'modelCompare-1',
122
+ type: 'modelCompare',
123
+ props: {
124
+ models: [{ label: 'A', model: 'm1', provider: 'p1' }],
125
+ prompt: 'hello',
126
+ value: {
127
+ results: { A: 'ok' },
128
+ isStreaming: { A: false },
129
+ errors: { A: null },
130
+ latencies: { A: 12 },
106
131
  },
107
- value: undefined,
108
- update: () => { },
109
- },
110
- ];
111
- const html = renderPage(handles);
112
- expect(html).toContain('lk-shell');
113
- expect(html).toContain('inside shell');
114
- expect(html).toContain('class="lk-shell');
115
- expect(html).toContain('<main class="lk-shell-main"><p class="lk-text"');
132
+ },
133
+ get value() {
134
+ return this.props.value;
135
+ },
136
+ get results() {
137
+ return this.props.value.results;
138
+ },
139
+ get isStreaming() {
140
+ return this.props.value.isStreaming;
141
+ },
142
+ get errors() {
143
+ return this.props.value.errors;
144
+ },
145
+ get latencies() {
146
+ return this.props.value.latencies;
147
+ },
148
+ update: () => { },
149
+ });
150
+ expect(compare).toContain('lk-model-compare');
151
+ expect(compare).toContain('A');
152
+ const byId = new Map();
153
+ byId.set('textInput-1', {
154
+ id: 'textInput-1',
155
+ type: 'textInput',
156
+ props: { label: 'Prompt', value: 'x' },
157
+ get value() {
158
+ return this.props.value;
159
+ },
160
+ update: () => { },
161
+ });
162
+ const panel = renderComponent({
163
+ id: 'parameterPanel-1',
164
+ type: 'parameterPanel',
165
+ props: {
166
+ schema: { prompt: { type: 'string' } },
167
+ ids: ['textInput-1'],
168
+ value: { prompt: 'x' },
169
+ title: 'Params',
170
+ },
171
+ get value() {
172
+ return this.props.value;
173
+ },
174
+ update: () => { },
175
+ }, byId);
176
+ expect(panel).toContain('lk-parameter-panel');
177
+ expect(panel).toContain('Params');
178
+ const film = renderComponent({
179
+ id: 'filmStrip-1',
180
+ type: 'filmStrip',
181
+ props: { images: [{ src: '/a.png', alt: 'a' }], height: 90, selectedIndex: 0, zoom: true, showCaptions: true },
182
+ value: undefined,
183
+ update: () => { },
184
+ });
185
+ expect(film).toContain('lk-film-strip');
186
+ const beforeAfter = renderComponent({
187
+ id: 'beforeAfter-1',
188
+ type: 'beforeAfter',
189
+ props: { before: '/before.png', after: '/after.png', beforeLabel: 'Before', afterLabel: 'After', initialPosition: 40, orientation: 'horizontal' },
190
+ value: undefined,
191
+ update: () => { },
192
+ });
193
+ expect(beforeAfter).toContain('lk-before-after');
194
+ expect(beforeAfter).toContain('class="lk-before-after-handle"');
116
195
  });
117
- it('does not duplicate shell-owned children even when declared before shell', () => {
118
- const handles = [
119
- {
120
- id: 'text-1',
121
- type: 'text',
122
- props: { content: 'owned by shell' },
123
- get value() {
124
- return this.props.content;
125
- },
126
- update: () => { },
127
- },
128
- {
129
- id: 'shell-1',
130
- type: 'shell',
131
- props: {
132
- regions: { header: [], sidebar: [], main: ['text-1'], footer: [] },
133
- opts: {},
134
- },
135
- value: undefined,
136
- update: () => { },
196
+ it('renders virtualized table when row count is large', () => {
197
+ const rows = Array.from({ length: 120 }, (_, i) => ({ id: `r${i}`, data: { idx: i } }));
198
+ const table = renderComponent({
199
+ id: 'table-1',
200
+ type: 'table',
201
+ props: {
202
+ columns: ['idx'],
203
+ rows,
204
+ striped: true,
205
+ emptyMessage: 'none',
206
+ getOnRowClick: () => null,
207
+ },
208
+ value: undefined,
209
+ get rowCount() {
210
+ return this.props.rows.length;
137
211
  },
138
- ];
139
- const html = renderPage(handles);
140
- const textIdMatches = html.match(/data-lk-id="text-1"/g) ?? [];
141
- expect(textIdMatches).toHaveLength(1);
212
+ update: () => { },
213
+ append: () => ({ id: 'x', update: () => { }, remove: () => { } }),
214
+ prepend: () => ({ id: 'x', update: () => { }, remove: () => { } }),
215
+ remove: () => { },
216
+ onRowClick: () => { },
217
+ });
218
+ expect(table).toContain('data-lk-virtualized="true"');
219
+ expect(table).toContain('data-lk-table-rows');
142
220
  });
143
- it('does not duplicate tab-owned children when tab appears last', () => {
144
- const handles = [
145
- {
146
- id: 'text-1',
147
- type: 'text',
148
- props: { content: 'tab A' },
149
- get value() {
150
- return this.props.content;
151
- },
152
- update: () => { },
153
- },
154
- {
155
- id: 'text-2',
156
- type: 'text',
157
- props: { content: 'tab B' },
158
- get value() {
159
- return this.props.content;
160
- },
161
- update: () => { },
162
- },
163
- {
164
- id: 'tabs-1',
165
- type: 'tabs',
166
- props: {
167
- active: 'A',
168
- tabs: [
169
- { label: 'A', disabled: false, ids: ['text-1'] },
170
- { label: 'B', disabled: false, ids: ['text-2'] },
171
- ],
172
- },
173
- get value() {
174
- return 'A';
175
- },
176
- update: () => { },
177
- },
178
- ];
179
- const html = renderPage(handles);
180
- const text1Matches = html.match(/data-lk-id="text-1"/g) ?? [];
181
- const text2Matches = html.match(/data-lk-id="text-2"/g) ?? [];
182
- expect(text1Matches).toHaveLength(1);
183
- expect(text2Matches).toHaveLength(1);
221
+ it('renders tabs with proper role wiring', () => {
222
+ const byId = new Map();
223
+ byId.set('text-1', textHandle('text-1', 'A'));
224
+ const html = renderComponent({
225
+ id: 'tabs-1',
226
+ type: 'tabs',
227
+ props: {
228
+ tabs: [{ label: 'One', disabled: false, ids: ['text-1'] }],
229
+ active: 'One',
230
+ },
231
+ get value() {
232
+ return 'One';
233
+ },
234
+ update: () => { },
235
+ setActive: () => { },
236
+ }, byId);
237
+ expect(html).toContain('<nav class="lk-tab-nav" role="tablist">');
238
+ expect(html).toContain('role="tabpanel"');
184
239
  });
185
- it('does not duplicate nested container ownership (shell -> tabs -> text)', () => {
186
- const handles = [
187
- {
188
- id: 'text-1',
189
- type: 'text',
190
- props: { content: 'nested text' },
191
- get value() {
192
- return this.props.content;
193
- },
194
- update: () => { },
195
- },
196
- {
197
- id: 'tabs-1',
198
- type: 'tabs',
199
- props: {
200
- active: 'Main',
201
- tabs: [{ label: 'Main', disabled: false, ids: ['text-1'] }],
202
- },
203
- get value() {
204
- return 'Main';
205
- },
206
- update: () => { },
207
- },
208
- {
209
- id: 'shell-1',
210
- type: 'shell',
211
- props: {
212
- regions: { header: [], sidebar: [], main: ['tabs-1'], footer: [] },
213
- opts: {},
214
- },
215
- value: undefined,
216
- update: () => { },
217
- },
218
- ];
219
- const html = renderPage(handles);
220
- const textMatches = html.match(/data-lk-id="text-1"/g) ?? [];
221
- const tabsMatches = html.match(/data-lk-id="tabs-1"/g) ?? [];
222
- expect(textMatches).toHaveLength(1);
223
- expect(tabsMatches).toHaveLength(1);
240
+ it('escapes potentially unsafe text', () => {
241
+ const html = renderComponent({
242
+ id: 'text-unsafe',
243
+ type: 'text',
244
+ props: { content: '<script>alert(1)</script>' },
245
+ get value() {
246
+ return this.props.content;
247
+ },
248
+ update: () => { },
249
+ });
250
+ expect(html).not.toContain('<script>');
251
+ expect(html).toContain('&lt;script&gt;');
224
252
  });
225
253
  });
226
254
  //# sourceMappingURL=renderer.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.test.js","sourceRoot":"","sources":["../../src/engine/renderer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGzD,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE,OAAO,EAAE;QAClB,IAAI,KAAK;YACP,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,CAAC,IAAY;YACjB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,OAAO,GAAyB;YACpC;gBACE,EAAE,EAAE,aAAa;gBACjB,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;gBACxD,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC1B,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACjB;YACD;gBACE,EAAE,EAAE,cAAc;gBAClB,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;gBAC1E,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzB,CAAC;gBACD,IAAI,IAAI;oBACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACzB,CAAC;gBACD,IAAI,WAAW;oBACb,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAChC,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;gBAChB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;gBACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;gBACf,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACjB;SACiC,CAAC;QAErC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,EAAE,GAAuB;YAC7B,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;YAC3B,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACK,CAAC;QACxB,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAyB;YACpC,UAAU,CAAC,GAAG,CAAC;YACf,UAAU,CAAC,GAAG,CAAC;YACf;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE;oBACL,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE;wBACJ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;wBAClD,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;qBAClD;iBACF;gBACD,IAAI,KAAK;oBACP,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACmC;SACtD,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,OAAO,GAAyB;YACpC,UAAU,CAAC,cAAc,CAAC;YAC1B;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;oBAClE,IAAI,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE;iBACzD;gBACD,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACjB;SACiC,CAAC;QAErC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,OAAO,GAAyB;YACpC;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE;gBACpC,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5B,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACH;YACf;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;oBAClE,IAAI,EAAE,EAAE;iBACT;gBACD,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACK;SACxB,CAAC;QAEF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC/D,MAAM,CAAC,aAAa,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,OAAO,GAAyB;YACpC;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC3B,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5B,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACH;YACf;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;gBAC3B,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5B,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACH;YACf;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;wBAChD,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;qBACjD;iBACF;gBACD,IAAI,KAAK;oBACP,OAAO,GAAG,CAAC;gBACb,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACmC;SACtD,CAAC;QAEF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,OAAO,GAAyB;YACpC;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE;gBACjC,IAAI,KAAK;oBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5B,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACH;YACf;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE;oBACL,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;iBAC5D;gBACD,IAAI,KAAK;oBACP,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACmC;YACrD;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;oBAClE,IAAI,EAAE,EAAE;iBACT;gBACD,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;aACK;SACxB,CAAC;QAEF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"renderer.test.js","sourceRoot":"","sources":["../../src/engine/renderer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,SAAS,UAAU,CAAC,EAAU,EAAE,OAAe;IAC7C,OAAO;QACL,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,EAAE,OAAO,EAAE;QAClB,IAAI,KAAK;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,CAAC;QACD,MAAM,CAAC,IAAY;YACjB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE;gBACL,KAAK,EAAE,QAAQ;gBACf,KAAK,EAAE,CAAC,GAAG,CAAC;gBACZ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aAClE;YACD,IAAI,KAAK;gBACP,OAAQ,IAAuC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC9D,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAE3C,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;YAC3D,IAAI,KAAK;gBACP,OAAQ,IAAqC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5D,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3D,IAAI,KAAK;gBACP,OAAQ,IAAqC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5D,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE;YACxH,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/E,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;YACnG,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAkC,CAAC,CAAC;QAC1F,MAAM,SAAS,GAAG,eAAe,CAAC;YAChC,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE;gBACL,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpE,IAAI,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;aAC/B;YACD,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,eAAe,CAAC;YACjC,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE;gBACL,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACf,OAAO,EAAE,QAAQ;gBACjB,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,IAAI;aACX;YACD,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;SACI,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,OAAO,GAAG,eAAe,CAAC;YAC9B,EAAE,EAAE,gBAAgB;YACpB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE;gBACL,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACrD,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE;oBACL,OAAO,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;oBACpB,WAAW,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE;oBACzB,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE;oBACnB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;iBACrB;aACF;YACD,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,CAAC;YACD,IAAI,OAAO;gBACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAClC,CAAC;YACD,IAAI,WAAW;gBACb,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;YACtC,CAAC;YACD,IAAI,MAAM;gBACR,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,CAAC;YACD,IAAI,SAAS;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;YACpC,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACK,CAAC,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;YACtB,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YACtC,IAAI,KAAK;gBACP,OAAQ,IAAqC,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5D,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QAEpC,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,kBAAkB;YACtB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE;gBACL,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACtC,GAAG,EAAE,CAAC,aAAa,CAAC;gBACpB,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;gBACtB,KAAK,EAAE,QAAQ;aAChB;YACD,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAC1B,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACO,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAElC,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;YAC9G,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,eAAe,CAAC;YAClC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE;YACjJ,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACgB,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,KAAK,GAAG,eAAe,CAAC;YAC5B,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,KAAK,CAAC;gBAChB,IAAI;gBACJ,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,MAAM;gBACpB,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;aAC1B;YACD,KAAK,EAAE,SAAS;YAChB,IAAI,QAAQ;gBACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAChC,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;YAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;YAChE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;SACN,CAAC,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,EAA8B,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAkC,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,MAAM,EAAE,KAAK;aACd;YACD,IAAI,KAAK;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;YAChB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;SACN,EAAE,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,eAAe,CAAC;YAC3B,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE;YAC/C,IAAI,KAAK;gBACP,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;SACH,CAAC,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -9,6 +9,7 @@ export interface ServerOptions {
9
9
  port?: number;
10
10
  host?: string;
11
11
  theme?: ThemeMode;
12
+ hotReloadPreserve?: boolean;
12
13
  }
13
14
  export interface RuntimeConfig {
14
15
  port?: number;
@@ -30,6 +31,7 @@ declare function createHttpHandler(opts: {
30
31
  toolbar: boolean;
31
32
  themeCssPath: string | null;
32
33
  uploadDirRoot: string;
34
+ onUploadDirResolved?: (connectionId: string, uploadDir: string) => void;
33
35
  }): (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => Promise<void>;
34
36
  export declare function startServer(definition: {
35
37
  title: string;