@jay-framework/fullstack-component 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -10,7 +10,8 @@ The `@jay-framework/fullstack-component` package provides a fluent builder API f
10
10
  - **Fast Changing Server-side render** with dynamic data on the server
11
11
  - **Client-side interactivity** with reactive state management
12
12
  - **Type-safe** component contracts using Jay HTML and Jay Contracts
13
- - **Context-aware** rendering with server and client contexts
13
+ - **Service injection** for server-side dependencies (database, API clients, etc.)
14
+ - **Context support** for client-side hierarchical state
14
15
 
15
16
  ## Features
16
17
 
@@ -18,22 +19,124 @@ The `@jay-framework/fullstack-component` package provides a fluent builder API f
18
19
  - ⚡ **Interactive Client**: Seamless client-side interactivity with reactive signals
19
20
  - 🎯 **Type Safety**: Full TypeScript support with generated contracts from Jay HTML
20
21
  - 🔧 **Fluent Builder API**: Intuitive chainable API for component configuration
21
- - 🌐 **Context Support**: Server and client context injection
22
+ - 💉 **Service Injection**: Type-safe dependency injection for server-side services
23
+ - 🌐 **Context Support**: Client-side hierarchical context injection
22
24
  - 📦 **URL Parameter Loading**: Built-in support for dynamic URL parameter handling
23
25
  - 🚀 **Performance Optimized**: Efficient rendering with partial state updates
24
26
 
25
27
  ## Rendering Phases
26
28
 
27
- - **Slow Rendering**: Use for static data that doesn't change often
28
- - **Fast Rendering**: Use for dynamic data that can be cached
29
- - **Partial Renders**: Only update the parts of the view state that change
30
- - **Carry Forward**: Pass data between render phases to avoid recomputation
29
+ Jay Stack components support three rendering phases, each optimized for different data lifecycles:
31
30
 
32
- | Rendering Phase | Rendered Where | When Rendered | Carry Forward |
33
- | ---------------------- | -------------- | ------------------------------ | ------------------ |
34
- | Slowly Changing Render | SSR | Build time or data change time | Slowly Fast |
35
- | Fast Changing Render | SSR | Page serving | Fast Interactive |
36
- | Interactive Render | CSR | User interaction | - |
31
+ | Rendering Phase | Rendered Where | When Rendered | Use Case |
32
+ | ------------------ | -------------- | ------------------------------ | --------------------------------- |
33
+ | **Slow (Static)** | SSR | Build time or data change time | Product names, descriptions, SKUs |
34
+ | **Fast (Dynamic)** | SSR | Page serving (per request) | Inventory, pricing, availability |
35
+ | **Interactive** | CSR | User interaction | Cart count, user selections |
36
+
37
+ ### Phase-Based Type Validation
38
+
39
+ Jay Stack automatically generates **phase-specific ViewState types** from your contracts, ensuring that each render function can only return properties appropriate for its phase. This prevents accidentally including fast-changing data in slow renders or slow data in fast renders.
40
+
41
+ **Benefits:**
42
+
43
+ - 🛡️ **Compile-time safety**: TypeScript catches phase violations before deployment
44
+ - 📝 **Self-documenting**: The contract explicitly shows which data is static vs dynamic
45
+ - ⚡ **Performance**: Ensures optimal caching and rendering strategies
46
+ - 🎯 **Intent clarity**: Makes data lifecycle explicit in the contract
47
+
48
+ **Example:**
49
+
50
+ ````typescript
51
+ // TypeScript automatically knows which properties are valid in each phase
52
+ .withSlowlyRender(async () => {
53
+ return partialRender({
54
+ productName: 'Widget', // ✅ Allowed (slow phase)
55
+ price: 29.99, // ❌ TypeScript Error: Not in SlowViewState
56
+ }, {});
57
+ })
58
+ .withFastRender(async () => {
59
+ return partialRender({
60
+ price: 29.99, // ✅ Allowed (fast phase)
61
+ productName: 'Widget', // ❌ TypeScript Error: Not in FastViewState
62
+ }, {});
63
+ })
64
+
65
+ ### Specifying Phases in Contracts
66
+
67
+ You can annotate your contract properties with the `phase` attribute to control when data is rendered:
68
+
69
+ #### Jay HTML Contract
70
+
71
+ ```html
72
+ <html>
73
+ <head>
74
+ <script type="application/yaml-jay">
75
+ data:
76
+ # Static data - rendered at build time
77
+ - {tag: productName, dataType: string, phase: slow}
78
+ - {tag: description, dataType: string, phase: slow}
79
+ - {tag: sku, dataType: string, phase: slow}
80
+
81
+ # Dynamic data - rendered per request
82
+ - {tag: price, dataType: number, phase: fast}
83
+ - {tag: inStock, dataType: boolean, phase: fast}
84
+
85
+ # No phase specified = defaults to 'slow'
86
+ - {tag: category, dataType: string}
87
+ </script>
88
+ </head>
89
+ <body>
90
+ <div>
91
+ <h1>{productName}</h1>
92
+ <p>{description}</p>
93
+ <p>Price: ${price}</p>
94
+ </div>
95
+ </body>
96
+ </html>
97
+ ````
98
+
99
+ #### Jay Contract (Headless)
100
+
101
+ ```yaml
102
+ name: product-contract
103
+ tags:
104
+ # Static product information
105
+ - tag: productName
106
+ dataType: string
107
+ phase: slow
108
+
109
+ - tag: description
110
+ dataType: string
111
+ phase: slow
112
+
113
+ - tag: sku
114
+ dataType: string
115
+ phase: slow
116
+
117
+ # Dynamic pricing and availability
118
+ - tag: price
119
+ dataType: number
120
+ phase: fast
121
+
122
+ - tag: inStock
123
+ dataType: boolean
124
+ phase: fast
125
+
126
+ # Interactive elements go in refs, not data
127
+ interactive:
128
+ - tag: addToCartButton
129
+ elementType: [button]
130
+ ```
131
+
132
+ **Phase Rules:**
133
+
134
+ - `slow`: Value is set at build time (default if not specified)
135
+ - `fast`: Value is set at request time
136
+ - `fast+interactive`: Value is set at request time and can be modified on the client
137
+ - `interactive` tags are implicitly `fast+interactive` and go into the `Refs` type, not `ViewState`
138
+ - For nested objects, the parent's phase serves as the default for children
139
+ - Array children cannot have an earlier phase than their parent array
37
140
 
38
141
  ## Installation
39
142
 
@@ -55,12 +158,15 @@ For headless components, create a Jay Contract file (`my-contract.jay-contract`)
55
158
  <head>
56
159
  <script type="application/yaml-jay">
57
160
  data:
58
- id: string
59
- name: string
60
- age: number
61
- address: string
62
- stars: number
63
- rating: number
161
+ # User profile data - slow changing
162
+ - {tag: id, dataType: string, phase: slow}
163
+ - {tag: name, dataType: string, phase: slow}
164
+ - {tag: age, dataType: number, phase: slow}
165
+ - {tag: address, dataType: string, phase: slow}
166
+
167
+ # User ratings - fast changing
168
+ - {tag: stars, dataType: number, phase: fast}
169
+ - {tag: rating, dataType: number, phase: fast}
64
170
  </script>
65
171
  </head>
66
172
  <body>
@@ -82,18 +188,31 @@ For headless components, create a Jay Contract file (`my-contract.jay-contract`)
82
188
  ```yaml
83
189
  name: my-contract
84
190
  tags:
191
+ # User profile data - slow changing
85
192
  - tag: id
86
193
  dataType: string
194
+ phase: slow
195
+
87
196
  - tag: name
88
197
  dataType: string
198
+ phase: slow
199
+
89
200
  - tag: age
90
201
  dataType: number
202
+ phase: slow
203
+
91
204
  - tag: address
92
205
  dataType: string
206
+ phase: slow
207
+
208
+ # User ratings - fast changing
93
209
  - tag: stars
94
210
  dataType: number
211
+ phase: fast
212
+
95
213
  - tag: rating
96
214
  dataType: number
215
+ phase: fast
97
216
  ```
98
217
 
99
218
  ### 2. Generate Definition Files
@@ -104,51 +223,104 @@ Run the Jay CLI to generate TypeScript definition files from your Jay HTML or co
104
223
  jay-cli definitions <path to your sources>
105
224
  ```
106
225
 
226
+ This will generate a `.d.ts` file with:
227
+
228
+ - **Full ViewState**: All properties from your contract
229
+ - **Phase-specific ViewStates**: Separate types for `Slow`, `Fast`, and `Interactive` phases
230
+ - **Contract type**: A `JayContract` type that includes all ViewState types
231
+
232
+ **Generated Types Example** (`my-component.jay-html.d.ts`):
233
+
234
+ ```typescript
235
+ import { JayContract } from '@jay-framework/fullstack-component';
236
+
237
+ // Full ViewState - all properties
238
+ export interface MyComponentViewState {
239
+ id: string;
240
+ name: string;
241
+ age: number;
242
+ address: string;
243
+ stars: number;
244
+ rating: number;
245
+ }
246
+
247
+ export interface MyComponentElementRefs {}
248
+
249
+ // Phase-specific ViewStates (automatically generated)
250
+ export type MyComponentSlowViewState = Pick<
251
+ MyComponentViewState,
252
+ 'id' | 'name' | 'age' | 'address'
253
+ >;
254
+ export type MyComponentFastViewState = Pick<MyComponentViewState, 'stars' | 'rating'>;
255
+ export type MyComponentInteractiveViewState = {};
256
+
257
+ // Contract type with all ViewState types
258
+ export type MyComponentContract = JayContract<
259
+ MyComponentViewState,
260
+ MyComponentElementRefs,
261
+ MyComponentSlowViewState,
262
+ MyComponentFastViewState,
263
+ MyComponentInteractiveViewState
264
+ >;
265
+ ```
266
+
107
267
  ### 3. Build Your Full-Stack Component
108
268
 
109
269
  ```typescript
110
270
  import { MyComponentContract } from './my-component.jay-html';
111
271
  // or import { MyComponentContract } from './my-component.jay-contract';
112
- import { makeJayStackComponent, partialRender } from '@jay-framework/fullstack-component';
272
+ import {
273
+ makeJayStackComponent,
274
+ partialRender,
275
+ createJayService,
276
+ } from '@jay-framework/fullstack-component';
113
277
  import { createJayContext } from '@jay-framework/runtime';
114
278
 
115
- // Define your props and contexts
279
+ // Define your props
116
280
  interface MyComponentProps {}
117
281
 
118
- interface MyContext {
119
- userId: string;
282
+ // Define services (server-side)
283
+ interface DatabaseService {
284
+ getUser(id: string): Promise<User>;
120
285
  }
286
+ const DATABASE_SERVICE = createJayService<DatabaseService>('Database');
121
287
 
122
- const MyContextMarker = createJayContext<MyContext>();
288
+ // Define contexts (client-side)
289
+ interface ThemeContext {
290
+ theme: string;
291
+ }
292
+ const ThemeContextMarker = createJayContext<ThemeContext>();
123
293
 
124
294
  // Create the full-stack component
125
295
  export const myComponent = makeJayStackComponent<MyComponentContract>()
126
296
  .withProps<MyComponentProps>()
127
- .withServerContext(MyContextMarker)
128
- .withSlowlyRender(async (props, myContext) => {
297
+ .withServices(DATABASE_SERVICE)
298
+ .withContexts(ThemeContextMarker)
299
+ .withSlowlyRender(async (props, database) => {
129
300
  // Slow rendering - static data that doesn't change often
301
+ const user = await database.getUser('1');
130
302
  return partialRender(
131
303
  {
132
- id: '1',
133
- name: 'John Doe',
134
- age: 30,
135
- address: '123 Main St, City, State',
304
+ id: user.id,
305
+ name: user.name,
306
+ age: user.age,
307
+ address: user.address,
136
308
  },
137
- { id: '1' }, // Carry forward data to fast render
309
+ { id: user.id }, // Carry forward data to fast render
138
310
  );
139
311
  })
140
- .withFastRender(async (props, myContext) => {
312
+ .withFastRender(async (props, carryForward) => {
141
313
  // Fast rendering - dynamic data that can change
142
314
  return partialRender(
143
315
  {
144
316
  stars: 4.5,
145
317
  rating: 92,
146
318
  },
147
- { id: '1' }, // Carry forward data to interactive
319
+ { id: carryForward.id }, // Carry forward data to interactive
148
320
  );
149
321
  })
150
- .withInteractive((props, refs) => {
151
- // Client-side interactivity
322
+ .withInteractive((props, refs, theme) => {
323
+ // Client-side interactivity with context
152
324
  return {
153
325
  render: () => ({
154
326
  stars: 4.5,
@@ -181,28 +353,42 @@ Full-stack components that are Jay Stack pages use `PageProps` as the props.
181
353
  makeJayStackComponent<MyComponentContract>().withProps<{ userId: string }>();
182
354
  ```
183
355
 
184
- #### `.withServerContext(...contextMarkers)`
356
+ #### `.withServices(...serviceMarkers)`
185
357
 
186
- Adds server-side context markers for dependency injection.
358
+ Adds server-side service markers for dependency injection.
187
359
 
188
360
  ```typescript
189
- makeJayStackComponent<MyComponentContract>().withServerContext(DatabaseContext, AuthContext);
361
+ import { createJayService } from '@jay-framework/fullstack-component';
362
+
363
+ const DATABASE_SERVICE = createJayService<Database>('Database');
364
+ const AUTH_SERVICE = createJayService<AuthService>('Auth');
365
+
366
+ makeJayStackComponent<MyComponentContract>().withServices(DATABASE_SERVICE, AUTH_SERVICE);
190
367
  ```
191
368
 
192
- #### `.withClientContext(...contextMarkers)`
369
+ Services are global singletons registered in `src/jay.init.ts`.
370
+
371
+ #### `.withContexts(...contextMarkers)`
193
372
 
194
373
  Adds client-side context markers for dependency injection.
195
374
 
196
375
  ```typescript
197
- makeJayStackComponent<MyComponentContract>().withClientContext(ThemeContext, UserContext);
376
+ import { createJayContext } from '@jay-framework/runtime';
377
+
378
+ const ThemeContext = createJayContext<Theme>();
379
+ const UserContext = createJayContext<User>();
380
+
381
+ makeJayStackComponent<MyComponentContract>().withContexts(ThemeContext, UserContext);
198
382
  ```
199
383
 
384
+ Contexts are hierarchical and reactive, provided by parent components using `provideContext` or `provideReactiveContext`.
385
+
200
386
  #### `.withLoadParams(loadParams)`
201
387
 
202
388
  Defines how URL parameters are loaded and converted to additional props,
203
389
  on top of the props defined in `withProps`.
204
390
 
205
- The function receives the server contexts declared using `withServerContext`.
391
+ The function receives the services declared using `withServices`.
206
392
 
207
393
  The function should return a generator that yields arrays of a subtype of `UrlParams`.
208
394
 
@@ -211,11 +397,12 @@ interface IdParams extends UrlParams {
211
397
  id: string;
212
398
  }
213
399
 
214
- makeJayStackComponent<MyComponentContract>().withLoadParams(
215
- async function* (contexts): AsyncIterable<IdParams[]> {
216
- yield [{ id: '1' }, { id: '2' }];
217
- },
218
- );
400
+ makeJayStackComponent<MyComponentContract>()
401
+ .withServices(DATABASE_SERVICE)
402
+ .withLoadParams(async function* (database: Database): AsyncIterable<IdParams[]> {
403
+ const items = await database.getAllItems();
404
+ yield items.map((item) => ({ id: item.id }));
405
+ });
219
406
  ```
220
407
 
221
408
  #### `.withSlowlyRender(slowlyRender)`
@@ -225,37 +412,65 @@ Defines the slow rendering function for semi-static data.
225
412
  The function's `props` parameter is a composition of the props from `.withProps`,
226
413
  with the subtype of `UrlParams` if using `.withLoadParams`.
227
414
 
415
+ After props, the function receives the services declared using `withServices`.
416
+
228
417
  The function should return one of:
229
418
 
230
- - `PartialRender<ViewState, CarryForward>` - for partial rendering
419
+ - `PartialRender<SlowViewState, CarryForward>` - for partial rendering
231
420
  - `ServerError5xx` - for server errors
232
421
  - `Redirect3xx` - for semi-static redirects
233
422
 
423
+ **Type Safety:** TypeScript automatically validates that `partialRender` only receives properties from `SlowViewState` (as defined by `phase: slow` in your contract).
424
+
234
425
  ```typescript
235
- makeJayStackComponent<MyComponentContract>().withSlowlyRender(async (props, ...contexts) => {
236
- return partialRender({ someKey: 'value' }, { carryForwardKey: 'data' });
237
- });
426
+ makeJayStackComponent<MyComponentContract>()
427
+ .withServices(DATABASE_SERVICE)
428
+ .withSlowlyRender(async (props, database: Database) => {
429
+ const data = await database.getData();
430
+ return partialRender(
431
+ {
432
+ productName: data.name, // ✅ OK if phase: slow
433
+ // price: data.price, // ❌ TypeScript error if phase: fast
434
+ },
435
+ { carryForwardKey: data.id },
436
+ );
437
+ });
238
438
  ```
239
439
 
240
440
  #### `.withFastRender(fastRender)`
241
441
 
242
442
  Defines the fast rendering function for dynamic data.
243
443
 
244
- The function's `props` parameter is a composition of the props from `.withProps`,
245
- with the subtype of `UrlParams` if using `.withLoadParams`,
246
- with the `carryForward` from `.withSlowlyRender` if used.
444
+ The function's first parameter is `props` - a composition of the props from `.withProps`
445
+ with the subtype of `UrlParams` if using `.withLoadParams`.
446
+
447
+ The second parameter is `carryForward` from `.withSlowlyRender` if used.
448
+
449
+ After that, the function receives the services declared using `withServices`.
247
450
 
248
451
  The function should return one of:
249
452
 
250
- - `PartialRender<ViewState, CarryForward>` - for partial rendering
453
+ - `PartialRender<FastViewState, CarryForward>` - for partial rendering
251
454
  - `ServerError5xx` - for server errors
252
455
  - `ClientError4xx` - for client errors
253
456
  - `Redirect3xx` - for dynamic redirects
254
457
 
458
+ **Type Safety:** TypeScript automatically validates that `partialRender` only receives properties from `FastViewState` (as defined by `phase: fast` in your contract).
459
+
255
460
  ```typescript
256
- makeJayStackComponent<MyComponentContract>().withFastRender(async (props, ...contexts) => {
257
- return partialRender({ anotherKey: 'value' }, { carryForwardKey: 'data' });
258
- });
461
+ makeJayStackComponent<MyComponentContract>()
462
+ .withServices(INVENTORY_SERVICE)
463
+ .withFastRender(async (props, carryForward, inventory: InventoryService) => {
464
+ const status = await inventory.getStatus(carryForward.productId);
465
+ return partialRender(
466
+ {
467
+ inStock: status.available > 0, // ✅ OK if phase: fast
468
+ price: 29.99, // ✅ OK if phase: fast
469
+ // productName: 'Widget', // ❌ TypeScript error if phase: slow
470
+ },
471
+ { carryForwardKey: 'data' },
472
+ );
473
+ });
259
474
  ```
260
475
 
261
476
  #### `.withInteractive(componentConstructor)`
@@ -267,14 +482,18 @@ The function's `props` parameter is a composition of the props from `.withProps`
267
482
  with the subtype of `UrlParams` if using `.withLoadParams`,
268
483
  with the `carryForward` from `.withFastRender` if used.
269
484
 
485
+ After props and refs, the function receives the client-side contexts declared using `withContexts`.
486
+
270
487
  The function is expected to return an object with a reactive `render` function as well as the client component API.
271
488
 
272
489
  ```typescript
273
- makeJayStackComponent<MyComponentContract>().withInteractive((props, refs) => {
274
- return {
275
- render: () => ({ interactiveData: 'value' }),
276
- };
277
- });
490
+ makeJayStackComponent<MyComponentContract>()
491
+ .withContexts(ThemeContext)
492
+ .withInteractive((props, refs, theme: Theme) => {
493
+ return {
494
+ render: () => ({ interactiveData: 'value', currentTheme: theme.current }),
495
+ };
496
+ });
278
497
  ```
279
498
 
280
499
  ## Render Response Builders
@@ -313,6 +532,139 @@ Creates a redirect response.
313
532
  return redirect3xx(301, 'http://some.domain.com');
314
533
  ```
315
534
 
535
+ ## Complete Example with Phase Validation
536
+
537
+ Here's a complete example showing how phase annotations in your contract provide compile-time type safety:
538
+
539
+ ### 1. Define Contract with Phases
540
+
541
+ **`user-profile.jay-html`**:
542
+
543
+ ```html
544
+ <html>
545
+ <head>
546
+ <script type="application/yaml-jay">
547
+ data:
548
+ # Static user info - rendered at build time
549
+ - {tag: userId, dataType: string, phase: slow}
550
+ - {tag: username, dataType: string, phase: slow}
551
+ - {tag: bio, dataType: string, phase: slow}
552
+
553
+ # Dynamic activity - rendered per request
554
+ - {tag: lastSeen, dataType: string, phase: fast}
555
+ - {tag: isOnline, dataType: boolean, phase: fast}
556
+ - {tag: followerCount, dataType: number, phase: fast}
557
+ </script>
558
+ </head>
559
+ <body>
560
+ <div>
561
+ <h1>{username}</h1>
562
+ <p>{bio}</p>
563
+ <p>Followers: {followerCount}</p>
564
+ <span>{isOnline ? 'Online' : 'Last seen: ' + lastSeen}</span>
565
+ </div>
566
+ </body>
567
+ </html>
568
+ ```
569
+
570
+ ### 2. Generated Types
571
+
572
+ **`user-profile.jay-html.d.ts`** (auto-generated):
573
+
574
+ ```typescript
575
+ export interface UserProfileViewState {
576
+ userId: string;
577
+ username: string;
578
+ bio: string;
579
+ lastSeen: string;
580
+ isOnline: boolean;
581
+ followerCount: number;
582
+ }
583
+
584
+ export interface UserProfileElementRefs {}
585
+
586
+ // Phase-specific types - automatically generated
587
+ export type UserProfileSlowViewState = Pick<UserProfileViewState, 'userId' | 'username' | 'bio'>;
588
+ export type UserProfileFastViewState = Pick<
589
+ UserProfileViewState,
590
+ 'lastSeen' | 'isOnline' | 'followerCount'
591
+ >;
592
+ export type UserProfileInteractiveViewState = {};
593
+
594
+ export type UserProfileContract = JayContract<
595
+ UserProfileViewState,
596
+ UserProfileElementRefs,
597
+ UserProfileSlowViewState,
598
+ UserProfileFastViewState,
599
+ UserProfileInteractiveViewState
600
+ >;
601
+ ```
602
+
603
+ ### 3. Implement with Type Safety
604
+
605
+ ```typescript
606
+ import {
607
+ makeJayStackComponent,
608
+ partialRender,
609
+ createJayService,
610
+ } from '@jay-framework/fullstack-component';
611
+ import { UserProfileContract } from './user-profile.jay-html';
612
+
613
+ interface UserDatabase {
614
+ getUser(id: string): Promise<{ id: string; name: string; bio: string }>;
615
+ }
616
+ const USER_DB = createJayService<UserDatabase>('UserDB');
617
+
618
+ interface ActivityService {
619
+ getUserActivity(id: string): Promise<{ lastSeen: string; isOnline: boolean; followers: number }>;
620
+ }
621
+ const ACTIVITY_SERVICE = createJayService<ActivityService>('Activity');
622
+
623
+ export const userProfile = makeJayStackComponent<UserProfileContract>()
624
+ .withProps()
625
+ .withServices(USER_DB, ACTIVITY_SERVICE)
626
+ .withSlowlyRender(async (props, userDb) => {
627
+ // ✅ TypeScript knows only slow properties are allowed
628
+ const user = await userDb.getUser('123');
629
+ return partialRender(
630
+ {
631
+ userId: user.id,
632
+ username: user.name,
633
+ bio: user.bio,
634
+ // followerCount: 100, // ❌ TypeScript Error: Property 'followerCount'
635
+ // does not exist in type 'UserProfileSlowViewState'
636
+ },
637
+ { userId: user.id },
638
+ );
639
+ })
640
+ .withFastRender(async (props, carryForward, userDb, activityService) => {
641
+ // ✅ TypeScript knows only fast properties are allowed
642
+ const activity = await activityService.getUserActivity(carryForward.userId);
643
+ return partialRender(
644
+ {
645
+ lastSeen: activity.lastSeen,
646
+ isOnline: activity.isOnline,
647
+ followerCount: activity.followers,
648
+ // username: 'John', // ❌ TypeScript Error: Property 'username'
649
+ // does not exist in type 'UserProfileFastViewState'
650
+ },
651
+ {},
652
+ );
653
+ })
654
+ .withInteractive((props, refs) => {
655
+ return {
656
+ render: () => ({}),
657
+ };
658
+ });
659
+ ```
660
+
661
+ **Key Benefits:**
662
+
663
+ - 🔒 **Compile-time guarantees**: TypeScript prevents phase violations before deployment
664
+ - 📊 **Clear separation**: Slow (static) data is visually separated from fast (dynamic) data
665
+ - ⚡ **Optimal performance**: Framework can cache slow data aggressively
666
+ - 🧹 **No boilerplate**: No manual type annotations needed in render functions
667
+
316
668
  ## Advanced Examples
317
669
 
318
670
  ### A Product Page with URL Parameters
@@ -323,11 +675,12 @@ import {
323
675
  PageProps,
324
676
  partialRender,
325
677
  UrlParams,
678
+ createJayService,
326
679
  } from '@jay-framework/fullstack-component';
327
680
  import { render, PageElementRefs } from './page.jay-html';
328
681
  import { Props } from '@jay-framework/component';
329
- import { getProductBySlug, getProducts } from '../../../products-database';
330
- import { getAvailableUnits } from '../../../inventory-service';
682
+ import { PRODUCTS_DATABASE_SERVICE, ProductsDatabase } from '../../../services/products-database';
683
+ import { INVENTORY_SERVICE, InventoryService } from '../../../services/inventory';
331
684
 
332
685
  interface ProductPageParams extends UrlParams {
333
686
  slug: string;
@@ -342,23 +695,30 @@ interface ProductAndInventoryCarryForward {
342
695
  inStock: boolean;
343
696
  }
344
697
 
345
- async function* urlLoader(): AsyncIterable<ProductPageParams[]> {
346
- const products = await getProducts();
698
+ async function* urlLoader(productsDb: ProductsDatabase): AsyncIterable<ProductPageParams[]> {
699
+ const products = await productsDb.getAllProducts();
347
700
  yield products.map(({ slug }) => ({ slug }));
348
701
  }
349
702
 
350
- async function renderSlowlyChanging(props: PageProps & ProductPageParams) {
351
- const { name, sku, price, id } = await getProductBySlug(props.slug);
703
+ async function renderSlowlyChanging(
704
+ props: PageProps & ProductPageParams,
705
+ productsDb: ProductsDatabase,
706
+ ) {
707
+ const { name, sku, price, id } = await productsDb.getProductBySlug(props.slug);
352
708
  return partialRender({ name, sku, price, id }, { productId: id });
353
709
  }
354
710
 
355
- async function renderFastChanging(props: PageProps & ProductPageParams & ProductsCarryForward) {
356
- const availableProducts = await getAvailableUnits(props.productId);
711
+ async function renderFastChanging(
712
+ props: PageProps & ProductPageParams,
713
+ carryForward: ProductsCarryForward,
714
+ inventory: InventoryService,
715
+ ) {
716
+ const availableProducts = await inventory.getAvailableUnits(carryForward.productId);
357
717
  const inStock = availableProducts > 0;
358
718
  return partialRender(
359
719
  { inStock },
360
720
  {
361
- productId: props.productId,
721
+ productId: carryForward.productId,
362
722
  inStock,
363
723
  },
364
724
  );
@@ -375,6 +735,7 @@ function ProductsPageConstructor(
375
735
 
376
736
  export const page = makeJayStackComponent<typeof render>()
377
737
  .withProps<PageProps>()
738
+ .withServices(PRODUCTS_DATABASE_SERVICE, INVENTORY_SERVICE)
378
739
  .withLoadParams(urlLoader)
379
740
  .withSlowlyRender(renderSlowlyChanging)
380
741
  .withFastRender(renderFastChanging)
package/dist/index.d.ts CHANGED
@@ -1,7 +1,35 @@
1
1
  import { JayComponentCore, ContextMarkers, ComponentConstructor } from '@jay-framework/component';
2
- import { JayContract, ExtractViewState, ExtractRefs } from '@jay-framework/runtime';
2
+ import { JayContract, ExtractRefs, ExtractSlowViewState, ExtractFastViewState, ExtractInteractiveViewState } from '@jay-framework/runtime';
3
+ export { ExtractFastViewState, ExtractInteractiveViewState, ExtractRefs, ExtractSlowViewState, ExtractViewState, JayContract } from '@jay-framework/runtime';
3
4
  import { Getter, Setter } from '@jay-framework/reactive';
4
5
 
6
+ /**
7
+ * A type-safe marker for identifying a service.
8
+ * Similar to ContextMarker but for server-side services.
9
+ */
10
+ interface ServiceMarker<ServiceType> {
11
+ }
12
+ /**
13
+ * Creates a service marker used to register and retrieve services.
14
+ *
15
+ * @param name - Optional name for the service (used in error messages)
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * export interface DatabaseService {
20
+ * query<T>(sql: string): Promise<T[]>;
21
+ * }
22
+ *
23
+ * export const DATABASE_SERVICE = createJayService<DatabaseService>('DatabaseService');
24
+ * ```
25
+ */
26
+ declare function createJayService<ServiceType = unknown>(name?: string): ServiceMarker<ServiceType>;
27
+ /**
28
+ * Type helper for extracting service types from an array of markers.
29
+ */
30
+ type ServiceMarkers<T extends any[]> = {
31
+ [K in keyof T]: ServiceMarker<T[K]>;
32
+ };
5
33
  interface PageProps {
6
34
  language: string;
7
35
  url: string;
@@ -22,190 +50,113 @@ interface Redirect3xx {
22
50
  }
23
51
  interface PartialRender<ViewState extends object, CarryForward> {
24
52
  kind: 'PartialRender';
25
- rendered: Partial<ViewState>;
53
+ rendered: ViewState;
26
54
  carryForward: CarryForward;
27
55
  }
28
56
  type SlowlyRenderResult<ViewState extends object, CarryForward> = PartialRender<ViewState, CarryForward> | ServerError5xx | ClientError4xx | Redirect3xx;
29
57
  type AnySlowlyRenderResult = SlowlyRenderResult<object, object>;
30
58
  type FastRenderResult<ViewState extends object, CarryForward> = PartialRender<ViewState, CarryForward> | ServerError5xx | ClientError4xx | Redirect3xx;
31
59
  type AnyFastRenderResult = FastRenderResult<object, object>;
32
- type LoadParams<ServerContexts, Params extends UrlParams> = (contexts: ServerContexts) => AsyncIterable<Params[]>;
33
- type RenderSlowly<ServerContexts extends Array<object>, PropsT extends object, StaticViewState extends object, SlowlyCarryForward> = (props: PropsT, ...contexts: ServerContexts) => Promise<SlowlyRenderResult<StaticViewState, SlowlyCarryForward>>;
34
- type RenderFast<ServerContexts extends Array<object>, PropsT extends object, DynamicViewState extends object, FastCarryForward> = (props: PropsT, ...contexts: ServerContexts) => Promise<FastRenderResult<DynamicViewState, FastCarryForward>>;
35
- interface JayStackComponentDefinition<StaticViewState extends object, ViewState extends object, Refs extends object, ServerContexts extends Array<any>, ClientContexts extends Array<any>, PropsT extends object, Params extends UrlParams, CompCore extends JayComponentCore<PropsT, ViewState>> {
36
- serverContexts: ContextMarkers<ServerContexts>;
37
- clientContexts: ContextMarkers<ClientContexts>;
38
- loadParams: LoadParams<ServerContexts, Params>;
39
- slowlyRender: RenderSlowly<ServerContexts, PropsT, StaticViewState, any>;
40
- fastRender: RenderFast<ServerContexts, PropsT, ViewState, any>;
41
- comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>;
60
+ type LoadParams<Services, Params extends UrlParams> = (contexts: Services) => AsyncIterable<Params[]>;
61
+ type RenderSlowly<Services extends Array<object>, PropsT extends object, SlowViewState extends object, SlowlyCarryForward> = (props: PropsT, ...services: Services) => Promise<SlowlyRenderResult<SlowViewState, SlowlyCarryForward>>;
62
+ type RenderFast<Services extends Array<object>, PropsT extends object, FastViewState extends object, FastCarryForward> = (props: PropsT, ...services: Services) => Promise<FastRenderResult<FastViewState, FastCarryForward>>;
63
+ interface JayStackComponentDefinition<Refs extends object, SlowVS extends object, FastVS extends object, InteractiveVS extends object, Services extends Array<any>, Contexts extends Array<any>, PropsT extends object, Params extends UrlParams, CompCore extends JayComponentCore<PropsT, InteractiveVS>> {
64
+ services: ServiceMarkers<Services>;
65
+ contexts: ContextMarkers<Contexts>;
66
+ loadParams: LoadParams<Services, Params>;
67
+ slowlyRender: RenderSlowly<Services, PropsT, SlowVS, any>;
68
+ fastRender: RenderFast<Services, PropsT, FastVS, any>;
69
+ comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>;
42
70
  }
43
- type AnyJayStackComponentDefinition = JayStackComponentDefinition<object, object, object, object[], object[], object, UrlParams, any>;
71
+ type AnyJayStackComponentDefinition = JayStackComponentDefinition<object, object, object, object, object[], object[], object, UrlParams, any>;
44
72
 
45
73
  declare function serverError5xx(status: number): ServerError5xx;
46
74
  declare function clientError4xx(status: number): ClientError4xx;
47
75
  declare function notFound(): ClientError4xx;
48
76
  declare function redirect3xx(status: number, location: string): Redirect3xx;
49
- declare function partialRender<ViewState extends object, CarryForward>(rendered: Partial<ViewState>, carryForward: CarryForward): PartialRender<ViewState, CarryForward>;
77
+ declare function partialRender<ViewState extends object, CarryForward>(rendered: ViewState, carryForward: CarryForward): PartialRender<ViewState, CarryForward>;
50
78
 
51
- type BuilderStates = 'Props' | 'ServerContexts' | 'ClientContexts' | 'UrlLoader' | 'SlowlyRender' | 'FastRender' | 'InteractiveRender' | 'Done';
79
+ type BuilderStates = 'Props' | 'Services' | 'Contexts' | 'UrlLoader' | 'SlowlyRender' | 'FastRender' | 'InteractiveRender' | 'Done';
52
80
  type Signals<T extends object> = {
53
81
  [K in keyof T]: K extends string ? [Getter<T[K]>, Setter<T[K]>] : T[K];
54
82
  };
55
- type Builder<State extends BuilderStates, StaticViewState extends object, ViewState extends object, Refs extends object, ServerContexts extends Array<any>, ClientContexts extends Array<any>, PropsT extends object, Params extends UrlParams, CompCore extends JayComponentCore<PropsT, ViewState>> = State extends 'Props' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
56
- withProps<NewPropsT extends object>(): Builder<'ServerContexts', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, NewPropsT, Params, JayComponentCore<NewPropsT, ViewState>>;
57
- } : State extends 'ServerContexts' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
58
- withServerContext<NewServerContexts extends Array<any>>(...contextMarkers: ContextMarkers<NewServerContexts>): Builder<'ClientContexts', StaticViewState, ViewState, Refs, NewServerContexts, ClientContexts, PropsT, Params, CompCore>;
59
- withClientContext<NewClientContexts extends Array<any>>(...contextMarkers: ContextMarkers<NewClientContexts>): Builder<'UrlLoader', StaticViewState, ViewState, Refs, ServerContexts, NewClientContexts, PropsT, Params, CompCore>;
60
- withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<ServerContexts, NewParams>): Builder<'SlowlyRender', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT & NewParams, NewParams, CompCore>;
61
- withSlowlyRender<NewStaticViewState extends Partial<ViewState>, NewCarryForward extends object>(slowlyRender: RenderSlowly<ServerContexts, PropsT, NewStaticViewState, NewCarryForward>): Builder<'FastRender', NewStaticViewState, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>, Refs, [
83
+ type Builder<State extends BuilderStates, Refs extends object, SlowVS extends object, FastVS extends object, InteractiveVS extends object, Services extends Array<any>, Contexts extends Array<any>, PropsT extends object, Params extends UrlParams, CompCore extends JayComponentCore<PropsT, InteractiveVS>> = State extends 'Props' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
84
+ withProps<NewPropsT extends object>(): Builder<'Services', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, NewPropsT, Params, JayComponentCore<NewPropsT, InteractiveVS>>;
85
+ } : State extends 'Services' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
86
+ withServices<NewServices extends Array<any>>(...serviceMarkers: ServiceMarkers<NewServices>): Builder<'Contexts', Refs, SlowVS, FastVS, InteractiveVS, NewServices, Contexts, PropsT, Params, CompCore>;
87
+ withContexts<NewContexts extends Array<any>>(...contextMarkers: ContextMarkers<NewContexts>): Builder<'UrlLoader', Refs, SlowVS, FastVS, InteractiveVS, Services, NewContexts, PropsT, Params, CompCore>;
88
+ withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<Services, NewParams>): Builder<'SlowlyRender', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT & NewParams, NewParams, CompCore>;
89
+ withSlowlyRender<NewCarryForward extends object>(slowlyRender: RenderSlowly<Services, PropsT, SlowVS, NewCarryForward>): Builder<'FastRender', Refs, SlowVS, FastVS, InteractiveVS, [
62
90
  NewCarryForward,
63
- ...ServerContexts
64
- ], ClientContexts, PropsT, Params, JayComponentCore<PropsT, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>>>;
65
- withFastRender<NewCarryForward extends object>(fastRender: RenderFast<ServerContexts, PropsT, ViewState, NewCarryForward>): Builder<'InteractiveRender', StaticViewState, Partial<ViewState>, Refs, ServerContexts, [
91
+ ...Services
92
+ ], Contexts, PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
93
+ withFastRender<NewCarryForward extends object>(fastRender: RenderFast<Services, PropsT, FastVS, NewCarryForward>): Builder<'InteractiveRender', Refs, SlowVS, FastVS, InteractiveVS, Services, [
66
94
  Signals<NewCarryForward>,
67
- ...ClientContexts
68
- ], PropsT, Params, JayComponentCore<PropsT, Partial<ViewState>>>;
69
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
70
- } : State extends 'ClientContexts' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
71
- withClientContext<NewClientContexts extends Array<any>>(...contextMarkers: ContextMarkers<NewClientContexts>): Builder<'UrlLoader', StaticViewState, ViewState, Refs, ServerContexts, NewClientContexts, PropsT, Params, CompCore>;
72
- withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<ServerContexts, NewParams>): Builder<'SlowlyRender', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT & NewParams, NewParams, CompCore>;
73
- withSlowlyRender<NewStaticViewState extends Partial<ViewState>, NewCarryForward extends object>(slowlyRender: RenderSlowly<ServerContexts, PropsT, NewStaticViewState, NewCarryForward>): Builder<'FastRender', NewStaticViewState, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>, Refs, [
95
+ ...Contexts
96
+ ], PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
97
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
98
+ } : State extends 'Contexts' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
99
+ withContexts<NewContexts extends Array<any>>(...contextMarkers: ContextMarkers<NewContexts>): Builder<'UrlLoader', Refs, SlowVS, FastVS, InteractiveVS, Services, NewContexts, PropsT, Params, CompCore>;
100
+ withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<Services, NewParams>): Builder<'SlowlyRender', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT & NewParams, NewParams, CompCore>;
101
+ withSlowlyRender<NewCarryForward extends object>(slowlyRender: RenderSlowly<Services, PropsT, SlowVS, NewCarryForward>): Builder<'FastRender', Refs, SlowVS, FastVS, InteractiveVS, [
74
102
  NewCarryForward,
75
- ...ServerContexts
76
- ], ClientContexts, PropsT, Params, JayComponentCore<PropsT, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>>>;
77
- withFastRender<NewCarryForward extends object>(fastRender: RenderFast<ServerContexts, PropsT, ViewState, NewCarryForward>): Builder<'InteractiveRender', StaticViewState, Partial<ViewState>, Refs, ServerContexts, [
103
+ ...Services
104
+ ], Contexts, PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
105
+ withFastRender<NewCarryForward extends object>(fastRender: RenderFast<Services, PropsT, FastVS, NewCarryForward>): Builder<'InteractiveRender', Refs, SlowVS, FastVS, InteractiveVS, Services, [
78
106
  Signals<NewCarryForward>,
79
- ...ClientContexts
80
- ], PropsT, Params, JayComponentCore<PropsT, Partial<ViewState>>>;
81
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
82
- } : State extends 'UrlLoader' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
83
- withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<ServerContexts, NewParams>): Builder<'SlowlyRender', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT & NewParams, NewParams, CompCore>;
84
- withSlowlyRender<NewStaticViewState extends Partial<ViewState>, NewCarryForward extends object>(slowlyRender: RenderSlowly<ServerContexts, PropsT, NewStaticViewState, NewCarryForward>): Builder<'FastRender', NewStaticViewState, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>, Refs, [
107
+ ...Contexts
108
+ ], PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
109
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
110
+ } : State extends 'UrlLoader' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
111
+ withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<Services, NewParams>): Builder<'SlowlyRender', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT & NewParams, NewParams, CompCore>;
112
+ withSlowlyRender<NewCarryForward extends object>(slowlyRender: RenderSlowly<Services, PropsT, SlowVS, NewCarryForward>): Builder<'FastRender', Refs, SlowVS, FastVS, InteractiveVS, [
85
113
  NewCarryForward,
86
- ...ServerContexts
87
- ], ClientContexts, PropsT, Params, JayComponentCore<PropsT, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>>>;
88
- withFastRender<NewCarryForward extends object>(fastRender: RenderFast<ServerContexts, PropsT, ViewState, NewCarryForward>): Builder<'InteractiveRender', StaticViewState, Partial<ViewState>, Refs, ServerContexts, [
114
+ ...Services
115
+ ], Contexts, PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
116
+ withFastRender<NewCarryForward extends object>(fastRender: RenderFast<Services, PropsT, FastVS, NewCarryForward>): Builder<'InteractiveRender', Refs, SlowVS, FastVS, InteractiveVS, Services, [
89
117
  Signals<NewCarryForward>,
90
- ...ClientContexts
91
- ], PropsT, Params, JayComponentCore<PropsT, Partial<ViewState>>>;
92
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
93
- } : State extends 'SlowlyRender' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
94
- withSlowlyRender<NewStaticViewState extends Partial<ViewState>, NewCarryForward extends object>(slowlyRender: RenderSlowly<ServerContexts, PropsT, NewStaticViewState, NewCarryForward>): Builder<'FastRender', NewStaticViewState, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>, Refs, [
118
+ ...Contexts
119
+ ], PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
120
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
121
+ } : State extends 'SlowlyRender' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
122
+ withSlowlyRender<NewCarryForward extends object>(slowlyRender: RenderSlowly<Services, PropsT, SlowVS, NewCarryForward>): Builder<'FastRender', Refs, SlowVS, FastVS, InteractiveVS, [
95
123
  NewCarryForward,
96
- ...ServerContexts
97
- ], ClientContexts, PropsT, Params, JayComponentCore<PropsT, Partial<ViewState> & Omit<ViewState, keyof NewStaticViewState>>>;
98
- withFastRender<NewCarryForward extends object>(fastRender: RenderFast<ServerContexts, PropsT, ViewState, NewCarryForward>): Builder<'InteractiveRender', StaticViewState, Partial<ViewState>, Refs, ServerContexts, [
124
+ ...Services
125
+ ], Contexts, PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
126
+ withFastRender<NewCarryForward extends object>(fastRender: RenderFast<Services, PropsT, FastVS, NewCarryForward>): Builder<'InteractiveRender', Refs, SlowVS, FastVS, InteractiveVS, Services, [
99
127
  Signals<NewCarryForward>,
100
- ...ClientContexts
101
- ], PropsT, Params, JayComponentCore<PropsT, Partial<ViewState>>>;
102
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
103
- } : State extends 'FastRender' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
104
- withFastRender<NewCarryForward extends object>(fastRender: RenderFast<ServerContexts, PropsT, ViewState, NewCarryForward>): Builder<'InteractiveRender', StaticViewState, Partial<ViewState>, Refs, ServerContexts, [
128
+ ...Contexts
129
+ ], PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
130
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
131
+ } : State extends 'FastRender' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
132
+ withFastRender<NewCarryForward extends object>(fastRender: RenderFast<Services, PropsT, FastVS, NewCarryForward>): Builder<'InteractiveRender', Refs, SlowVS, FastVS, InteractiveVS, Services, [
105
133
  Signals<NewCarryForward>,
106
- ...ClientContexts
107
- ], PropsT, Params, JayComponentCore<PropsT, Partial<ViewState>>>;
108
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
109
- } : State extends 'InteractiveRender' ? JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore> & {
110
- withInteractive(comp: ComponentConstructor<PropsT, Refs, ViewState, ClientContexts, CompCore>): Builder<'Done', StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
111
- } : JayStackComponentDefinition<StaticViewState, ViewState, Refs, ServerContexts, ClientContexts, PropsT, Params, CompCore>;
112
- declare function makeJayStackComponent<Render extends JayContract<any, any>>(): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], [], {}, {}, JayComponentCore<object, ExtractViewState<Render>>> & {
113
- withProps<NewPropsT extends object>(): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], [], NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
114
- withServerContext<NewServerContexts extends any[]>(...contextMarkers: ContextMarkers<NewServerContexts>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, [], NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
115
- withClientContext<NewClientContexts extends any[]>(...contextMarkers: ContextMarkers<NewClientContexts>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, NewClientContexts, NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
116
- withLoadParams<NewParams extends UrlParams>(loadParams: LoadParams<NewServerContexts, NewParams>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, NewClientContexts, NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
117
- withSlowlyRender<NewStaticViewState extends Partial<ExtractViewState<Render>>, NewCarryForward extends object>(slowlyRender: RenderSlowly<NewServerContexts, NewPropsT & NewParams, NewStaticViewState, NewCarryForward>): JayStackComponentDefinition<NewStaticViewState, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>, ExtractRefs<Render>, [NewCarryForward, ...NewServerContexts], NewClientContexts, NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>> & {
118
- withFastRender<NewCarryForward_1 extends object>(fastRender: RenderFast<[NewCarryForward, ...NewServerContexts], NewPropsT & NewParams, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>, NewCarryForward_1>): JayStackComponentDefinition<NewStaticViewState, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>, ExtractRefs<Render>, [NewCarryForward, ...NewServerContexts], [Signals<NewCarryForward_1>, ...NewClientContexts], NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>>> & {
119
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>, [Signals<NewCarryForward_1>, ...NewClientContexts], JayComponentCore<NewPropsT & NewParams, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>>>): JayStackComponentDefinition<NewStaticViewState, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>, ExtractRefs<Render>, [NewCarryForward, ...NewServerContexts], [Signals<NewCarryForward_1>, ...NewClientContexts], NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>>>;
120
- };
121
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>, NewClientContexts, JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>>): JayStackComponentDefinition<NewStaticViewState, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>, ExtractRefs<Render>, [NewCarryForward, ...NewServerContexts], NewClientContexts, NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState>>>;
122
- };
123
- withFastRender<NewCarryForward_2 extends object>(fastRender: RenderFast<NewServerContexts, NewPropsT & NewParams, ExtractViewState<Render>, NewCarryForward_2>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_2>, ...NewClientContexts], NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>>>> & {
124
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_2>, ...NewClientContexts], JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_2>, ...NewClientContexts], NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT & NewParams, Partial<ExtractViewState<Render>>>>;
125
- };
126
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams, ExtractRefs<Render>, ExtractViewState<Render>, NewClientContexts, JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, NewClientContexts, NewPropsT & NewParams, NewParams, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
127
- };
128
- withSlowlyRender<NewStaticViewState_1 extends Partial<ExtractViewState<Render>>, NewCarryForward_3 extends object>(slowlyRender: RenderSlowly<NewServerContexts, NewPropsT, NewStaticViewState_1, NewCarryForward_3>): JayStackComponentDefinition<NewStaticViewState_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>, ExtractRefs<Render>, [NewCarryForward_3, ...NewServerContexts], NewClientContexts, NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>> & {
129
- withFastRender<NewCarryForward_4 extends object>(fastRender: RenderFast<[NewCarryForward_3, ...NewServerContexts], NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>, NewCarryForward_4>): JayStackComponentDefinition<NewStaticViewState_1, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>, ExtractRefs<Render>, [NewCarryForward_3, ...NewServerContexts], [Signals<NewCarryForward_4>, ...NewClientContexts], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>>> & {
130
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>, [Signals<NewCarryForward_4>, ...NewClientContexts], JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>>>): JayStackComponentDefinition<NewStaticViewState_1, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>, ExtractRefs<Render>, [NewCarryForward_3, ...NewServerContexts], [Signals<NewCarryForward_4>, ...NewClientContexts], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>>>;
131
- };
132
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>, NewClientContexts, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>>): JayStackComponentDefinition<NewStaticViewState_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>, ExtractRefs<Render>, [NewCarryForward_3, ...NewServerContexts], NewClientContexts, NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_1>>>;
133
- };
134
- withFastRender<NewCarryForward_5 extends object>(fastRender: RenderFast<NewServerContexts, NewPropsT, ExtractViewState<Render>, NewCarryForward_5>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_5>, ...NewClientContexts], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>> & {
135
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_5>, ...NewClientContexts], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_5>, ...NewClientContexts], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>;
136
- };
137
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, ExtractViewState<Render>, NewClientContexts, JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, NewClientContexts, NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
138
- };
139
- withLoadParams<NewParams_1 extends UrlParams>(loadParams: LoadParams<NewServerContexts, NewParams_1>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, [], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
140
- withSlowlyRender<NewStaticViewState_2 extends Partial<ExtractViewState<Render>>, NewCarryForward_6 extends object>(slowlyRender: RenderSlowly<NewServerContexts, NewPropsT & NewParams_1, NewStaticViewState_2, NewCarryForward_6>): JayStackComponentDefinition<NewStaticViewState_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>, ExtractRefs<Render>, [NewCarryForward_6, ...NewServerContexts], [], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>> & {
141
- withFastRender<NewCarryForward_7 extends object>(fastRender: RenderFast<[NewCarryForward_6, ...NewServerContexts], NewPropsT & NewParams_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>, NewCarryForward_7>): JayStackComponentDefinition<NewStaticViewState_2, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>, ExtractRefs<Render>, [NewCarryForward_6, ...NewServerContexts], [Signals<NewCarryForward_7>], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>>> & {
142
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_1, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>, [Signals<NewCarryForward_7>], JayComponentCore<NewPropsT & NewParams_1, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>>>): JayStackComponentDefinition<NewStaticViewState_2, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>, ExtractRefs<Render>, [NewCarryForward_6, ...NewServerContexts], [Signals<NewCarryForward_7>], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>>>;
143
- };
144
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_1, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>, [], JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>>): JayStackComponentDefinition<NewStaticViewState_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>, ExtractRefs<Render>, [NewCarryForward_6, ...NewServerContexts], [], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_2>>>;
145
- };
146
- withFastRender<NewCarryForward_8 extends object>(fastRender: RenderFast<NewServerContexts, NewPropsT & NewParams_1, ExtractViewState<Render>, NewCarryForward_8>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_8>], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>>>> & {
147
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_1, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_8>], JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_8>], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT & NewParams_1, Partial<ExtractViewState<Render>>>>;
148
- };
149
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_1, ExtractRefs<Render>, ExtractViewState<Render>, [], JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, [], NewPropsT & NewParams_1, NewParams_1, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
150
- };
151
- withSlowlyRender<NewStaticViewState_3 extends Partial<ExtractViewState<Render>>, NewCarryForward_9 extends object>(slowlyRender: RenderSlowly<NewServerContexts, NewPropsT, NewStaticViewState_3, NewCarryForward_9>): JayStackComponentDefinition<NewStaticViewState_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>, ExtractRefs<Render>, [NewCarryForward_9, ...NewServerContexts], [], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>> & {
152
- withFastRender<NewCarryForward_10 extends object>(fastRender: RenderFast<[NewCarryForward_9, ...NewServerContexts], NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>, NewCarryForward_10>): JayStackComponentDefinition<NewStaticViewState_3, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>, ExtractRefs<Render>, [NewCarryForward_9, ...NewServerContexts], [Signals<NewCarryForward_10>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>>> & {
153
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>, [Signals<NewCarryForward_10>], JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>>>): JayStackComponentDefinition<NewStaticViewState_3, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>, ExtractRefs<Render>, [NewCarryForward_9, ...NewServerContexts], [Signals<NewCarryForward_10>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>>>;
154
- };
155
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>, [], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>>): JayStackComponentDefinition<NewStaticViewState_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>, ExtractRefs<Render>, [NewCarryForward_9, ...NewServerContexts], [], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_3>>>;
156
- };
157
- withFastRender<NewCarryForward_11 extends object>(fastRender: RenderFast<NewServerContexts, NewPropsT, ExtractViewState<Render>, NewCarryForward_11>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_11>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>> & {
158
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_11>], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, NewServerContexts, [Signals<NewCarryForward_11>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>;
159
- };
160
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, ExtractViewState<Render>, [], JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, NewServerContexts, [], NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
161
- };
162
- withClientContext<NewClientContexts_1 extends any[]>(...contextMarkers: ContextMarkers<NewClientContexts_1>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], NewClientContexts_1, NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
163
- withLoadParams<NewParams_2 extends UrlParams>(loadParams: LoadParams<[], NewParams_2>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], NewClientContexts_1, NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
164
- withSlowlyRender<NewStaticViewState_4 extends Partial<ExtractViewState<Render>>, NewCarryForward_12 extends object>(slowlyRender: RenderSlowly<[], NewPropsT & NewParams_2, NewStaticViewState_4, NewCarryForward_12>): JayStackComponentDefinition<NewStaticViewState_4, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>, ExtractRefs<Render>, [NewCarryForward_12], NewClientContexts_1, NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>> & {
165
- withFastRender<NewCarryForward_13 extends object>(fastRender: RenderFast<[NewCarryForward_12], NewPropsT & NewParams_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>, NewCarryForward_13>): JayStackComponentDefinition<NewStaticViewState_4, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>, ExtractRefs<Render>, [NewCarryForward_12], [Signals<NewCarryForward_13>, ...NewClientContexts_1], NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>>> & {
166
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_2, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>, [Signals<NewCarryForward_13>, ...NewClientContexts_1], JayComponentCore<NewPropsT & NewParams_2, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>>>): JayStackComponentDefinition<NewStaticViewState_4, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>, ExtractRefs<Render>, [NewCarryForward_12], [Signals<NewCarryForward_13>, ...NewClientContexts_1], NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>>>;
167
- };
168
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_2, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>, NewClientContexts_1, JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>>): JayStackComponentDefinition<NewStaticViewState_4, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>, ExtractRefs<Render>, [NewCarryForward_12], NewClientContexts_1, NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_4>>>;
169
- };
170
- withFastRender<NewCarryForward_14 extends object>(fastRender: RenderFast<[], NewPropsT & NewParams_2, ExtractViewState<Render>, NewCarryForward_14>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_14>, ...NewClientContexts_1], NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>>>> & {
171
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_2, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_14>, ...NewClientContexts_1], JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_14>, ...NewClientContexts_1], NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT & NewParams_2, Partial<ExtractViewState<Render>>>>;
172
- };
173
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_2, ExtractRefs<Render>, ExtractViewState<Render>, NewClientContexts_1, JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], NewClientContexts_1, NewPropsT & NewParams_2, NewParams_2, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
174
- };
175
- withSlowlyRender<NewStaticViewState_5 extends Partial<ExtractViewState<Render>>, NewCarryForward_15 extends object>(slowlyRender: RenderSlowly<[], NewPropsT, NewStaticViewState_5, NewCarryForward_15>): JayStackComponentDefinition<NewStaticViewState_5, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>, ExtractRefs<Render>, [NewCarryForward_15], NewClientContexts_1, NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>> & {
176
- withFastRender<NewCarryForward_16 extends object>(fastRender: RenderFast<[NewCarryForward_15], NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>, NewCarryForward_16>): JayStackComponentDefinition<NewStaticViewState_5, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>, ExtractRefs<Render>, [NewCarryForward_15], [Signals<NewCarryForward_16>, ...NewClientContexts_1], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>>> & {
177
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>, [Signals<NewCarryForward_16>, ...NewClientContexts_1], JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>>>): JayStackComponentDefinition<NewStaticViewState_5, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>, ExtractRefs<Render>, [NewCarryForward_15], [Signals<NewCarryForward_16>, ...NewClientContexts_1], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>>>;
178
- };
179
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>, NewClientContexts_1, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>>): JayStackComponentDefinition<NewStaticViewState_5, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>, ExtractRefs<Render>, [NewCarryForward_15], NewClientContexts_1, NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_5>>>;
180
- };
181
- withFastRender<NewCarryForward_17 extends object>(fastRender: RenderFast<[], NewPropsT, ExtractViewState<Render>, NewCarryForward_17>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_17>, ...NewClientContexts_1], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>> & {
182
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_17>, ...NewClientContexts_1], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_17>, ...NewClientContexts_1], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>;
183
- };
184
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, ExtractViewState<Render>, NewClientContexts_1, JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], NewClientContexts_1, NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
185
- };
186
- withLoadParams<NewParams_3 extends UrlParams>(loadParams: LoadParams<[], NewParams_3>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], [], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT, ExtractViewState<Render>>> & {
187
- withSlowlyRender<NewStaticViewState_6 extends Partial<ExtractViewState<Render>>, NewCarryForward_18 extends object>(slowlyRender: RenderSlowly<[], NewPropsT & NewParams_3, NewStaticViewState_6, NewCarryForward_18>): JayStackComponentDefinition<NewStaticViewState_6, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>, ExtractRefs<Render>, [NewCarryForward_18], [], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>> & {
188
- withFastRender<NewCarryForward_19 extends object>(fastRender: RenderFast<[NewCarryForward_18], NewPropsT & NewParams_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>, NewCarryForward_19>): JayStackComponentDefinition<NewStaticViewState_6, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>, ExtractRefs<Render>, [NewCarryForward_18], [Signals<NewCarryForward_19>], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>>> & {
189
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_3, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>, [Signals<NewCarryForward_19>], JayComponentCore<NewPropsT & NewParams_3, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>>>): JayStackComponentDefinition<NewStaticViewState_6, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>, ExtractRefs<Render>, [NewCarryForward_18], [Signals<NewCarryForward_19>], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>>>;
190
- };
191
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_3, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>, [], JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>>): JayStackComponentDefinition<NewStaticViewState_6, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>, ExtractRefs<Render>, [NewCarryForward_18], [], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_6>>>;
192
- };
193
- withFastRender<NewCarryForward_20 extends object>(fastRender: RenderFast<[], NewPropsT & NewParams_3, ExtractViewState<Render>, NewCarryForward_20>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_20>], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>>>> & {
194
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_3, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_20>], JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_20>], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT & NewParams_3, Partial<ExtractViewState<Render>>>>;
195
- };
196
- withInteractive(comp: ComponentConstructor<NewPropsT & NewParams_3, ExtractRefs<Render>, ExtractViewState<Render>, [], JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], [], NewPropsT & NewParams_3, NewParams_3, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
197
- };
198
- withSlowlyRender<NewStaticViewState_7 extends Partial<ExtractViewState<Render>>, NewCarryForward_21 extends object>(slowlyRender: RenderSlowly<[], NewPropsT, NewStaticViewState_7, NewCarryForward_21>): JayStackComponentDefinition<NewStaticViewState_7, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>, ExtractRefs<Render>, [NewCarryForward_21], [], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>> & {
199
- withFastRender<NewCarryForward_22 extends object>(fastRender: RenderFast<[NewCarryForward_21], NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>, NewCarryForward_22>): JayStackComponentDefinition<NewStaticViewState_7, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>, ExtractRefs<Render>, [NewCarryForward_21], [Signals<NewCarryForward_22>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>>> & {
200
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>, [Signals<NewCarryForward_22>], JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>>>): JayStackComponentDefinition<NewStaticViewState_7, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>, ExtractRefs<Render>, [NewCarryForward_21], [Signals<NewCarryForward_22>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>>>;
201
- };
202
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>, [], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>>): JayStackComponentDefinition<NewStaticViewState_7, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>, ExtractRefs<Render>, [NewCarryForward_21], [], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>> & Omit<ExtractViewState<Render>, keyof NewStaticViewState_7>>>;
203
- };
204
- withFastRender<NewCarryForward_23 extends object>(fastRender: RenderFast<[], NewPropsT, ExtractViewState<Render>, NewCarryForward_23>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_23>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>> & {
205
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, Partial<ExtractViewState<Render>>, [Signals<NewCarryForward_23>], JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>): JayStackComponentDefinition<object, Partial<ExtractViewState<Render>>, ExtractRefs<Render>, [], [Signals<NewCarryForward_23>], NewPropsT, {}, JayComponentCore<NewPropsT, Partial<ExtractViewState<Render>>>>;
206
- };
207
- withInteractive(comp: ComponentConstructor<NewPropsT, ExtractRefs<Render>, ExtractViewState<Render>, [], JayComponentCore<NewPropsT, ExtractViewState<Render>>>): JayStackComponentDefinition<object, ExtractViewState<Render>, ExtractRefs<Render>, [], [], NewPropsT, {}, JayComponentCore<NewPropsT, ExtractViewState<Render>>>;
208
- };
209
- };
134
+ ...Contexts
135
+ ], PropsT, Params, JayComponentCore<PropsT, InteractiveVS>>;
136
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
137
+ } : State extends 'InteractiveRender' ? JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore> & {
138
+ withInteractive(comp: ComponentConstructor<PropsT, Refs, InteractiveVS, Contexts, CompCore>): Builder<'Done', Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
139
+ } : JayStackComponentDefinition<Refs, SlowVS, FastVS, InteractiveVS, Services, Contexts, PropsT, Params, CompCore>;
140
+ /**
141
+ * Create a Jay Stack component from a contract.
142
+ *
143
+ * For .jay-contract files with explicit phase annotations:
144
+ * - SlowViewState: Properties with phase: slow (or default)
145
+ * - FastViewState: Properties with phase: fast
146
+ * - InteractiveViewState: Properties with phase: fast+interactive
147
+ *
148
+ * For .jay-html files (backward compatible):
149
+ * - SlowViewState, FastViewState, InteractiveViewState default to `never`
150
+ *
151
+ * Note: Full type enforcement for phase-specific render functions requires
152
+ * extensive refactoring of the Builder type system. Currently, the phase types
153
+ * are extracted but not yet enforced. See design-log/50 for full implementation plan.
154
+ *
155
+ * TODO: Add type constraints to withSlowlyRender, withFastRender, withInteractive
156
+ * to enforce that returned/received ViewStates match the phase-specific types.
157
+ */
158
+ declare function makeJayStackComponent<Render extends JayContract<any, any, any, any, any>>(): Builder<'Props', ExtractRefs<Render>, ExtractSlowViewState<Render>, ExtractFastViewState<Render>, ExtractInteractiveViewState<Render>, [
159
+ ], [
160
+ ], {}, {}, JayComponentCore<object, ExtractInteractiveViewState<Render>>>;
210
161
 
211
- export { type AnyFastRenderResult, type AnyJayStackComponentDefinition, type AnySlowlyRenderResult, type Builder, type ClientError4xx, type FastRenderResult, type JayStackComponentDefinition, type LoadParams, type PageProps, type PartialRender, type Redirect3xx, type RenderFast, type RenderSlowly, type ServerError5xx, type Signals, type SlowlyRenderResult, type UrlParams, clientError4xx, makeJayStackComponent, notFound, partialRender, redirect3xx, serverError5xx };
162
+ export { type AnyFastRenderResult, type AnyJayStackComponentDefinition, type AnySlowlyRenderResult, type Builder, type ClientError4xx, type FastRenderResult, type JayStackComponentDefinition, type LoadParams, type PageProps, type PartialRender, type Redirect3xx, type RenderFast, type RenderSlowly, type ServerError5xx, type ServiceMarker, type ServiceMarkers, type Signals, type SlowlyRenderResult, type UrlParams, clientError4xx, createJayService, makeJayStackComponent, notFound, partialRender, redirect3xx, serverError5xx };
package/dist/index.js CHANGED
@@ -29,10 +29,13 @@ function redirect3xx(status, location) {
29
29
  function partialRender(rendered, carryForward) {
30
30
  return { kind: "PartialRender", rendered, carryForward };
31
31
  }
32
+ function createJayService(name) {
33
+ return Symbol(name);
34
+ }
32
35
  class BuilderImplementation {
33
36
  constructor() {
34
- __publicField(this, "serverContexts", []);
35
- __publicField(this, "clientContexts", []);
37
+ __publicField(this, "services", []);
38
+ __publicField(this, "contexts", []);
36
39
  __publicField(this, "loadParams");
37
40
  __publicField(this, "slowlyRender");
38
41
  __publicField(this, "fastRender");
@@ -41,12 +44,12 @@ class BuilderImplementation {
41
44
  withProps() {
42
45
  return this;
43
46
  }
44
- withServerContext(...contextMarkers) {
45
- this.serverContexts = contextMarkers;
47
+ withServices(...serviceMarkers) {
48
+ this.services = serviceMarkers;
46
49
  return this;
47
50
  }
48
- withClientContext(...contextMarkers) {
49
- this.clientContexts = contextMarkers;
51
+ withContexts(...contextMarkers) {
52
+ this.contexts = contextMarkers;
50
53
  return this;
51
54
  }
52
55
  withLoadParams(loadParams) {
@@ -71,6 +74,7 @@ function makeJayStackComponent() {
71
74
  }
72
75
  export {
73
76
  clientError4xx,
77
+ createJayService,
74
78
  makeJayStackComponent,
75
79
  notFound,
76
80
  partialRender,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jay-framework/fullstack-component",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -26,12 +26,12 @@
26
26
  "test:watch": "vitest"
27
27
  },
28
28
  "dependencies": {
29
- "@jay-framework/component": "^0.7.0",
30
- "@jay-framework/runtime": "^0.7.0"
29
+ "@jay-framework/component": "^0.9.0",
30
+ "@jay-framework/runtime": "^0.9.0"
31
31
  },
32
32
  "devDependencies": {
33
- "@jay-framework/dev-environment": "^0.7.0",
34
- "@jay-framework/jay-cli": "^0.7.0",
33
+ "@jay-framework/dev-environment": "^0.9.0",
34
+ "@jay-framework/jay-cli": "^0.9.0",
35
35
  "@types/express": "^5.0.2",
36
36
  "@types/node": "^22.15.21",
37
37
  "nodemon": "^3.0.3",