@jay-framework/runtime 0.8.0 → 0.10.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/dist/index.d.ts CHANGED
@@ -65,14 +65,20 @@ type JayEventHandlerWrapper<EventType, ViewState, Returns> = (orig: JayEventHand
65
65
  interface ContextMarker<ContextType> {
66
66
  }
67
67
  declare const _jayContractBrand: unique symbol;
68
- type JayContract<ViewState extends object, Refs extends object> = {
68
+ type JayContract<ViewState extends object, Refs extends object, SlowViewState extends object = never, FastViewState extends object = never, InteractiveViewState extends object = never> = {
69
69
  readonly [_jayContractBrand]: {
70
70
  viewState: ViewState;
71
71
  refs: Refs;
72
+ slowViewState: SlowViewState;
73
+ fastViewState: FastViewState;
74
+ interactiveViewState: InteractiveViewState;
72
75
  };
73
76
  };
74
- type ExtractViewState<A> = A extends JayContract<infer ViewState, any> ? ViewState : never;
75
- type ExtractRefs<A> = A extends JayContract<any, infer Refs> ? Refs : never;
77
+ type ExtractViewState<A> = A extends JayContract<infer ViewState, any, any, any, any> ? ViewState : never;
78
+ type ExtractRefs<A> = A extends JayContract<any, infer Refs, any, any, any> ? Refs : never;
79
+ type ExtractSlowViewState<A> = A extends JayContract<any, any, infer SlowViewState, any, any> ? SlowViewState : never;
80
+ type ExtractFastViewState<A> = A extends JayContract<any, any, any, infer FastViewState, any> ? FastViewState : never;
81
+ type ExtractInteractiveViewState<A> = A extends JayContract<any, any, any, any, infer InteractiveViewState> ? InteractiveViewState : never;
76
82
  declare enum LogType {
77
83
  ASYNC_ERROR = 0,
78
84
  CONTEXT_NOT_FOUND = 1
@@ -496,6 +502,35 @@ interface ContextStack<ContextType> {
496
502
  marker: ContextMarker<ContextType>;
497
503
  parent?: ContextStack<any>;
498
504
  }
505
+ /**
506
+ * Registers a global context that will be available to all components.
507
+ * Global contexts are checked after the context stack, so component-provided
508
+ * contexts can override global ones.
509
+ *
510
+ * @param marker - The context marker created with createJayContext()
511
+ * @param context - The context value to register
512
+ *
513
+ * @example
514
+ * ```typescript
515
+ * // In lib/init.ts (using makeJayInit pattern)
516
+ * export const init = makeJayInit()
517
+ * .withServer(() => ({ itemsPerPage: 10 }))
518
+ * .withClient((serverData) => {
519
+ * registerGlobalContext(APP_CONFIG_CONTEXT, serverData);
520
+ * });
521
+ * ```
522
+ */
523
+ declare function registerGlobalContext<ContextType>(marker: ContextMarker<ContextType>, context: ContextType): void;
524
+ /**
525
+ * Clears all registered global contexts.
526
+ * Internal API for testing and hot reload.
527
+ */
528
+ declare function clearGlobalContextRegistry(): void;
529
+ /**
530
+ * Gets a global context by marker.
531
+ * Internal API used by findContext.
532
+ */
533
+ declare function useGlobalContext<ContextType>(marker: ContextMarker<ContextType>): ContextType | undefined;
499
534
  declare function createJayContext<ContextType = unknown>(): ContextMarker<ContextType>;
500
535
  declare function withContext<ContextType, Returns>(marker: ContextMarker<ContextType>, context: ContextType, callback: () => Returns): Returns;
501
536
  declare function useContext<ContextType>(marker: ContextMarker<ContextType>): ContextType;
@@ -515,4 +550,4 @@ declare class ConstructContext<ViewState> {
515
550
  static withRootContext<ViewState, Refs>(viewState: ViewState, refManager: ReferencesManager, elementConstructor: () => BaseJayElement<ViewState>): JayElement<ViewState, Refs>;
516
551
  }
517
552
 
518
- export { type Attribute, type Attributes, type BaseJayElement, BaseReferencesManager, type ComponentCollectionProxy, ComponentCollectionRefImpl, type ComponentProxy, ComponentRefImpl, ComponentRefsImpl, type Conditional, ConstructContext, type ContextMarker, type Coordinate, type DynamicAttributeOrProperty, EVENT_TRAP, type ElementFrom, type EventEmitter, type EventTypeFrom, type ExtractRefs, type ExtractViewState, type ForEach, GetTrapProxy, type GlobalJayEvents, type HTMLElementCollectionProxy, type HTMLElementCollectionProxyTarget, type HTMLElementProxy, type HTMLElementProxyTarget, type HTMLNativeExec, type HeadLink, type JayComponent, type JayComponentConstructor, type JayContract, type JayElement, type JayEvent, type JayEventHandler, type JayEventHandlerWrapper, type JayLog, type JayNativeEventBuilder, type JayNativeFunction, LogType, type ManagedRefConstructor, ManagedRefType, type ManagedRefs, type MapEventEmitterViewState, type MountFunc, type OnlyEventEmitters, type PreRenderElement, type PrivateRef, type PrivateRefConstructor, PrivateRefs, type PropsFrom, ReferencesManager, type RenderElement, type RenderElementOptions, type TextElement, type ViewStateFrom, type When, WhenRole, type WithData, booleanAttribute, childComp, conditional, createJayContext, currentConstructionContext, defaultEventWrapper, dynamicAttribute, dynamicElement, dynamicElementNS, dynamicProperty, dynamicText, element, findContext, forEach, injectHeadLinks, isCondition, isForEach, isWhen, isWithData, jayLog, mathMLDynamicElement, mathMLElement, mkUpdateCollection, noop, noopMount, noopUpdate, normalizeMount, normalizeUpdates, pending, rejected, resolved, restoreContext, saveContext, svgDynamicElement, svgElement, type updateFunc, useContext, withContext, withData };
553
+ export { type Attribute, type Attributes, type BaseJayElement, BaseReferencesManager, type ComponentCollectionProxy, ComponentCollectionRefImpl, type ComponentProxy, ComponentRefImpl, ComponentRefsImpl, type Conditional, ConstructContext, type ContextMarker, type Coordinate, type DynamicAttributeOrProperty, EVENT_TRAP, type ElementFrom, type EventEmitter, type EventTypeFrom, type ExtractFastViewState, type ExtractInteractiveViewState, type ExtractRefs, type ExtractSlowViewState, type ExtractViewState, type ForEach, GetTrapProxy, type GlobalJayEvents, type HTMLElementCollectionProxy, type HTMLElementCollectionProxyTarget, type HTMLElementProxy, type HTMLElementProxyTarget, type HTMLNativeExec, type HeadLink, type JayComponent, type JayComponentConstructor, type JayContract, type JayElement, type JayEvent, type JayEventHandler, type JayEventHandlerWrapper, type JayLog, type JayNativeEventBuilder, type JayNativeFunction, LogType, type ManagedRefConstructor, ManagedRefType, type ManagedRefs, type MapEventEmitterViewState, type MountFunc, type OnlyEventEmitters, type PreRenderElement, type PrivateRef, type PrivateRefConstructor, PrivateRefs, type PropsFrom, ReferencesManager, type RenderElement, type RenderElementOptions, type TextElement, type ViewStateFrom, type When, WhenRole, type WithData, booleanAttribute, childComp, clearGlobalContextRegistry, conditional, createJayContext, currentConstructionContext, defaultEventWrapper, dynamicAttribute, dynamicElement, dynamicElementNS, dynamicProperty, dynamicText, element, findContext, forEach, injectHeadLinks, isCondition, isForEach, isWhen, isWithData, jayLog, mathMLDynamicElement, mathMLElement, mkUpdateCollection, noop, noopMount, noopUpdate, normalizeMount, normalizeUpdates, pending, registerGlobalContext, rejected, resolved, restoreContext, saveContext, svgDynamicElement, svgElement, type updateFunc, useContext, useGlobalContext, withContext, withData };
package/dist/index.js CHANGED
@@ -97,6 +97,16 @@ let currentContext = void 0;
97
97
  function NewContextStack(context, marker, parent) {
98
98
  return { context, marker, parent };
99
99
  }
100
+ const globalContextRegistry = /* @__PURE__ */ new Map();
101
+ function registerGlobalContext(marker, context) {
102
+ globalContextRegistry.set(marker, context);
103
+ }
104
+ function clearGlobalContextRegistry() {
105
+ globalContextRegistry.clear();
106
+ }
107
+ function useGlobalContext(marker) {
108
+ return globalContextRegistry.get(marker);
109
+ }
100
110
  function createJayContext() {
101
111
  return Symbol();
102
112
  }
@@ -122,6 +132,11 @@ function findContext(predicate) {
122
132
  return aContext.context;
123
133
  aContext = aContext.parent;
124
134
  }
135
+ for (const [marker, context] of globalContextRegistry.entries()) {
136
+ if (predicate(marker)) {
137
+ return context;
138
+ }
139
+ }
125
140
  return void 0;
126
141
  }
127
142
  function saveContext() {
@@ -983,6 +998,7 @@ export {
983
998
  WhenRole,
984
999
  booleanAttribute,
985
1000
  childComp,
1001
+ clearGlobalContextRegistry,
986
1002
  conditional,
987
1003
  createJayContext,
988
1004
  currentConstructionContext,
@@ -1010,6 +1026,7 @@ export {
1010
1026
  normalizeMount,
1011
1027
  normalizeUpdates,
1012
1028
  pending,
1029
+ registerGlobalContext,
1013
1030
  rejected,
1014
1031
  resolved,
1015
1032
  restoreContext,
@@ -1017,6 +1034,7 @@ export {
1017
1034
  svgDynamicElement,
1018
1035
  svgElement,
1019
1036
  useContext,
1037
+ useGlobalContext,
1020
1038
  withContext,
1021
1039
  withData
1022
1040
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jay-framework/runtime",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
@@ -23,11 +23,11 @@
23
23
  "test:watch": "vitest"
24
24
  },
25
25
  "dependencies": {
26
- "@jay-framework/list-compare": "^0.8.0",
27
- "@jay-framework/reactive": "^0.8.0"
26
+ "@jay-framework/list-compare": "^0.10.0",
27
+ "@jay-framework/reactive": "^0.10.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@jay-framework/dev-environment": "^0.8.0",
30
+ "@jay-framework/dev-environment": "^0.10.0",
31
31
  "@testing-library/jest-dom": "^6.2.0",
32
32
  "@types/jsdom": "^21.1.6",
33
33
  "@types/node": "^20.11.5",