veryfront 0.1.181 → 0.1.183

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/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.181",
3
+ "version": "0.1.183",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -1 +1 @@
1
- {"version":3,"file":"ag-ui-browser-encoder.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-browser-encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,8BAA8B,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAYvE;AA6FD,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,EAAE,CA6O3B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,uBAAuB,EAAE,CAmC3B"}
1
+ {"version":3,"file":"ag-ui-browser-encoder.d.ts","sourceRoot":"","sources":["../../../src/src/agent/ag-ui-browser-encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,8BAA8B,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAYvE;AA0HD,wBAAgB,wCAAwC,CACtD,KAAK,EAAE,uBAAuB,EAC9B,KAAK,EAAE,sBAAsB,GAC5B,uBAAuB,EAAE,CAoM3B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,aAAa,GAAG,IAAI,GAC7B,uBAAuB,EAAE,CAmC3B"}
@@ -84,6 +84,27 @@ function applyResponseMetadata(state, response) {
84
84
  state.metadata.finishReason = finishReason;
85
85
  }
86
86
  }
87
+ function completeToolInput(state, event) {
88
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
89
+ const events = [];
90
+ if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
91
+ events.push({
92
+ event: "ToolCallArgs",
93
+ payload: {
94
+ toolCallId,
95
+ delta: serializeToolInput("input" in event ? event.input : {}),
96
+ },
97
+ });
98
+ }
99
+ if (toolCallId.length > 0) {
100
+ state.streamedToolInputIds.delete(toolCallId);
101
+ }
102
+ events.push({
103
+ event: "ToolCallEnd",
104
+ payload: { toolCallId: event.toolCallId },
105
+ });
106
+ return events;
107
+ }
87
108
  export function mapRuntimeStreamEventToAgUiBrowserEvents(state, event) {
88
109
  if (event.type.startsWith("data-")) {
89
110
  const name = event.type.slice("data-".length);
@@ -187,46 +208,11 @@ export function mapRuntimeStreamEventToAgUiBrowserEvents(state, event) {
187
208
  }];
188
209
  case "tool-input-available": {
189
210
  state.sawVisibleOutput = true;
190
- const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
191
- const events = [];
192
- if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
193
- events.push({
194
- event: "ToolCallArgs",
195
- payload: {
196
- toolCallId,
197
- delta: serializeToolInput("input" in event ? event.input : {}),
198
- },
199
- });
200
- }
201
- if (toolCallId.length > 0) {
202
- state.streamedToolInputIds.delete(toolCallId);
203
- }
204
- events.push({
205
- event: "ToolCallEnd",
206
- payload: { toolCallId: event.toolCallId },
207
- });
208
- return events;
211
+ return completeToolInput(state, event);
209
212
  }
210
213
  case "tool-input-error": {
211
214
  state.sawVisibleOutput = true;
212
- const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
213
- const events = [];
214
- if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
215
- events.push({
216
- event: "ToolCallArgs",
217
- payload: {
218
- toolCallId,
219
- delta: serializeToolInput("input" in event ? event.input : {}),
220
- },
221
- });
222
- }
223
- if (toolCallId.length > 0) {
224
- state.streamedToolInputIds.delete(toolCallId);
225
- }
226
- events.push({
227
- event: "ToolCallEnd",
228
- payload: { toolCallId: event.toolCallId },
229
- });
215
+ const events = completeToolInput(state, event);
230
216
  events.push({
231
217
  event: "ToolCallResult",
232
218
  payload: {
@@ -76,6 +76,8 @@ export declare class RenderPipeline {
76
76
  /** Resolve page data for SPA client-side navigation without rendering HTML. */
77
77
  resolvePageData(slug: string, options?: RenderOptions): Promise<PageDataResponse>;
78
78
  private extractMdxMetadata;
79
+ private serializeLayouts;
80
+ private serializeLayoutProps;
79
81
  private resolveAppPath;
80
82
  private resolveProjectUpdatedAt;
81
83
  private resolvePageDataCss;
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAyBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;YAIhB,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+P9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAwFzE,kBAAkB;YA2ClB,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;YAmElB,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAetB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA6ChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxE,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,IAAI,EAAE,aAAa,GAAG,YAAY,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,iBAAiB,CAAC,EAAE,OAAO,qBAAqB,EAAE,sBAAsB,CAAC;CAC1E;AAyBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,MAAM,EAAE,oBAAoB;IAaxC;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAKxB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;YAIhB,0BAA0B;IAaxC;;;;;;;;;OASG;YACW,qBAAqB;IAyDnC;;;OAGG;YACW,mBAAmB;IAiGjC,OAAO,CAAC,uBAAuB;IAkCzB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IA+P9E,+EAA+E;IACzE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;YA+EzE,kBAAkB;IA2ChC,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,oBAAoB;YAYd,cAAc;IAW5B,OAAO,CAAC,uBAAuB;YAYjB,kBAAkB;YAmElB,uBAAuB;IAmBrC;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CAetB"}
@@ -407,17 +407,9 @@ export class RenderPipeline {
407
407
  const dataResolution = await this.resolveDataFetching(slug, pageInfo.entity.path, layoutResult.nestedLayouts, options);
408
408
  const pageProps = dataResolution.pageProps;
409
409
  const params = dataResolution.params;
410
- const layoutProps = {};
411
- for (const [layoutId, props] of dataResolution.layoutProps.entries()) {
412
- layoutProps[layoutId] = props;
413
- }
410
+ const layoutProps = this.serializeLayoutProps(dataResolution.layoutProps);
414
411
  const { frontmatter, headings } = await this.extractMdxMetadata(pageType, pageInfo, slug, options, params);
415
- const layouts = layoutResult.nestedLayouts
416
- .filter((l) => l.componentPath || l.path)
417
- .map((l) => ({
418
- kind: l.kind,
419
- path: extractRelativePathShared(l.componentPath || l.path || "", this.config.projectDir),
420
- }));
412
+ const layouts = this.serializeLayouts(layoutResult.nestedLayouts);
421
413
  const providers = [];
422
414
  const projectUpdatedAt = this.resolveProjectUpdatedAt();
423
415
  const appPath = await this.resolveAppPath();
@@ -477,6 +469,21 @@ export class RenderPipeline {
477
469
  return { frontmatter: {}, headings: [] };
478
470
  }
479
471
  }
472
+ serializeLayouts(nestedLayouts) {
473
+ return nestedLayouts
474
+ .filter((layout) => layout.componentPath || layout.path)
475
+ .map((layout) => ({
476
+ kind: layout.kind,
477
+ path: extractRelativePathShared(layout.componentPath || layout.path || "", this.config.projectDir),
478
+ }));
479
+ }
480
+ serializeLayoutProps(layoutProps) {
481
+ const serialized = {};
482
+ for (const [layoutId, props] of layoutProps.entries()) {
483
+ serialized[layoutId] = props;
484
+ }
485
+ return serialized;
486
+ }
480
487
  async resolveAppPath() {
481
488
  for (const ext of LAYOUT_EXTENSIONS) {
482
489
  const candidatePath = join(this.config.projectDir, `components/app.${ext}`);
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.181";
1
+ export declare const VERSION = "0.1.183";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.181";
3
+ export const VERSION = "0.1.183";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.181",
3
+ "version": "0.1.183",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",
package/src/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "veryfront",
3
- "version": "0.1.181",
3
+ "version": "0.1.183",
4
4
  "license": "Apache-2.0",
5
5
  "nodeModulesDir": "auto",
6
6
  "exclude": [
@@ -134,6 +134,35 @@ function applyResponseMetadata(
134
134
  }
135
135
  }
136
136
 
137
+ function completeToolInput(
138
+ state: AgUiBrowserEncoderState,
139
+ event: AgUiRuntimeStreamEvent,
140
+ ): AgUiBrowserEncodedEvent[] {
141
+ const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
142
+ const events: AgUiBrowserEncodedEvent[] = [];
143
+
144
+ if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
145
+ events.push({
146
+ event: "ToolCallArgs",
147
+ payload: {
148
+ toolCallId,
149
+ delta: serializeToolInput("input" in event ? event.input : {}),
150
+ },
151
+ });
152
+ }
153
+
154
+ if (toolCallId.length > 0) {
155
+ state.streamedToolInputIds.delete(toolCallId);
156
+ }
157
+
158
+ events.push({
159
+ event: "ToolCallEnd",
160
+ payload: { toolCallId: event.toolCallId },
161
+ });
162
+
163
+ return events;
164
+ }
165
+
137
166
  export function mapRuntimeStreamEventToAgUiBrowserEvents(
138
167
  state: AgUiBrowserEncoderState,
139
168
  event: AgUiRuntimeStreamEvent,
@@ -250,53 +279,12 @@ export function mapRuntimeStreamEventToAgUiBrowserEvents(
250
279
 
251
280
  case "tool-input-available": {
252
281
  state.sawVisibleOutput = true;
253
- const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
254
- const events: AgUiBrowserEncodedEvent[] = [];
255
-
256
- if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
257
- events.push({
258
- event: "ToolCallArgs",
259
- payload: {
260
- toolCallId,
261
- delta: serializeToolInput("input" in event ? event.input : {}),
262
- },
263
- });
264
- }
265
-
266
- if (toolCallId.length > 0) {
267
- state.streamedToolInputIds.delete(toolCallId);
268
- }
269
-
270
- events.push({
271
- event: "ToolCallEnd",
272
- payload: { toolCallId: event.toolCallId },
273
- });
274
- return events;
282
+ return completeToolInput(state, event);
275
283
  }
276
284
 
277
285
  case "tool-input-error": {
278
286
  state.sawVisibleOutput = true;
279
- const toolCallId = typeof event.toolCallId === "string" ? event.toolCallId : "";
280
- const events: AgUiBrowserEncodedEvent[] = [];
281
-
282
- if (toolCallId.length > 0 && !state.streamedToolInputIds.has(toolCallId)) {
283
- events.push({
284
- event: "ToolCallArgs",
285
- payload: {
286
- toolCallId,
287
- delta: serializeToolInput("input" in event ? event.input : {}),
288
- },
289
- });
290
- }
291
-
292
- if (toolCallId.length > 0) {
293
- state.streamedToolInputIds.delete(toolCallId);
294
- }
295
-
296
- events.push({
297
- event: "ToolCallEnd",
298
- payload: { toolCallId: event.toolCallId },
299
- });
287
+ const events = completeToolInput(state, event);
300
288
  events.push({
301
289
  event: "ToolCallResult",
302
290
  payload: {
@@ -664,11 +664,7 @@ export class RenderPipeline {
664
664
 
665
665
  const pageProps: Record<string, unknown> = dataResolution.pageProps;
666
666
  const params = dataResolution.params;
667
- const layoutProps: Record<string, Record<string, unknown>> = {};
668
-
669
- for (const [layoutId, props] of dataResolution.layoutProps.entries()) {
670
- layoutProps[layoutId] = props;
671
- }
667
+ const layoutProps = this.serializeLayoutProps(dataResolution.layoutProps);
672
668
 
673
669
  const { frontmatter, headings } = await this.extractMdxMetadata(
674
670
  pageType,
@@ -678,12 +674,7 @@ export class RenderPipeline {
678
674
  params,
679
675
  );
680
676
 
681
- const layouts = layoutResult.nestedLayouts
682
- .filter((l: LayoutItem) => l.componentPath || l.path)
683
- .map((l: LayoutItem) => ({
684
- kind: l.kind,
685
- path: extractRelativePathShared(l.componentPath || l.path || "", this.config.projectDir),
686
- }));
677
+ const layouts = this.serializeLayouts(layoutResult.nestedLayouts);
687
678
 
688
679
  const providers: string[] = [];
689
680
 
@@ -765,6 +756,32 @@ export class RenderPipeline {
765
756
  }
766
757
  }
767
758
 
759
+ private serializeLayouts(
760
+ nestedLayouts: LayoutItem[],
761
+ ): Array<{ kind: LayoutItem["kind"]; path: string }> {
762
+ return nestedLayouts
763
+ .filter((layout: LayoutItem) => layout.componentPath || layout.path)
764
+ .map((layout: LayoutItem) => ({
765
+ kind: layout.kind,
766
+ path: extractRelativePathShared(
767
+ layout.componentPath || layout.path || "",
768
+ this.config.projectDir,
769
+ ),
770
+ }));
771
+ }
772
+
773
+ private serializeLayoutProps(
774
+ layoutProps: Map<string, Record<string, unknown>>,
775
+ ): Record<string, Record<string, unknown>> {
776
+ const serialized: Record<string, Record<string, unknown>> = {};
777
+
778
+ for (const [layoutId, props] of layoutProps.entries()) {
779
+ serialized[layoutId] = props;
780
+ }
781
+
782
+ return serialized;
783
+ }
784
+
768
785
  private async resolveAppPath(): Promise<string | undefined> {
769
786
  for (const ext of LAYOUT_EXTENSIONS) {
770
787
  const candidatePath = join(this.config.projectDir, `components/app.${ext}`);
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.181";
3
+ export const VERSION = "0.1.183";