@jalvin/runtime 2.0.39 → 2.0.41

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
@@ -4,7 +4,9 @@ export { Job, JobCancellationException, Deferred, CoroutineScope, launch, async_
4
4
  export type { Dispatcher, FlowCollector } from "./coroutines.js";
5
5
  export { MutableStateFlow, mapFlow, filterFlow, debounceFlow, ViewModel, viewModel, clearViewModel, clearAllViewModels, } from "./stateflow.js";
6
6
  export type { StateFlow, Subscriber, Unsubscribe } from "./stateflow.js";
7
- export { jalvinCreateElement } from "./dom.js";
7
+ export { jalvinCreateElement, patch } from "./dom.js";
8
+ export { NavController, NavGraphBuilder, NavHost, rememberNavController, } from "./nav.js";
9
+ export type { BackStackEntry, NavOptions } from "./nav.js";
8
10
  export { mutableStateOf, remember, rememberMutableStateOf, collectAsState, LaunchedEffect, DisposableEffect, SideEffect, WindowSizeClassProvider, calculateWindowSizeClass, widthToSizeClass, heightToSizeClass, render, } from "./ui.js";
9
11
  export type { MutableState, WindowSizeClass, WindowSizeClassState } from "./ui.js";
10
12
  export { println, print, } from "./stdlib/io.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,7 +6,9 @@ export { Job, JobCancellationException, Deferred, CoroutineScope, launch, async_
6
6
  // StateFlow / ViewModel
7
7
  export { MutableStateFlow, mapFlow, filterFlow, debounceFlow, ViewModel, viewModel, clearViewModel, clearAllViewModels, } from "./stateflow.js";
8
8
  // UI hooks & Rendering
9
- export { jalvinCreateElement } from "./dom.js";
9
+ export { jalvinCreateElement, patch } from "./dom.js";
10
+ // Router — Compose Navigation-style declarative routing
11
+ export { NavController, NavGraphBuilder, NavHost, rememberNavController, } from "./nav.js";
10
12
  export { mutableStateOf, remember, rememberMutableStateOf, collectAsState, LaunchedEffect, DisposableEffect, SideEffect, WindowSizeClassProvider, calculateWindowSizeClass, widthToSizeClass, heightToSizeClass, render, } from "./ui.js";
11
13
  // Utilities / stdlib — each module is a single-purpose file under stdlib/
12
14
  // See packages/runtime/src/stdlib/index.ts for the full module map.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/nav.d.ts ADDED
@@ -0,0 +1,104 @@
1
+ import { type StateFlow } from "./stateflow.js";
2
+ import type { VNode } from "./dom.js";
3
+ /** Information about the currently active destination in the back stack. */
4
+ export interface BackStackEntry {
5
+ /** The matched route pattern, e.g. "profile/{userId}" */
6
+ route: string;
7
+ /** The actual navigated path, e.g. "profile/42" */
8
+ destination: string;
9
+ /** Path parameters extracted from the pattern, e.g. { userId: "42" } */
10
+ arguments: Record<string, string>;
11
+ }
12
+ /** Options passed to NavController.navigate(). */
13
+ export interface NavOptions {
14
+ /** Pop back stack until this route pattern is reached before pushing the new destination. */
15
+ popUpTo?: string;
16
+ /** Whether to also pop the popUpTo destination itself. Default false. */
17
+ popUpToInclusive?: boolean;
18
+ /** Skip pushing if the current destination is already this route. Default false. */
19
+ launchSingleTop?: boolean;
20
+ }
21
+ interface CompiledRoute {
22
+ pattern: string;
23
+ regex: RegExp;
24
+ paramNames: string[];
25
+ content: (entry: BackStackEntry) => VNode;
26
+ }
27
+ /**
28
+ * Collects route definitions registered by composable() calls.
29
+ * Passed as the argument to the NavHost trailing-block lambda.
30
+ */
31
+ export declare class NavGraphBuilder {
32
+ /** @internal */
33
+ readonly _routes: CompiledRoute[];
34
+ /**
35
+ * Register a route destination.
36
+ *
37
+ * @param pattern Route pattern with optional {param} placeholders,
38
+ * e.g. "home", "profile/{userId}", "post/{id}/comments".
39
+ * @param content Composable that renders this destination.
40
+ * Receives the BackStackEntry so it can read route arguments.
41
+ */
42
+ composable(pattern: string, content: (entry: BackStackEntry) => VNode): void;
43
+ }
44
+ /**
45
+ * Manages the navigation back stack and drives route transitions.
46
+ *
47
+ * Create one via rememberNavController() and pass it to NavHost.
48
+ * Then thread it to screens that need to trigger navigation.
49
+ */
50
+ export declare class NavController {
51
+ private readonly _backStack;
52
+ /** The top-most entry in the back stack, or null before the first navigation. */
53
+ readonly currentBackStackEntry: StateFlow<BackStackEntry | null>;
54
+ private _resolver;
55
+ constructor();
56
+ private _navigateTo;
57
+ /** @internal — NavHost sets this on every render. */
58
+ _setResolver(resolver: (destination: string) => BackStackEntry): void;
59
+ /** @internal — NavHost calls this once on mount to seed the initial destination. */
60
+ _initFromHash(startDestination: string): void;
61
+ private _popTo;
62
+ /**
63
+ * Navigate to a destination.
64
+ *
65
+ * @param destination The literal path to navigate to, e.g. "profile/42".
66
+ * This is the *destination* string, not the route pattern.
67
+ */
68
+ navigate(destination: string, options?: NavOptions): void;
69
+ /**
70
+ * Pop the current destination off the back stack (the system back action).
71
+ * Returns true if navigation happened, false if the stack had only one entry.
72
+ */
73
+ popBackStack(): boolean;
74
+ /** Returns true if there is a previous destination to pop to. */
75
+ canPopBackStack(): boolean;
76
+ }
77
+ /**
78
+ * Creates a NavController and remembers it across recompositions.
79
+ * Call this at the root of your component tree.
80
+ */
81
+ export declare function rememberNavController(): NavController;
82
+ /**
83
+ * The root navigation composable. Renders whichever route matches the current
84
+ * destination in the NavController's back stack.
85
+ *
86
+ * The children block receives a NavGraphBuilder and should call
87
+ * graph.composable() to register each destination:
88
+ *
89
+ * NavHost(navController = nav, startDestination = "home") { graph ->
90
+ * graph.composable("home") { HomeScreen(navController = nav) }
91
+ * graph.composable("profile/{userId}") { entry ->
92
+ * ProfileScreen(userId = entry.arguments["userId"], navController = nav)
93
+ * }
94
+ * }
95
+ *
96
+ * In compiled TypeScript the children array will contain a single function
97
+ * (graph: NavGraphBuilder) => void that populates the builder.
98
+ */
99
+ export declare function NavHost(props: {
100
+ navController: NavController;
101
+ startDestination: string;
102
+ }, children?: Array<((builder: NavGraphBuilder) => void) | any>): VNode;
103
+ export {};
104
+ //# sourceMappingURL=nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.d.ts","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"AAaA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAOtC,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oFAAoF;IACpF,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,CAAC;CAC3C;AAsCD;;;GAGG;AACH,qBAAa,eAAe;IAC1B,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,CAAM;IAEvC;;;;;;;OAOG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,KAAK,GAAG,IAAI;CAI7E;AAuBD;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8C;IAEzE,iFAAiF;IACjF,QAAQ,CAAC,qBAAqB,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAIjE,OAAO,CAAC,SAAS,CAA0D;;IAqB3E,OAAO,CAAC,WAAW;IAQnB,qDAAqD;IACrD,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI;IAIrE,oFAAoF;IACpF,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;IAK7C,OAAO,CAAC,MAAM;IAed;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAsBzD;;;OAGG;IACH,YAAY,IAAI,OAAO;IAUvB,iEAAiE;IACjE,eAAe,IAAI,OAAO;CAG3B;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE;IAAE,aAAa,EAAE,aAAa,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EACjE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAC3D,KAAK,CAiDP"}
package/dist/nav.js ADDED
@@ -0,0 +1,261 @@
1
+ // ─────────────────────────────────────────────────────────────────────────────
2
+ // Jalvin Router — Compose Navigation-style declarative routing
3
+ //
4
+ // API mirrors Jetpack Compose Navigation:
5
+ // val nav = rememberNavController()
6
+ // NavHost(navController = nav, startDestination = "home") { graph ->
7
+ // graph.composable("home") { HomeScreen(navController = nav) }
8
+ // graph.composable("profile/{userId}") { entry ->
9
+ // ProfileScreen(userId = entry.arguments["userId"])
10
+ // }
11
+ // }
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ import { MutableStateFlow } from "./stateflow.js";
14
+ import { remember, collectAsState } from "./ui.js";
15
+ import { jalvinCreateElement } from "./dom.js";
16
+ function compilePattern(pattern) {
17
+ const paramNames = [];
18
+ // Split on {paramName} to alternate between literal segments and param slots
19
+ const parts = pattern.split(/\{(\w+)\}/);
20
+ let regexStr = "";
21
+ for (let i = 0; i < parts.length; i++) {
22
+ if (i % 2 === 0) {
23
+ // Literal segment — escape regex metacharacters
24
+ regexStr += (parts[i] ?? "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
25
+ }
26
+ else {
27
+ // Param slot — capture any non-slash sequence
28
+ paramNames.push(parts[i] ?? "");
29
+ regexStr += "([^/]+)";
30
+ }
31
+ }
32
+ return { regex: new RegExp(`^${regexStr}$`), paramNames };
33
+ }
34
+ function matchRoute(routes, destination) {
35
+ for (const route of routes) {
36
+ const match = destination.match(route.regex);
37
+ if (match) {
38
+ const args = {};
39
+ route.paramNames.forEach((name, i) => {
40
+ args[name] = decodeURIComponent(match[i + 1] ?? "");
41
+ });
42
+ return { route: route.pattern, destination, arguments: args };
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ // ─────────────────────────────────────────────────────────────────────────────
48
+ // NavGraphBuilder — the DSL block inside NavHost { graph -> ... }
49
+ // ─────────────────────────────────────────────────────────────────────────────
50
+ /**
51
+ * Collects route definitions registered by composable() calls.
52
+ * Passed as the argument to the NavHost trailing-block lambda.
53
+ */
54
+ export class NavGraphBuilder {
55
+ /** @internal */
56
+ _routes = [];
57
+ /**
58
+ * Register a route destination.
59
+ *
60
+ * @param pattern Route pattern with optional {param} placeholders,
61
+ * e.g. "home", "profile/{userId}", "post/{id}/comments".
62
+ * @param content Composable that renders this destination.
63
+ * Receives the BackStackEntry so it can read route arguments.
64
+ */
65
+ composable(pattern, content) {
66
+ const { regex, paramNames } = compilePattern(pattern);
67
+ this._routes.push({ pattern, regex, paramNames, content });
68
+ }
69
+ }
70
+ // ─────────────────────────────────────────────────────────────────────────────
71
+ // Hash-based URL helpers
72
+ // ─────────────────────────────────────────────────────────────────────────────
73
+ function getHashDestination() {
74
+ if (typeof window === "undefined")
75
+ return "";
76
+ const hash = window.location.hash;
77
+ if (hash.startsWith("#/"))
78
+ return hash.slice(2);
79
+ if (hash.startsWith("#"))
80
+ return hash.slice(1);
81
+ return "";
82
+ }
83
+ function setHashDestination(destination) {
84
+ if (typeof window === "undefined")
85
+ return;
86
+ window.location.hash = destination ? "#/" + destination : "#/";
87
+ }
88
+ // ─────────────────────────────────────────────────────────────────────────────
89
+ // NavController
90
+ // ─────────────────────────────────────────────────────────────────────────────
91
+ /**
92
+ * Manages the navigation back stack and drives route transitions.
93
+ *
94
+ * Create one via rememberNavController() and pass it to NavHost.
95
+ * Then thread it to screens that need to trigger navigation.
96
+ */
97
+ export class NavController {
98
+ _backStack = new MutableStateFlow([]);
99
+ /** The top-most entry in the back stack, or null before the first navigation. */
100
+ currentBackStackEntry;
101
+ // The resolver is updated by NavHost on every render so it always reflects
102
+ // the current route table (in case routes are defined dynamically).
103
+ _resolver = null;
104
+ constructor() {
105
+ const currentFlow = new MutableStateFlow(null);
106
+ this.currentBackStackEntry = currentFlow;
107
+ // Derive currentBackStackEntry from the back stack top
108
+ this._backStack.collect((stack) => {
109
+ currentFlow.value = stack.length > 0 ? (stack[stack.length - 1] ?? null) : null;
110
+ });
111
+ // Sync with browser back/forward buttons
112
+ if (typeof window !== "undefined") {
113
+ window.addEventListener("hashchange", () => {
114
+ this._navigateTo(getHashDestination());
115
+ });
116
+ }
117
+ }
118
+ // Resolves a destination string → BackStackEntry and pushes it, unless
119
+ // we're already there.
120
+ _navigateTo(destination) {
121
+ if (!this._resolver)
122
+ return;
123
+ const current = this.currentBackStackEntry.value;
124
+ if (current?.destination === destination)
125
+ return;
126
+ const entry = this._resolver(destination);
127
+ this._backStack.update((s) => [...s, entry]);
128
+ }
129
+ /** @internal — NavHost sets this on every render. */
130
+ _setResolver(resolver) {
131
+ this._resolver = resolver;
132
+ }
133
+ /** @internal — NavHost calls this once on mount to seed the initial destination. */
134
+ _initFromHash(startDestination) {
135
+ const initial = getHashDestination() || startDestination;
136
+ this._navigateTo(initial);
137
+ }
138
+ _popTo(routePattern, inclusive) {
139
+ this._backStack.update((stack) => {
140
+ // Find the last occurrence of the pattern in the stack
141
+ let idx = -1;
142
+ for (let i = stack.length - 1; i >= 0; i--) {
143
+ if (stack[i]?.route === routePattern) {
144
+ idx = i;
145
+ break;
146
+ }
147
+ }
148
+ if (idx === -1)
149
+ return stack;
150
+ return inclusive ? stack.slice(0, idx) : stack.slice(0, idx + 1);
151
+ });
152
+ }
153
+ /**
154
+ * Navigate to a destination.
155
+ *
156
+ * @param destination The literal path to navigate to, e.g. "profile/42".
157
+ * This is the *destination* string, not the route pattern.
158
+ */
159
+ navigate(destination, options) {
160
+ if (options?.popUpTo !== undefined) {
161
+ this._popTo(options.popUpTo, options.popUpToInclusive ?? false);
162
+ }
163
+ if (options?.launchSingleTop &&
164
+ this.currentBackStackEntry.value?.destination === destination) {
165
+ return;
166
+ }
167
+ const prevHash = getHashDestination();
168
+ setHashDestination(destination);
169
+ // If the hash was already at this destination, hashchange won't fire,
170
+ // so we push directly.
171
+ if (prevHash === destination) {
172
+ this._navigateTo(destination);
173
+ }
174
+ }
175
+ /**
176
+ * Pop the current destination off the back stack (the system back action).
177
+ * Returns true if navigation happened, false if the stack had only one entry.
178
+ */
179
+ popBackStack() {
180
+ const stack = this._backStack.value;
181
+ if (stack.length <= 1)
182
+ return false;
183
+ const prev = stack[stack.length - 2];
184
+ this._backStack.update((s) => s.slice(0, -1));
185
+ setHashDestination(prev.destination);
186
+ return true;
187
+ }
188
+ /** Returns true if there is a previous destination to pop to. */
189
+ canPopBackStack() {
190
+ return this._backStack.value.length > 1;
191
+ }
192
+ }
193
+ // ─────────────────────────────────────────────────────────────────────────────
194
+ // rememberNavController
195
+ // ─────────────────────────────────────────────────────────────────────────────
196
+ /**
197
+ * Creates a NavController and remembers it across recompositions.
198
+ * Call this at the root of your component tree.
199
+ */
200
+ export function rememberNavController() {
201
+ return remember(() => new NavController());
202
+ }
203
+ // ─────────────────────────────────────────────────────────────────────────────
204
+ // NavHost
205
+ // ─────────────────────────────────────────────────────────────────────────────
206
+ /**
207
+ * The root navigation composable. Renders whichever route matches the current
208
+ * destination in the NavController's back stack.
209
+ *
210
+ * The children block receives a NavGraphBuilder and should call
211
+ * graph.composable() to register each destination:
212
+ *
213
+ * NavHost(navController = nav, startDestination = "home") { graph ->
214
+ * graph.composable("home") { HomeScreen(navController = nav) }
215
+ * graph.composable("profile/{userId}") { entry ->
216
+ * ProfileScreen(userId = entry.arguments["userId"], navController = nav)
217
+ * }
218
+ * }
219
+ *
220
+ * In compiled TypeScript the children array will contain a single function
221
+ * (graph: NavGraphBuilder) => void that populates the builder.
222
+ */
223
+ export function NavHost(props, children) {
224
+ const { navController, startDestination } = props;
225
+ // Build the route table by running the DSL block
226
+ const graph = new NavGraphBuilder();
227
+ if (children) {
228
+ for (const child of children) {
229
+ if (typeof child === "function")
230
+ child(graph);
231
+ }
232
+ }
233
+ const routes = graph._routes;
234
+ // Resolver: maps a raw destination string to a BackStackEntry using the route table.
235
+ // Falls back to a synthetic entry (triggers 404 render) if no pattern matches.
236
+ const resolve = (destination) => matchRoute(routes, destination) ?? {
237
+ route: destination,
238
+ destination,
239
+ arguments: {},
240
+ };
241
+ // Keep the resolver current so hashchange events always use the latest routes.
242
+ navController._setResolver(resolve);
243
+ // Seed the initial destination once on mount.
244
+ remember(() => {
245
+ navController._initFromHash(startDestination);
246
+ return true;
247
+ }, [navController, startDestination]);
248
+ // Subscribe to route changes — this re-renders NavHost when destination changes.
249
+ const current = collectAsState(navController.currentBackStackEntry);
250
+ if (!current) {
251
+ // Still initializing; render nothing.
252
+ return jalvinCreateElement("div", { style: { display: "none" } });
253
+ }
254
+ const matched = routes.find((r) => r.pattern === current.route);
255
+ if (matched) {
256
+ return matched.content(current);
257
+ }
258
+ // No route matched — render a 404 placeholder.
259
+ return jalvinCreateElement("div", { style: { padding: "16px", color: "#c00", fontFamily: "monospace" } }, `404 — no route matched "${current.destination}"`);
260
+ }
261
+ //# sourceMappingURL=nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav.js","sourceRoot":"","sources":["../src/nav.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,0CAA0C;AAC1C,sCAAsC;AACtC,uEAAuE;AACvE,mEAAmE;AACnE,sDAAsD;AACtD,0DAA0D;AAC1D,QAAQ;AACR,MAAM;AACN,gFAAgF;AAEhF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAqC/C,SAAS,cAAc,CAAC,OAAe;IACrC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChB,gDAAgD;YAChD,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,8CAA8C;YAC9C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAChC,QAAQ,IAAI,SAAS,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CAAC,MAAuB,EAAE,WAAmB;IAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,GAA2B,EAAE,CAAC;YACxC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,kEAAkE;AAClE,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,OAAO,eAAe;IAC1B,gBAAgB;IACP,OAAO,GAAoB,EAAE,CAAC;IAEvC;;;;;;;OAOG;IACH,UAAU,CAAC,OAAe,EAAE,OAAyC;QACnE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,SAAS,kBAAkB;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAClC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACP,UAAU,GAAG,IAAI,gBAAgB,CAAmB,EAAE,CAAC,CAAC;IAEzE,iFAAiF;IACxE,qBAAqB,CAAmC;IAEjE,2EAA2E;IAC3E,oEAAoE;IAC5D,SAAS,GAAqD,IAAI,CAAC;IAE3E;QACE,MAAM,WAAW,GAAG,IAAI,gBAAgB,CAAwB,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC;QAEzC,uDAAuD;QACvD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE;gBACzC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,uBAAuB;IACf,WAAW,CAAC,WAAmB;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;QACjD,IAAI,OAAO,EAAE,WAAW,KAAK,WAAW;YAAE,OAAO;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,qDAAqD;IACrD,YAAY,CAAC,QAAiD;QAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,oFAAoF;IACpF,aAAa,CAAC,gBAAwB;QACpC,MAAM,OAAO,GAAG,kBAAkB,EAAE,IAAI,gBAAgB,CAAC;QACzD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,YAAoB,EAAE,SAAkB;QACrD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,uDAAuD;YACvD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,YAAY,EAAE,CAAC;oBACrC,GAAG,GAAG,CAAC,CAAC;oBACR,MAAM;gBACR,CAAC;YACH,CAAC;YACD,IAAI,GAAG,KAAK,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7B,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,WAAmB,EAAE,OAAoB;QAChD,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;QAClE,CAAC;QAED,IACE,OAAO,EAAE,eAAe;YACxB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,KAAK,WAAW,EAC7D,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;QACtC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAEhC,sEAAsE;QACtE,uBAAuB;QACvB,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,eAAe;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,OAAO,CACrB,KAAiE,EACjE,QAA4D;IAE5D,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAElD,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;IAE7B,qFAAqF;IACrF,+EAA+E;IAC/E,MAAM,OAAO,GAAG,CAAC,WAAmB,EAAkB,EAAE,CACtD,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI;QACjC,KAAK,EAAE,WAAW;QAClB,WAAW;QACX,SAAS,EAAE,EAAE;KACd,CAAC;IAEJ,+EAA+E;IAC/E,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAEpC,8CAA8C;IAC9C,QAAQ,CAAC,GAAG,EAAE;QACZ,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEtC,iFAAiF;IACjF,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,mBAAmB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,+CAA+C;IAC/C,OAAO,mBAAmB,CACxB,KAAK,EACL,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EACtE,2BAA2B,OAAO,CAAC,WAAW,GAAG,CAClD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jalvin/runtime",
3
- "version": "2.0.39",
3
+ "version": "2.0.41",
4
4
  "description": "Jalvin runtime — Bibi HTTP client, coroutines, StateFlow, ViewModel, UI reactivity",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",