@askrjs/askr 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +32 -4
  3. package/dist/{access-d_DCdwqn.js → access-BucjYZcX.js} +15 -10
  4. package/dist/actions/index.d.ts +1 -1
  5. package/dist/actions/index.js +5 -4
  6. package/dist/{activity-CAJ5eho-.d.ts → activity-DooIuxQO.d.ts} +2 -2
  7. package/dist/{activity-B2Yy7Wz9.js → activity-FirwPXA_.js} +14 -2
  8. package/dist/{compose-ref-1Fhs7mbF.js → aria-hKjThHcp.js} +1 -18
  9. package/dist/benchmark.d.ts +1 -1
  10. package/dist/benchmark.js +8 -8
  11. package/dist/boot/index.d.ts +4 -2
  12. package/dist/boot/index.js +1 -1
  13. package/dist/{boot-DVwjHCNh.js → boot-tWyF6121.js} +14 -15
  14. package/dist/{cleanup-DPtpXtA4.js → cleanup-TXSsApEl.js} +6 -11
  15. package/dist/{component-cleanup-DPe8claJ.js → component-cleanup-jdbgjkT1.js} +2 -2
  16. package/dist/{component-internal-xW_OnTmC.js → component-internal-C4hKKQBF.js} +16 -7
  17. package/dist/components/index.d.ts +2 -2
  18. package/dist/compose-ref-Bfaf4kUC.js +20 -0
  19. package/dist/control/index.d.ts +1 -1
  20. package/dist/control/index.js +1 -1
  21. package/dist/{control-BLVTE1gO.js → control-C-wSaq9V.js} +4 -4
  22. package/dist/{control-DdFw-Caz.d.ts → control-Cxag1yqV.d.ts} +1 -1
  23. package/dist/{csp-nonce-CCnMtOW-.js → csp-nonce-9NFUb7hJ.js} +1 -1
  24. package/dist/data/index.d.ts +1 -1
  25. package/dist/data/index.js +1 -1
  26. package/dist/{data-BjUf0PPS.js → data-ghKopAbp.js} +49 -49
  27. package/dist/{deferred-BRw0gbn5.js → deferred-CxjWCkIn.js} +2 -2
  28. package/dist/{effect-BQP5o0Kx.js → effect-CNwstBBD.js} +2 -2
  29. package/dist/{fastlane-DUxiFV9S.js → fastlane-BKZduiBQ.js} +2 -2
  30. package/dist/{for-internal-DKcYl3nl.js → for-internal-DyBHfKJA.js} +33 -25
  31. package/dist/foundations/icon/index.d.ts +1 -1
  32. package/dist/foundations/index.d.ts +2 -2
  33. package/dist/foundations/index.js +1 -1
  34. package/dist/foundations/interactions/index.d.ts +1 -1
  35. package/dist/foundations/interactions/index.js +1 -1
  36. package/dist/foundations/state/index.d.ts +1 -1
  37. package/dist/foundations/state/index.js +1 -1
  38. package/dist/foundations/structures/index.d.ts +2 -2
  39. package/dist/foundations/structures/index.js +1 -1
  40. package/dist/foundations/utilities/index.d.ts +1 -1
  41. package/dist/foundations/utilities/index.js +2 -1
  42. package/dist/fx/index.d.ts +1 -1
  43. package/dist/fx/index.js +1 -1
  44. package/dist/{index-CzH-0LcA.d.ts → index-B1gu0_m0.d.ts} +2 -0
  45. package/dist/{index-r5THqzPN.d.ts → index-CTpMmzgN.d.ts} +2 -2
  46. package/dist/{index-DSqXWc77.d.ts → index-Dgjbo2gU.d.ts} +58 -4
  47. package/dist/index.d.ts +3 -3
  48. package/dist/index.js +10 -10
  49. package/dist/{interactions-B-7vkBgx.js → interactions-D102JxBR.js} +10 -3
  50. package/dist/jsx-dev-runtime.d.ts +2 -2
  51. package/dist/jsx-runtime-Cg7GqY1S.d.ts +2 -0
  52. package/dist/{jsx-runtime-Cdd6Gkb0.d.ts → jsx-runtime-gVIaTPw0.d.ts} +2 -2
  53. package/dist/jsx-runtime.d.ts +2 -2
  54. package/dist/{lifecycle-batch-BYECQw8T.js → lifecycle-batch-63aXFf2S.js} +2 -2
  55. package/dist/{lifecycle-operations-DJk_5MrD.js → lifecycle-operations-Q0k3EFnG.js} +94 -2
  56. package/dist/{navigate-wel1e6cU.d.ts → navigate-F4sHgWbw.d.ts} +3 -1
  57. package/dist/{navigate-DvJvo--6.js → navigate-ZZu1IV0B.js} +88 -13
  58. package/dist/{readable-D-JIKCg2.js → readable-Di1fzSwm.js} +1 -1
  59. package/dist/{renderer-RjZ8LHbt.js → renderer-Cl23O0hV.js} +154 -137
  60. package/dist/{resolution-dVYwYXrI.js → resolution-ClD-K7Lz.js} +3 -3
  61. package/dist/{resource-operation-4qFIM02d.js → resource-operation-Vz1S5h2k.js} +4 -4
  62. package/dist/resources/index.d.ts +3 -37
  63. package/dist/resources/index.js +6 -6
  64. package/dist/router/index.d.ts +4 -4
  65. package/dist/router/index.js +7 -7
  66. package/dist/{selector-NQiYHwZC.js → selector-CsKuomw0.js} +17 -16
  67. package/dist/shared-CYBH3F8I.js +27 -0
  68. package/dist/ssg/index.d.ts +1 -1
  69. package/dist/ssg/index.js +4 -4
  70. package/dist/ssr/index.d.ts +8 -2
  71. package/dist/ssr/index.js +1 -1
  72. package/dist/{ssr-F87AcFMt.js → ssr-Doog-AfJ.js} +26 -15
  73. package/dist/{state-Ks-sWTQi.js → state-BGJgYSyQ.js} +3 -3
  74. package/dist/{structures-C-wmHCi6.js → structures-DFyK5AdQ.js} +4 -4
  75. package/dist/testing/index.d.ts +3 -1
  76. package/dist/testing/index.js +6 -5
  77. package/dist/{types-DkVJhVs9.d.ts → types-DWVrKn9N.d.ts} +5 -0
  78. package/dist/{verify-hydration-CThsx0pq.js → verify-hydration-BZPJ_kYa.js} +1 -1
  79. package/package.json +7 -7
  80. package/dist/jsx-runtime-BTzDdBJ_.d.ts +0 -2
package/dist/ssg/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import "../access-d_DCdwqn.js";
1
+ import "../access-BucjYZcX.js";
2
2
  import { n as createRouteRegistry } from "../manifest-D6rfj_jC.js";
3
3
  import { o as addRouteBasePath } from "../route-matching-Bo6UqG-5.js";
4
- import { c as route, n as resolveDeferredValues } from "../deferred-BRw0gbn5.js";
5
- import { S as RouteDataLoadError, c as prepareRouteHydrationData, t as bindResolvedRouteData, v as getRenderHandler, y as _preloadRouteHandler } from "../resolution-dVYwYXrI.js";
4
+ import { c as route, n as resolveDeferredValues } from "../deferred-CxjWCkIn.js";
5
+ import { S as RouteDataLoadError, c as prepareRouteHydrationData, t as bindResolvedRouteData, v as getRenderHandler, y as _preloadRouteHandler } from "../resolution-ClD-K7Lz.js";
6
6
  import { n as renderDocument } from "../ssr-DSHd_Q9K.js";
7
- import { n as renderToString } from "../ssr-F87AcFMt.js";
7
+ import { n as renderToString } from "../ssr-Doog-AfJ.js";
8
8
  import * as fs from "node:fs/promises";
9
9
  import * as pathModule from "node:path";
10
10
  import * as os from "node:os";
@@ -1,5 +1,5 @@
1
- import { Bt as DataRuntime, D as SSRPortalState, E as DeferredBoundaryRegistration, Ft as RouteRequestResult, Ot as RouteRecord, _t as RouteHandler, c as ServerQueryRegistry, dn as DocumentRenderContext, dt as RouteAuthOptions, en as QueryPrefetchContext, fn as DocumentRenderer, hn as SSRStyleRegistrationValidation, jt as RouteRegistry, mn as SSRStyleRegistration, pn as SSRData, rt as AccessRedirectDecision, tt as AccessDenyDecision, un as DocumentRenderArgs, ut as Route, zt as CoreTelemetry } from "../index-DSqXWc77.js";
2
- import { r as JSXElement, s as Props } from "../types-DkVJhVs9.js";
1
+ import { An as SSRStyleRegistrationValidation, D as SSRPortalState, Dn as DocumentRenderer, E as DeferredBoundaryRegistration, En as DocumentRenderContext, Et as RouteAuthOptions, Kt as RouteRegistry, Mt as RouteHandler, On as SSRData, Tn as DocumentRenderArgs, Tt as Route, Ut as RouteRecord, Xt as RouteRequestResult, c as ServerQueryRegistry, en as CoreTelemetry, gt as AccessDenyDecision, hn as QueryPrefetchContext, kn as SSRStyleRegistration, tn as DataRuntime, vt as AccessRedirectDecision } from "../index-Dgjbo2gU.js";
2
+ import { r as JSXElement, s as Props } from "../types-DWVrKn9N.js";
3
3
  import { AuthContext } from "@askrjs/auth";
4
4
  //#region src/common/page-render-envelope.d.ts
5
5
  declare const PAGE_RENDER_ENVELOPE_VERSION: 1;
@@ -51,6 +51,7 @@ declare function createRenderContext(seed?: number, opts?: {
51
51
  params?: Record<string, string>;
52
52
  routes?: readonly Route[];
53
53
  routeAuth?: RouteAuthOptions;
54
+ authContext?: AuthContext;
54
55
  basePath?: string;
55
56
  signal?: AbortSignal;
56
57
  dataRuntime?: unknown;
@@ -85,6 +86,9 @@ type SSRRouteSource = {
85
86
  };
86
87
  type RouteRenderOptions = SSRRouteSource & {
87
88
  url: string;
89
+ auth?: RouteAuthOptions;
90
+ authContext?: AuthContext;
91
+ signal?: AbortSignal;
88
92
  seed?: number;
89
93
  data?: SSRData;
90
94
  document?: DocumentRenderer;
@@ -137,6 +141,8 @@ declare function renderToStringSync(component: (props?: Record<string, unknown>)
137
141
  /** @internal A composed page render envelope. */
138
142
  envelope?: PageRenderEnvelope;
139
143
  cspNonce?: string;
144
+ /** @internal Request-local authentication for deferred SSR passes. */
145
+ authContext?: import('@askrjs/auth').AuthContext;
140
146
  /** @internal Capture request-local registrations produced by this pass. */
141
147
  onContext?: (ctx: RenderContext) => void;
142
148
  }): string;
package/dist/ssr/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { C as SSRDataMissingError } from "../render-context-B7ohlh6t.js";
2
- import { a as renderResolvedToStringSync, c as createRenderContext, d as withRenderContextAsync, i as renderRouteRequestToString, l as getRenderContext, n as renderToString, o as renderToStringSync, r as renderRouteRequest, s as resolveRequest, t as renderToStream, u as withRenderContext } from "../ssr-F87AcFMt.js";
2
+ import { a as renderResolvedToStringSync, c as createRenderContext, d as withRenderContextAsync, i as renderRouteRequestToString, l as getRenderContext, n as renderToString, o as renderToStringSync, r as renderRouteRequest, s as resolveRequest, t as renderToStream, u as withRenderContext } from "../ssr-Doog-AfJ.js";
3
3
  export { SSRDataMissingError, createRenderContext, getRenderContext, renderResolvedToStringSync, renderRouteRequest, renderRouteRequestToString, renderToStream, renderToString, renderToStringSync, resolveRequest, withRenderContext, withRenderContextAsync };
@@ -1,20 +1,20 @@
1
1
  import { t as __CONTROL_BOUNDARY__ } from "./control-C-ApnFs1.js";
2
2
  import { t as __ERROR_BOUNDARY__ } from "./vnode-D24p6IW2.js";
3
- import { y as logger } from "./access-d_DCdwqn.js";
3
+ import { y as logger } from "./access-BucjYZcX.js";
4
4
  import { f as getCurrentComponentInstance, w as setCurrentComponentInstance } from "./component-scope-4I3yEMkb.js";
5
5
  import { i as isFragmentType, n as Fragment, t as ELEMENT_TYPE } from "./jsx-DRS-qjiN.js";
6
- import { f as callWithContext, g as getVNodeContextFrame, h as getExecutionContextFrame, n as createComponentInstance, v as markVNodeTreeWithContextFrame } from "./component-internal-xW_OnTmC.js";
7
- import { t as cleanupComponent } from "./component-cleanup-DPe8claJ.js";
8
- import { p as isPromiseLike } from "./lifecycle-batch-BYECQw8T.js";
9
- import { _ as setControlBoundaryContextFrame, g as evaluateShowState, h as evaluateCaseState, i as evaluateForState, o as rollbackForStateTransaction, r as commitForStateTransaction } from "./for-internal-DKcYl3nl.js";
6
+ import { _ as getVNodeContextFrame, g as getExecutionContextFrame, n as createComponentInstance, p as callWithContext, y as markVNodeTreeWithContextFrame } from "./component-internal-C4hKKQBF.js";
7
+ import { t as cleanupComponent } from "./component-cleanup-jdbgjkT1.js";
8
+ import { p as isPromiseLike } from "./lifecycle-batch-63aXFf2S.js";
9
+ import { _ as setControlBoundaryContextFrame, g as evaluateShowState, h as evaluateCaseState, i as evaluateForState, o as rollbackForStateTransaction, r as commitForStateTransaction } from "./for-internal-DyBHfKJA.js";
10
10
  import { C as SSRDataMissingError, _ as isEmptyPageRenderEnvelope, f as stopRenderPhase$1, h as createPageRenderEnvelope, t as configureRenderContextProvider, u as startRenderPhase$1, v as isPageRenderEnvelope, x as withHydrationRenderUrl } from "./render-context-B7ohlh6t.js";
11
11
  import { n as getPublicAttributeName, t as sanitizeCssValue } from "./css-BuPaTOfe.js";
12
- import { o as isUnsafeUrlAttribute, r as validateCspNonce, t as CspNonceScope } from "./csp-nonce-CCnMtOW-.js";
12
+ import { o as isUnsafeUrlAttribute, r as validateCspNonce, t as CspNonceScope } from "./csp-nonce-9NFUb7hJ.js";
13
13
  import { n as SSR_PORTAL_HOST, t as SSR_PORTAL_ANCHOR } from "./portal-w3oQ6oQU.js";
14
14
  import { t as createDataRuntime } from "./data-runtime-7t_Y0iv3.js";
15
15
  import { c as withTelemetry, i as dehydrateDataRuntime, t as createQueryPrefetchContext } from "./query-registry-Bua3cDyb.js";
16
16
  import { a as resolveRouteFromRoutes, c as removeRouteBasePath, s as normalizeRouteBasePath, t as _resolveRouteMatchFromRoutes } from "./route-matching-Bo6UqG-5.js";
17
- import { a as resolveRouteRequest, d as DEFERRED_BOUNDARY, l as validateRouteHydrationData, o as getRouteHydrationMetadata, p as isDeferred } from "./resolution-dVYwYXrI.js";
17
+ import { a as resolveRouteRequest, d as DEFERRED_BOUNDARY, l as validateRouteHydrationData, n as getRouteRenderContext, o as getRouteHydrationMetadata, p as isDeferred } from "./resolution-ClD-K7Lz.js";
18
18
  import { n as disposeRegisteredDefaultPortalScope, r as getDefaultPortalHost } from "./default-portal-runtime-DvMvWJVp.js";
19
19
  import { n as renderDocument, t as SSR_RENDER_DATA_ATTR } from "./ssr-DSHd_Q9K.js";
20
20
  //#region src/ssr/escape.ts
@@ -198,6 +198,7 @@ function createRenderContext(seed = 12345, opts = {}) {
198
198
  params: opts.params,
199
199
  routes: opts.routes,
200
200
  routeAuth: opts.routeAuth,
201
+ authContext: opts.authContext,
201
202
  basePath: opts.basePath,
202
203
  signal: opts.signal,
203
204
  dataRuntime: opts.dataRuntime ?? createDataRuntime({ queryCache }),
@@ -317,7 +318,11 @@ function resolvePolicyAwareSSRRoute(opts, routeTable) {
317
318
  if (!matched) throw new Error(`SSR: no route found for url: ${href}`);
318
319
  const resolved = getRouteRequestResultSync(resolveRouteRequest(href, {
319
320
  registry: opts.registry,
320
- mode: "ssr"
321
+ mode: "ssr",
322
+ auth: opts.auth,
323
+ authContext: opts.authContext,
324
+ request: opts.request,
325
+ signal: opts.signal
321
326
  }));
322
327
  if (resolved === null) throw new Error(`SSR: no route found for url: ${href}`);
323
328
  if (resolved.kind === "redirect") {
@@ -340,7 +345,8 @@ function resolvePolicyAwareSSRRoute(opts, routeTable) {
340
345
  ...matched.route,
341
346
  handler: routeHasSSRLoader(manifest, matched.route) ? resolved.handler : matched.route.handler
342
347
  },
343
- params: matched.params
348
+ params: matched.params,
349
+ authContext: getRouteRenderContext(resolved)?.auth
344
350
  };
345
351
  }
346
352
  throw new Error(`[Askr] SSR redirect limit exceeded (${MAX_SSR_REDIRECTS}).`);
@@ -464,8 +470,11 @@ function resolveSSRRouteRender(opts) {
464
470
  data,
465
471
  params: resolvedRoute.params,
466
472
  routes: routeTable,
473
+ routeAuth: opts.auth ?? opts.registry.manifest.auth,
474
+ signal: opts.signal ?? opts.request?.signal,
467
475
  dataRuntime: opts.dataRuntime,
468
476
  queryPrefetch: opts.queryPrefetch,
477
+ authContext: resolvedRoute.authContext,
469
478
  envelope: opts.envelope,
470
479
  cspNonce
471
480
  });
@@ -1194,7 +1203,8 @@ function renderToStringSync(component, props, options) {
1194
1203
  const ctx = createRenderContext(seed, {
1195
1204
  data: options?.data,
1196
1205
  envelope: options?.envelope,
1197
- cspNonce: nonce
1206
+ cspNonce: nonce,
1207
+ authContext: options?.authContext
1198
1208
  });
1199
1209
  return withRenderContext(ctx, () => {
1200
1210
  startRenderPhase(ctx.renderData);
@@ -1322,13 +1332,14 @@ function settleWithSignal(promise, signal) {
1322
1332
  function stripHydrationPayload(html) {
1323
1333
  return html.replace(/<script type="application\/json" data-askr-render-data="true">[\s\S]*?<\/script>$/, "");
1324
1334
  }
1325
- function renderBoundary(boundary, state, payload, seed, data, cspNonce) {
1335
+ function renderBoundary(boundary, state, payload, seed, data, cspNonce, authContext) {
1326
1336
  const styles = [];
1327
1337
  return {
1328
1338
  html: stripHydrationPayload(renderToStringSync(() => state === "fulfilled" ? boundary.fulfilled(payload) : boundary.rejected(payload), {}, {
1329
1339
  seed,
1330
1340
  envelope: data ?? void 0,
1331
1341
  cspNonce,
1342
+ authContext,
1332
1343
  onContext: (context) => styles.push(...context.ssrStyles.values())
1333
1344
  })),
1334
1345
  styles
@@ -1344,7 +1355,7 @@ function patchChunk(id, html, styles, cspNonce) {
1344
1355
  const selector = `askr-resolve[data-askr-deferred=${JSON.stringify(id)}]`;
1345
1356
  return `${styles.length === 0 ? "" : `<style data-askr-style-registry="true" data-askr-deferred-style="true"${cspNonce ? ` nonce="${escapeHtmlAttribute(cspNonce)}"` : ""}>${escapeStyleRawText(styles.map((style) => style.cssText).join("\n"))}\n</style>`}<template data-askr-deferred-patch="${escapeHtmlAttribute(id)}">${html}</template><script${cspNonce ? ` nonce="${escapeHtmlAttribute(cspNonce)}"` : ""} data-askr-deferred-apply="${escapeHtmlAttribute(id)}">(function(s){var t=s.previousElementSibling;var c=t&&t.previousElementSibling;var r=document.querySelector('style[data-askr-style-registry="true"]:not([data-askr-deferred-style])');if(c&&c.tagName==='STYLE'&&r&&r!==c){r.append(c.textContent||'');c.remove();}else if(c&&c.tagName==='STYLE'){c.removeAttribute('data-askr-deferred-style');}var b=document.querySelector(${JSON.stringify(selector)});if(b&&t){b.replaceWith(t.content.cloneNode(true));}if(t)t.remove();s.remove();})(document.currentScript)<\/script>`;
1346
1357
  }
1347
- function createDeferredRenderStream(initialHtml, boundaries, signal, seed, data, runtime, cspNonce) {
1358
+ function createDeferredRenderStream(initialHtml, boundaries, signal, seed, data, runtime, cspNonce, authContext) {
1348
1359
  const encoder = new TextEncoder();
1349
1360
  const local = new AbortController();
1350
1361
  let cancelled = false;
@@ -1381,7 +1392,7 @@ function createDeferredRenderStream(initialHtml, boundaries, signal, seed, data,
1381
1392
  try {
1382
1393
  const value = await settleWithSignal(boundary.promise, local.signal);
1383
1394
  if (!cancelled && !closed) {
1384
- const rendered = renderBoundary(boundary, "fulfilled", value, seed, data, cspNonce);
1395
+ const rendered = renderBoundary(boundary, "fulfilled", value, seed, data, cspNonce, authContext);
1385
1396
  controller.enqueue(encoder.encode(patchChunk(boundary.id, rendered.html, rendered.styles, cspNonce)));
1386
1397
  }
1387
1398
  } catch (error) {
@@ -1390,7 +1401,7 @@ function createDeferredRenderStream(initialHtml, boundaries, signal, seed, data,
1390
1401
  return;
1391
1402
  }
1392
1403
  if (!cancelled && !closed) {
1393
- const rendered = renderBoundary(boundary, "rejected", error, seed, data, cspNonce);
1404
+ const rendered = renderBoundary(boundary, "rejected", error, seed, data, cspNonce, authContext);
1394
1405
  controller.enqueue(encoder.encode(patchChunk(boundary.id, rendered.html, rendered.styles, cspNonce)));
1395
1406
  }
1396
1407
  }
@@ -1480,7 +1491,7 @@ async function renderRouteRequestInternal(options) {
1480
1491
  kind: "render",
1481
1492
  html,
1482
1493
  styles: Array.from(context.ssrStyles.values()),
1483
- ...boundaries.length > 0 ? { stream: createDeferredRenderStream(html, boundaries, signal, options.seed, context.hydrationData, runtime, cspNonce) } : {},
1494
+ ...boundaries.length > 0 ? { stream: createDeferredRenderStream(html, boundaries, signal, options.seed, context.hydrationData, runtime, cspNonce, context.authContext) } : {},
1484
1495
  params: resolved.params
1485
1496
  };
1486
1497
  if (resolved.record) Object.defineProperty(result, "record", {
@@ -1,7 +1,7 @@
1
- import { S as isProductionEnvironment } from "./access-d_DCdwqn.js";
2
- import { n as isBulkCommitActive, t as deferBulkCommitReadableNotification } from "./fastlane-DUxiFV9S.js";
1
+ import { S as isProductionEnvironment } from "./access-BucjYZcX.js";
2
+ import { n as isBulkCommitActive, t as deferBulkCommitReadableNotification } from "./fastlane-BKZduiBQ.js";
3
3
  import { i as claimHookIndex, p as getCurrentInstance } from "./component-scope-4I3yEMkb.js";
4
- import { l as notifyReadableReaders, o as markReactivePropsDirtySource, s as markReadableDerivedSubscribersDirty, u as recordReadableRead } from "./readable-D-JIKCg2.js";
4
+ import { l as notifyReadableReaders, o as markReactivePropsDirtySource, s as markReadableDerivedSubscribersDirty, u as recordReadableRead } from "./readable-Di1fzSwm.js";
5
5
  //#region src/runtime/state.ts
6
6
  /**
7
7
  * State primitive for Askr components
@@ -1,9 +1,9 @@
1
- import { o as getRuntimeRenderer } from "./access-d_DCdwqn.js";
1
+ import { o as getRuntimeRenderer } from "./access-BucjYZcX.js";
2
2
  import { f as getCurrentComponentInstance, m as getCurrentPortalScope } from "./component-scope-4I3yEMkb.js";
3
3
  import { n as Fragment, t as ELEMENT_TYPE } from "./jsx-DRS-qjiN.js";
4
- import { l as notifyReadableReaders, o as markReactivePropsDirtySource, s as markReadableDerivedSubscribersDirty, u as recordReadableRead } from "./readable-D-JIKCg2.js";
5
- import { t as cleanupComponent } from "./component-cleanup-DPe8claJ.js";
6
- import { c as getCurrentLifecycleCommitBatch, u as registerLifecycleTransaction } from "./lifecycle-batch-BYECQw8T.js";
4
+ import { l as notifyReadableReaders, o as markReactivePropsDirtySource, s as markReadableDerivedSubscribersDirty, u as recordReadableRead } from "./readable-Di1fzSwm.js";
5
+ import { t as cleanupComponent } from "./component-cleanup-jdbgjkT1.js";
6
+ import { c as getCurrentLifecycleCommitBatch, u as registerLifecycleTransaction } from "./lifecycle-batch-63aXFf2S.js";
7
7
  import { n as getActiveRenderContext } from "./render-context-B7ohlh6t.js";
8
8
  import { i as createSSRPortalHostToken, n as SSR_PORTAL_HOST, r as createSSRPortalAnchorToken, t as SSR_PORTAL_ANCHOR } from "./portal-w3oQ6oQU.js";
9
9
  import { i as registerDefaultPortalRuntime } from "./default-portal-runtime-DvMvWJVp.js";
@@ -1,4 +1,4 @@
1
- import { Bt as DataRuntime, Kt as Query, Wt as Mutation, dt as RouteAuthOptions, jt as RouteRegistry, nn as QueryStaleReason, sn as ComponentFunction, yt as RouteMatch } from "../index-DSqXWc77.js";
1
+ import { Et as RouteAuthOptions, Kt as RouteRegistry, Pt as RouteMatch, Sn as ComponentFunction, _n as QueryStaleReason, an as Mutation, sn as Query, tn as DataRuntime } from "../index-Dgjbo2gU.js";
2
2
  //#region src/testing/render.d.ts
3
3
  /** Options for {@link render} and {@link mount}. */
4
4
  interface RenderOptions {
@@ -9,6 +9,8 @@ interface RenderOptions {
9
9
  container?: HTMLElement;
10
10
  /** Surface lifecycle cleanup errors during unmount. */
11
11
  cleanupStrict?: boolean;
12
+ /** Isolated data runtime owned by this component render. */
13
+ dataRuntime?: DataRuntime;
12
14
  }
13
15
  /** Options for {@link renderRoute}. */
14
16
  interface RouteRenderOptions extends RenderOptions {
@@ -1,9 +1,9 @@
1
- import { r as flushRuntimeScheduler } from "../access-d_DCdwqn.js";
2
- import { u as recordReadableRead } from "../readable-D-JIKCg2.js";
1
+ import { r as flushRuntimeScheduler } from "../access-BucjYZcX.js";
2
+ import { u as recordReadableRead } from "../readable-Di1fzSwm.js";
3
3
  import { l as addInvalidationListener, t as createDataRuntime } from "../data-runtime-7t_Y0iv3.js";
4
- import { a as normalizeAsyncDataError, i as createReadableSource, o as notifySource } from "../data-BjUf0PPS.js";
4
+ import { a as normalizeAsyncDataError, o as notifySource, t as createReadableSource } from "../shared-CYBH3F8I.js";
5
5
  import { r as computeRouteActivityMatches } from "../route-matching-Bo6UqG-5.js";
6
- import { a as cleanupApp, r as createSPA, t as createIsland } from "../boot-DVwjHCNh.js";
6
+ import { a as cleanupApp, r as createSPA, t as createIsland } from "../boot-tWyF6121.js";
7
7
  //#region src/testing/render.ts
8
8
  const renderStates = /* @__PURE__ */ new WeakMap();
9
9
  const eventConstructorNames = {
@@ -149,7 +149,8 @@ function render(component, options) {
149
149
  createIsland({
150
150
  root: container,
151
151
  component,
152
- cleanupStrict: options?.cleanupStrict
152
+ cleanupStrict: options?.cleanupStrict,
153
+ dataRuntime: options?.dataRuntime
153
154
  });
154
155
  flush();
155
156
  return createRenderResult(container);
@@ -89,6 +89,11 @@ interface IntrinsicProps extends IntrinsicEventProps {
89
89
  hidden?: ReactiveProp<IntrinsicBooleanValue>;
90
90
  dir?: ReactiveProp<IntrinsicTextValue>;
91
91
  lang?: ReactiveProp<IntrinsicTextValue>;
92
+ contentEditable?: ReactiveProp<IntrinsicTextValue>;
93
+ draggable?: ReactiveProp<IntrinsicTextValue>;
94
+ enterKeyHint?: ReactiveProp<IntrinsicTextValue>;
95
+ inputMode?: ReactiveProp<IntrinsicTextValue>;
96
+ spellCheck?: ReactiveProp<IntrinsicTextValue>;
92
97
  [attr: `aria-${string}`]: ReactiveProp<IntrinsicAriaValue>;
93
98
  [attr: `data-${string}`]: ReactiveProp<IntrinsicDataValue>;
94
99
  }
@@ -1,6 +1,6 @@
1
1
  import { g as getHydrationRenderUrl, m as withHydrationVerificationRender } from "./render-context-B7ohlh6t.js";
2
2
  import { t as SSR_RENDER_DATA_ATTR } from "./ssr-DSHd_Q9K.js";
3
- import { a as renderResolvedToStringSync } from "./ssr-F87AcFMt.js";
3
+ import { a as renderResolvedToStringSync } from "./ssr-Doog-AfJ.js";
4
4
  //#region src/ssr/verify-hydration.ts
5
5
  function normalizeHydrationHtml(html) {
6
6
  const template = document.createElement("template");
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@askrjs/askr",
3
- "version": "0.2.2",
4
- "description": "Actor-backed deterministic UI framework",
3
+ "version": "0.2.4",
4
+ "description": "Lane-scheduled deterministic UI framework",
5
5
  "keywords": [
6
6
  "askr",
7
7
  "framework",
@@ -148,20 +148,20 @@
148
148
  "prepublishOnly": "npm run check"
149
149
  },
150
150
  "dependencies": {
151
- "@askrjs/auth": ">=0.2.0 <0.3.0",
152
- "@askrjs/schema": ">=0.2.0 <0.3.0"
151
+ "@askrjs/auth": ">=0.2.1 <0.3.0",
152
+ "@askrjs/schema": ">=0.2.1 <0.3.0"
153
153
  },
154
154
  "devDependencies": {
155
- "@types/node": "^26.2.0",
155
+ "@types/node": "^26.3.0",
156
156
  "@typescript/native": "npm:typescript@^7.0.2",
157
157
  "@vitest/browser-playwright": "4.1.10",
158
158
  "cross-env": "^10.1.0",
159
159
  "jsdom": "^30.0.1",
160
160
  "playwright": "^1.62.1",
161
- "publint": "^0.3.23",
161
+ "publint": "^0.3.24",
162
162
  "tsd": "^0.33.0",
163
163
  "typescript": "npm:@typescript/typescript6@^6.0.2",
164
- "vite": "^8.2.1",
164
+ "vite": "^8.2.2",
165
165
  "vite-plus": "^0.2.8"
166
166
  },
167
167
  "tsd": {
@@ -1,2 +0,0 @@
1
- import "./types-DkVJhVs9.js";
2
- import "./jsx-runtime-Cdd6Gkb0.js";