foldkit 0.162.0 → 0.163.0-canary.085c0174a32b

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 (100) hide show
  1. package/README.md +4 -4
  2. package/dist/asyncData/asyncData.d.ts +1 -1
  3. package/dist/asyncData/asyncData.js +1 -1
  4. package/dist/buildToken.d.ts +6 -0
  5. package/dist/buildToken.d.ts.map +1 -1
  6. package/dist/buildToken.js +11 -6
  7. package/dist/devTools/protocol.d.ts +20 -0
  8. package/dist/devTools/protocol.d.ts.map +1 -1
  9. package/dist/devTools/protocol.js +19 -0
  10. package/dist/devTools/public.d.ts +1 -1
  11. package/dist/devTools/public.d.ts.map +1 -1
  12. package/dist/devTools/public.js +1 -1
  13. package/dist/devTools/store.d.ts.map +1 -1
  14. package/dist/devTools/store.js +16 -16
  15. package/dist/experimental/machine/machine.d.ts +4 -4
  16. package/dist/experimental/machine/machine.js +3 -3
  17. package/dist/experimental/server/serialize.d.ts.map +1 -1
  18. package/dist/experimental/server/serialize.js +86 -28
  19. package/dist/experimental/server/server.d.ts +29 -25
  20. package/dist/experimental/server/server.d.ts.map +1 -1
  21. package/dist/experimental/server/server.js +29 -46
  22. package/dist/html/index.d.ts +31 -20
  23. package/dist/html/index.d.ts.map +1 -1
  24. package/dist/html/index.js +1 -1
  25. package/dist/runtime/deepFreeze.d.ts +1 -1
  26. package/dist/runtime/deepFreeze.js +1 -1
  27. package/dist/runtime/documentMetadata.d.ts.map +1 -1
  28. package/dist/runtime/documentMetadata.js +69 -47
  29. package/dist/runtime/hydrationHandoff.js +4 -4
  30. package/dist/runtime/managedResourceFibers.d.ts +1 -1
  31. package/dist/runtime/managedResourceFibers.d.ts.map +1 -1
  32. package/dist/runtime/managedResourceFibers.js +3 -2
  33. package/dist/runtime/start.d.ts +9 -7
  34. package/dist/runtime/start.d.ts.map +1 -1
  35. package/dist/runtime/start.js +2 -1
  36. package/dist/runtime/subscriptionFibers.d.ts +1 -1
  37. package/dist/runtime/subscriptionFibers.d.ts.map +1 -1
  38. package/dist/runtime/subscriptionFibers.js +3 -2
  39. package/dist/schema/index.d.ts +15 -9
  40. package/dist/schema/index.d.ts.map +1 -1
  41. package/dist/snabbdom/eventlisteners.d.ts.map +1 -1
  42. package/dist/snabbdom/eventlisteners.js +5 -0
  43. package/dist/struct/index.d.ts +4 -4
  44. package/dist/struct/index.d.ts.map +1 -1
  45. package/dist/struct/index.js +4 -4
  46. package/dist/struct/public.d.ts +1 -1
  47. package/dist/struct/public.d.ts.map +1 -1
  48. package/dist/struct/public.js +1 -1
  49. package/dist/submodel/submodel.d.ts +3 -3
  50. package/dist/subscription/fromEvent.d.ts +47 -33
  51. package/dist/subscription/fromEvent.d.ts.map +1 -1
  52. package/dist/subscription/fromEvent.js +30 -25
  53. package/dist/subscription/fromMediaQuery.d.ts +57 -0
  54. package/dist/subscription/fromMediaQuery.d.ts.map +1 -0
  55. package/dist/subscription/fromMediaQuery.js +46 -0
  56. package/dist/subscription/keyBindings.d.ts +13 -11
  57. package/dist/subscription/keyBindings.d.ts.map +1 -1
  58. package/dist/subscription/keyBindings.js +9 -7
  59. package/dist/subscription/public.d.ts +3 -1
  60. package/dist/subscription/public.d.ts.map +1 -1
  61. package/dist/subscription/public.js +1 -0
  62. package/dist/test/apps/bubbling.js +5 -5
  63. package/dist/test/apps/colorPicker.js +2 -2
  64. package/dist/test/apps/contentEditableEditor.js +3 -3
  65. package/dist/test/apps/contextMenu.js +2 -2
  66. package/dist/test/apps/counter.d.ts.map +1 -1
  67. package/dist/test/apps/counter.js +8 -5
  68. package/dist/test/apps/crashOnRender.js +3 -3
  69. package/dist/test/apps/drafts.js +3 -3
  70. package/dist/test/apps/feedSocket.js +5 -5
  71. package/dist/test/apps/fileUpload.js +2 -2
  72. package/dist/test/apps/focusBoundary.js +3 -3
  73. package/dist/test/apps/formChild.js +4 -4
  74. package/dist/test/apps/interactions.js +7 -7
  75. package/dist/test/apps/keypress.js +3 -3
  76. package/dist/test/apps/keypressSelf.js +2 -2
  77. package/dist/test/apps/login.js +7 -7
  78. package/dist/test/apps/mountPanel.js +4 -4
  79. package/dist/test/apps/multiRole.js +2 -2
  80. package/dist/test/apps/pointer.d.ts +5 -1
  81. package/dist/test/apps/pointer.d.ts.map +1 -1
  82. package/dist/test/apps/pointer.js +16 -7
  83. package/dist/test/apps/resumeUpload.js +5 -5
  84. package/dist/test/apps/scorePanel.js +2 -2
  85. package/dist/test/apps/selectiveKeys.d.ts.map +1 -1
  86. package/dist/test/apps/selectiveKeys.js +5 -3
  87. package/dist/test/apps/uploads.d.ts.map +1 -1
  88. package/dist/test/apps/uploads.js +13 -7
  89. package/dist/test/query.d.ts +30 -15
  90. package/dist/test/query.d.ts.map +1 -1
  91. package/dist/test/query.js +172 -56
  92. package/dist/test/scene.d.ts +6 -2
  93. package/dist/test/scene.d.ts.map +1 -1
  94. package/dist/test/scene.js +27 -3
  95. package/dist/update/update.d.ts +4 -4
  96. package/dist/update/update.js +3 -3
  97. package/dist/vdom.d.ts +3 -3
  98. package/dist/vdom.d.ts.map +1 -1
  99. package/dist/vdom.js +17 -7
  100. package/package.json +9 -9
package/README.md CHANGED
@@ -45,7 +45,7 @@ import { Schema } from 'effect'
45
45
  import { Runtime, Update } from 'foldkit'
46
46
  import { Document, HtmlBuilder } from 'foldkit/html'
47
47
  import { defineMessageUnion } from 'foldkit/message'
48
- import { evo } from 'foldkit/struct'
48
+ import { modifyFields } from 'foldkit/struct'
49
49
 
50
50
  // MODEL
51
51
 
@@ -66,12 +66,12 @@ export type Message = typeof Message.Type
66
66
  export const update = (model: Model, message: Message) =>
67
67
  Message.match<Update.Return<Model, Message>>(message, {
68
68
  ClickedDecrement: () => ({
69
- model: evo(model, { count: count => count - 1 }),
69
+ model: modifyFields(model, { count: count => count - 1 }),
70
70
  }),
71
71
  ClickedIncrement: () => ({
72
- model: evo(model, { count: count => count + 1 }),
72
+ model: modifyFields(model, { count: count => count + 1 }),
73
73
  }),
74
- ClickedReset: () => ({ model: evo(model, { count: () => 0 }) }),
74
+ ClickedReset: () => ({ model: modifyFields(model, { count: () => 0 }) }),
75
75
  })
76
76
 
77
77
  // INIT
@@ -407,7 +407,7 @@ export declare const all: <const Inputs extends Iterable<AsyncData<any, any>> |
407
407
  *
408
408
  * // One update arm folds it in, whatever the previous state was:
409
409
  * SettledLoadNotes: ({ result }) => ({
410
- * model: evo(model, { notes: AsyncData.settle(result) }),
410
+ * model: modifyFields(model, { notes: AsyncData.settle(result) }),
411
411
  * })
412
412
  * ```
413
413
  */
@@ -418,7 +418,7 @@ export const all = (inputs) => {
418
418
  *
419
419
  * // One update arm folds it in, whatever the previous state was:
420
420
  * SettledLoadNotes: ({ result }) => ({
421
- * model: evo(model, { notes: AsyncData.settle(result) }),
421
+ * model: modifyFields(model, { notes: AsyncData.settle(result) }),
422
422
  * })
423
423
  * ```
424
424
  */
@@ -1,3 +1,9 @@
1
+ /** The build id compiled into this Foldkit artifact, when one was supplied.
2
+ * @internal */
3
+ export declare const injectedBuildId: string | undefined;
4
+ /** Uses an explicit build id when present and the compiled artifact id otherwise.
5
+ * @internal */
6
+ export declare const buildIdOrInjected: (buildId: string | undefined) => string | undefined;
1
7
  /** The attribute a hydratable render stamps the build id onto. */
2
8
  export declare const HYDRATION_BUILD_ATTRIBUTE = "data-foldkit-build";
3
9
  //# sourceMappingURL=buildToken.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildToken.d.ts","sourceRoot":"","sources":["../src/buildToken.ts"],"names":[],"mappings":"AAoBA,kEAAkE;AAClE,eAAO,MAAM,yBAAyB,uBAAuB,CAAA"}
1
+ {"version":3,"file":"buildToken.d.ts","sourceRoot":"","sources":["../src/buildToken.ts"],"names":[],"mappings":"AAoBA;eACe;AACf,eAAO,MAAM,eAAe,oBAA8B,CAAA;AAE1D;eACe;AACf,eAAO,MAAM,iBAAiB,YACnB,MAAM,GAAG,SAAS,KAC1B,MAAM,GAAG,SAAgE,CAAA;AAE5E,kEAAkE;AAClE,eAAO,MAAM,yBAAyB,uBAAuB,CAAA"}
@@ -11,11 +11,16 @@
11
11
  // DOM state on a stale page could otherwise be carried into a view that now
12
12
  // means something else.
13
13
  //
14
- // Both sides are given the id explicitly rather than reading it from a
15
- // compile-time constant inside this package. Vite externalizes an installed
16
- // dependency from a server build, where a define never reaches it, so a
17
- // framework-internal read is silently absent in exactly the production shape
18
- // that matters. Application code is always transformed, so the entries read
19
- // `import.meta.env.FOLDKIT_BUILD_ID` and pass what they find.
14
+ // The Vite plugin replaces this call while compiling the client and server
15
+ // artifacts. Leaving it as a function keeps direct Node use and builds without
16
+ // the plugin fail-closed: the framework sees no identity and refuses hydratable
17
+ // rendering or hydration instead of sharing a fallback across deployments.
18
+ const foldkitBuildIdPlaceholder = () => undefined;
19
+ /** The build id compiled into this Foldkit artifact, when one was supplied.
20
+ * @internal */
21
+ export const injectedBuildId = foldkitBuildIdPlaceholder();
22
+ /** Uses an explicit build id when present and the compiled artifact id otherwise.
23
+ * @internal */
24
+ export const buildIdOrInjected = (buildId) => (buildId === undefined ? injectedBuildId : buildId);
20
25
  /** The attribute a hydratable render stamps the build id onto. */
21
26
  export const HYDRATION_BUILD_ATTRIBUTE = 'data-foldkit-build';
@@ -573,4 +573,24 @@ export declare const EventFrame: Schema.Struct<{
573
573
  }>;
574
574
  /** A wire frame carrying a runtime lifecycle event. */
575
575
  export type EventFrame = typeof EventFrame.Type;
576
+ /** Increment when the relay record's wire format changes. */
577
+ export declare const RELAY_RECORD_VERSION = 1;
578
+ /** Directory name under `XDG_RUNTIME_DIR` or the system temporary directory. */
579
+ export declare const RELAY_REGISTRY_DIRECTORY_NAME = "foldkit-devtools-relays";
580
+ /** Environment variable that sets the relay registry directory. */
581
+ export declare const RELAY_REGISTRY_DIRECTORY_VARIABLE = "FOLDKIT_DEVTOOLS_RELAY_DIRECTORY";
582
+ /**
583
+ * Record published while a Vite relay listens. `root` selects the project;
584
+ * `id` distinguishes a restarted relay from the one it replaced.
585
+ */
586
+ export declare const RelayRecord: Schema.Struct<{
587
+ readonly version: Schema.Literal<1>;
588
+ readonly id: Schema.String;
589
+ readonly root: Schema.String;
590
+ readonly url: Schema.String;
591
+ readonly pid: Schema.Number;
592
+ readonly startedAt: Schema.Number;
593
+ }>;
594
+ /** Decoded record for a running DevTools MCP relay. */
595
+ export type RelayRecord = typeof RelayRecord.Type;
576
596
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/devTools/protocol.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/devTools/protocol.ts"],"names":[],"mappings":"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"}
@@ -186,3 +186,22 @@ export const EventFrame = Schema.Struct({
186
186
  maybeConnectionId: Schema.OptionFromNullOr(Schema.String),
187
187
  event: Event,
188
188
  });
189
+ // RELAY REGISTRY
190
+ /** Increment when the relay record's wire format changes. */
191
+ export const RELAY_RECORD_VERSION = 1;
192
+ /** Directory name under `XDG_RUNTIME_DIR` or the system temporary directory. */
193
+ export const RELAY_REGISTRY_DIRECTORY_NAME = 'foldkit-devtools-relays';
194
+ /** Environment variable that sets the relay registry directory. */
195
+ export const RELAY_REGISTRY_DIRECTORY_VARIABLE = 'FOLDKIT_DEVTOOLS_RELAY_DIRECTORY';
196
+ /**
197
+ * Record published while a Vite relay listens. `root` selects the project;
198
+ * `id` distinguishes a restarted relay from the one it replaced.
199
+ */
200
+ export const RelayRecord = Schema.Struct({
201
+ version: Schema.Literal(RELAY_RECORD_VERSION),
202
+ id: Schema.String,
203
+ root: Schema.String,
204
+ url: Schema.String,
205
+ pid: Schema.Number,
206
+ startedAt: Schema.Number,
207
+ });
@@ -1,2 +1,2 @@
1
- export { DiffValue, Event, EventFrame, KeyframeInfo, MAX_DISPATCH_BATCH_SIZE, MessageSchemaResult, MessageTagCount, ModelDiffChange, Request, RequestFrame, Response, ResponseFrame, RuntimeInfo, SerializedEntry, } from './protocol.js';
1
+ export { DiffValue, Event, EventFrame, KeyframeInfo, MAX_DISPATCH_BATCH_SIZE, MessageSchemaResult, MessageTagCount, ModelDiffChange, RELAY_RECORD_VERSION, RELAY_REGISTRY_DIRECTORY_NAME, RELAY_REGISTRY_DIRECTORY_VARIABLE, RelayRecord, Request, RequestFrame, Response, ResponseFrame, RuntimeInfo, SerializedEntry, } from './protocol.js';
2
2
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/devTools/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/devTools/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,6BAA6B,EAC7B,iCAAiC,EACjC,WAAW,EACX,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,eAAe,CAAA"}
@@ -1 +1 @@
1
- export { DiffValue, Event, EventFrame, KeyframeInfo, MAX_DISPATCH_BATCH_SIZE, MessageSchemaResult, MessageTagCount, ModelDiffChange, Request, RequestFrame, Response, ResponseFrame, RuntimeInfo, SerializedEntry, } from './protocol.js';
1
+ export { DiffValue, Event, EventFrame, KeyframeInfo, MAX_DISPATCH_BATCH_SIZE, MessageSchemaResult, MessageTagCount, ModelDiffChange, RELAY_RECORD_VERSION, RELAY_REGISTRY_DIRECTORY_NAME, RELAY_REGISTRY_DIRECTORY_VARIABLE, RelayRecord, Request, RequestFrame, Response, ResponseFrame, RuntimeInfo, SerializedEntry, } from './protocol.js';
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devTools/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,OAAO,EACP,OAAO,EAEP,MAAM,EAIN,eAAe,EAEhB,MAAM,QAAQ,CAAA;AAIf,eAAO,MAAM,UAAU,KAAK,CAAA;AAM5B,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACrC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;CACvC,CAAC,CAAA;AAEF,eAAO,MAAM,SAAS,EAAE,UAGvB,CAAA;AAID,eAAO,MAAM,WAAW,aACZ,OAAO,WACR,OAAO,KACf,UA4FF,CAAA;AAID,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;CACxD,CAAC,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAC,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IACtC,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IACvC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,IAAI,EAAE,UAAU,CAAA;CACjB,CAAC,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IACpC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACtC,YAAY,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC1C,eAAe,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;IAC3C,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CACzC,CAAC,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;IACrD,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC/C,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CACvC,CAAC,CAAA;AAcF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,UAAW,UAAU,KAAG,MAIjD,CAAA;AAEJ;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAW,UAAU,KAAG,MACV,CAAA;AAEzC;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAC,CAAA;AAEF,eAAO,MAAM,mBAAmB,WACtB,MAAM,YACL,0BAA0B,KAClC,MAAM,CAAC,MAAM,CAAC,aAAa,CAmW1B,CAAA;AAEJ,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,UAAU,EAAE,CACV,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,WAAW,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,KACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxB,aAAa,EAAE,CACb,OAAO,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EACnC,iBAAiB,EAAE,OAAO,EAC1B,gBAAgB,EAAE,OAAO,EACzB,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,EACtC,cAAc,EAAE,OAAO,KACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxB,qBAAqB,EAAE,CACrB,EAAE,EAAE,MAAM,EACV,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxB,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1D,oBAAoB,EAAE,CACpB,WAAW,EAAE,aAAa,CAAC,WAAW,CAAC,EACvC,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,KAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACxB,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3E,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC5D,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,QAAQ,EAAE,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;CACtD,CAAC,CAAA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devTools/store.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { Array, Effect, HashMap, HashSet, Match, Option, Predicate, Record, String, SubscriptionRef, pipe, } from 'effect';
2
- import { evo } from '../struct/index.js';
2
+ import { modifyFields } from '../struct/index.js';
3
3
  export const INIT_INDEX = -1;
4
4
  const DEFAULT_KEYFRAME_INTERVAL = 31;
5
5
  const DEFAULT_MAX_ENTRIES = 100;
@@ -126,14 +126,14 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
126
126
  const nextStartIndex = state.startIndex + keyframeInterval;
127
127
  const isPausedAtRetainedIndex = state.pausedAtIndex >= nextStartIndex ||
128
128
  state.pausedAtIndex === INIT_INDEX;
129
- return evo(state, {
129
+ return modifyFields(state, {
130
130
  entries: Array.drop(keyframeInterval),
131
131
  keyframes: HashMap.remove(state.startIndex),
132
132
  startIndex: () => nextStartIndex,
133
133
  isPaused: isPaused => isPaused && isPausedAtRetainedIndex,
134
134
  });
135
135
  };
136
- const recordInit = (model, commands, mountStarts = []) => SubscriptionRef.update(stateRef, state => evo(state, {
136
+ const recordInit = (model, commands, mountStarts = []) => SubscriptionRef.update(stateRef, state => modifyFields(state, {
137
137
  maybeInitModel: () => Option.some(model),
138
138
  initCommands: () => commands,
139
139
  initMountStarts: () => mountStarts,
@@ -147,7 +147,7 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
147
147
  ? computeDiff(modelBeforeUpdate, modelAfterUpdate)
148
148
  : emptyDiff;
149
149
  const hasChangedFields = HashSet.size(diff.changedPaths) > 0;
150
- const nextState = evo(state, {
150
+ const nextState = modifyFields(state, {
151
151
  entries: Array.append({
152
152
  tag: message._tag,
153
153
  message,
@@ -171,12 +171,12 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
171
171
  }
172
172
  });
173
173
  const recordResolvedCommand = (id, submodelPath) => SubscriptionRef.update(stateRef, state => {
174
- const updateCommands = (commands) => pipe(commands, Array.findFirstIndex(command => command.id === id), Option.flatMap(index => Array.modify(commands, index, command => evo(command, {
174
+ const updateCommands = (commands) => pipe(commands, Array.findFirstIndex(command => command.id === id), Option.flatMap(index => Array.modify(commands, index, command => modifyFields(command, {
175
175
  maybeSubmodelPath: () => Option.some(submodelPath),
176
176
  }))));
177
177
  const maybeInitCommands = updateCommands(state.initCommands);
178
178
  if (Option.isSome(maybeInitCommands)) {
179
- return evo(state, {
179
+ return modifyFields(state, {
180
180
  initCommands: () => maybeInitCommands.value,
181
181
  });
182
182
  }
@@ -186,11 +186,11 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
186
186
  }
187
187
  const maybeEntries = Array.modify(state.entries, maybeEntryIndex.value, entry => Option.match(updateCommands(entry.commands), {
188
188
  onNone: () => entry,
189
- onSome: nextCommands => evo(entry, { commands: () => nextCommands }),
189
+ onSome: nextCommands => modifyFields(entry, { commands: () => nextCommands }),
190
190
  }));
191
191
  return Option.match(maybeEntries, {
192
192
  onNone: () => state,
193
- onSome: nextEntries => evo(state, { entries: () => nextEntries }),
193
+ onSome: nextEntries => modifyFields(state, { entries: () => nextEntries }),
194
194
  });
195
195
  });
196
196
  /** Attaches Mount lifecycle events from the most recent render to the
@@ -209,11 +209,11 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
209
209
  return state;
210
210
  }
211
211
  return Array.match(state.entries, {
212
- onEmpty: () => evo(state, {
212
+ onEmpty: () => modifyFields(state, {
213
213
  initMountStarts: Array.appendAll(mountStarts),
214
214
  }),
215
- onNonEmpty: entries => evo(state, {
216
- entries: () => Array.modifyLastNonEmpty(entries, last => evo(last, {
215
+ onNonEmpty: entries => modifyFields(state, {
216
+ entries: () => Array.modifyLastNonEmpty(entries, last => modifyFields(last, {
217
217
  mountStarts: Array.appendAll(mountStarts),
218
218
  mountEnds: Array.appendAll(mountEnds),
219
219
  })),
@@ -243,14 +243,14 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
243
243
  return isTargetRetained
244
244
  ? [
245
245
  false,
246
- evo(currentState, {
246
+ modifyFields(currentState, {
247
247
  isPaused: () => true,
248
248
  pausedAtIndex: () => index,
249
249
  }),
250
250
  ]
251
251
  : [
252
252
  true,
253
- evo(currentState, {
253
+ modifyFields(currentState, {
254
254
  isPaused: () => false,
255
255
  }),
256
256
  ];
@@ -261,7 +261,7 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
261
261
  return model;
262
262
  });
263
263
  const resume = Effect.gen(function* () {
264
- yield* SubscriptionRef.update(stateRef, state => evo(state, {
264
+ yield* SubscriptionRef.update(stateRef, state => modifyFields(state, {
265
265
  isPaused: () => false,
266
266
  }));
267
267
  yield* bridge.markRenderPending;
@@ -274,7 +274,7 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
274
274
  return state;
275
275
  }
276
276
  else {
277
- return evo(state, {
277
+ return modifyFields(state, {
278
278
  entries: () => [],
279
279
  startIndex: () => 0,
280
280
  pausedAtIndex: () => 0,
@@ -296,7 +296,7 @@ export const createDevToolsStore = (bridge, options = {}) => Effect.gen(function
296
296
  onSome: ({ diff }) => diff,
297
297
  }));
298
298
  });
299
- const updateLatestModel = (model) => SubscriptionRef.update(stateRef, evo({ maybeLatestModel: () => Option.some(model) }));
299
+ const updateLatestModel = (model) => SubscriptionRef.update(stateRef, modifyFields({ maybeLatestModel: () => Option.some(model) }));
300
300
  return {
301
301
  recordInit,
302
302
  recordMessage,
@@ -78,7 +78,7 @@ type GuardValueOf<GuardResult> = [GuardResult] extends [boolean] ? void : Option
78
78
  * The transition table: for each source state tag, the Messages it responds
79
79
  * to and the Edge (or ordered guard list) each Message fires. States absent
80
80
  * from the table, and Messages absent from a state's `on` record, are
81
- * ignored: {@link Machine.step} reports them as `Ignored` rather than
81
+ * ignored: `Machine.step` reports them as `Ignored` rather than
82
82
  * transitioning.
83
83
  *
84
84
  * @experimental Ships from `foldkit/experimental/machine`; expect breaking changes while the API settles.
@@ -190,8 +190,8 @@ export declare const otherwise: <State extends Tagged, Message extends Tagged, S
190
190
  /**
191
191
  * Declares that a Message is intentionally ignored when every preceding
192
192
  * {@link when} guard declines. Evaluation stops at this fallback, and
193
- * {@link Machine.step} reports `ExplicitlyIgnored`. Edges listed after it are
194
- * reported by {@link Machine.deadTransitions} as `ShadowedByIgnore`.
193
+ * `Machine.step` reports `ExplicitlyIgnored`. Edges listed after it are
194
+ * reported by `Machine.deadTransitions` as `ShadowedByIgnore`.
195
195
  *
196
196
  * @experimental Ships from `foldkit/experimental/machine`; expect breaking changes while the API settles.
197
197
  */
@@ -340,7 +340,7 @@ export type FoldConfig<ParentModel, State extends Tagged, Message extends Tagged
340
340
  * machine: uploadMachine,
341
341
  * read: (model: Model) => Option.some(model.upload),
342
342
  * write: (model, nextUpload) =>
343
- * evo(model, { upload: () => nextUpload }),
343
+ * modifyFields(model, { upload: () => nextUpload }),
344
344
  * context: model => model.uploadQueues,
345
345
  * })
346
346
  *
@@ -106,8 +106,8 @@ export const otherwise = (edge) => ({
106
106
  /**
107
107
  * Declares that a Message is intentionally ignored when every preceding
108
108
  * {@link when} guard declines. Evaluation stops at this fallback, and
109
- * {@link Machine.step} reports `ExplicitlyIgnored`. Edges listed after it are
110
- * reported by {@link Machine.deadTransitions} as `ShadowedByIgnore`.
109
+ * `Machine.step` reports `ExplicitlyIgnored`. Edges listed after it are
110
+ * reported by `Machine.deadTransitions` as `ShadowedByIgnore`.
111
111
  *
112
112
  * @experimental Ships from `foldkit/experimental/machine`; expect breaking changes while the API settles.
113
113
  */
@@ -133,7 +133,7 @@ const transitionFoldedMachine = (config, model, state, message) => {
133
133
  * machine: uploadMachine,
134
134
  * read: (model: Model) => Option.some(model.upload),
135
135
  * write: (model, nextUpload) =>
136
- * evo(model, { upload: () => nextUpload }),
136
+ * modifyFields(model, { upload: () => nextUpload }),
137
137
  * context: model => model.uploadQueues,
138
138
  * })
139
139
  *
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/experimental/server/serialize.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGpD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAC,CAAA;AAsNF;;;GAGG;AACH,eAAO,MAAM,UAAU,UAAW,MAAM,KAAG,MAM1C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UAAW,MAAM,KAAG,MAMpD,CAAA;AA0MD,eAAO,MAAM,sBAAsB,eACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,KACxD,MAAM,GAAG,SAMX,CAAA;AA2hBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,SAClB,KAAK,GAAG,IAAI,YACR,gBAAgB,KACzB,MAUF,CAAA"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/experimental/server/serialize.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAGpD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B,CAAC,CAAA;AAsNF;;;GAGG;AACH,eAAO,MAAM,UAAU,UAAW,MAAM,KAAG,MAM1C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,UAAW,MAAM,KAAG,MAMpD,CAAA;AA0MD,eAAO,MAAM,sBAAsB,eACrB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,KACxD,MAAM,GAAG,SAMX,CAAA;AAsmBD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,SAClB,KAAK,GAAG,IAAI,YACR,gBAAgB,KACzB,MA2BF,CAAA"}
@@ -406,21 +406,58 @@ const leadingTextOf = (node) => {
406
406
  }
407
407
  return undefined;
408
408
  };
409
- // NOTE: the serializer recurses per element, so a tree nested thousands of
410
- // elements deep, typically from mapping untrusted hierarchical data straight
411
- // to markup, would exhaust the call stack. The depth is bounded well above any
412
- // real view and refused past the limit, so a hostile input becomes a typed
413
- // SerializationError rather than a stack overflow.
409
+ // NOTE: a view nested thousands of elements deep, typically from mapping
410
+ // untrusted hierarchical data straight to markup, is refused. The depth limit
411
+ // sits well above any real view, so a hostile input becomes a typed
412
+ // SerializationError. The limit is enforced by a pass that does not recurse,
413
+ // before the serializer walks the tree, so the refusal does not depend on how
414
+ // much call stack the runtime has or the caller has already used. Walks that
415
+ // still recurse, such as `hasOptionDescendant` and the parse5 checks in
416
+ // `server.ts`, are bounded by it for elements the view builds. Content inside a
417
+ // trusted `h.InnerHTML` is not counted.
414
418
  const MAX_RENDER_DEPTH = 1000;
415
- const serializeChildren = (output, context, node, depth, selectValue) => {
416
- const children = node.children;
419
+ const assertWithinRenderDepth = (root) => {
420
+ const pendingEntries = [
421
+ { node: root, depth: 0 },
422
+ ];
423
+ for (let entry = pendingEntries.pop(); entry !== undefined; entry = pendingEntries.pop()) {
424
+ const { depth, node } = entry;
425
+ if (depth > MAX_RENDER_DEPTH) {
426
+ throw new Error(`[foldkit] renderToString exceeded the maximum render depth of ${MAX_RENDER_DEPTH}. ` +
427
+ 'A view nesting elements this deeply, often from mapping untrusted ' +
428
+ 'hierarchical data straight to markup, is refused to protect the ' +
429
+ 'render stack.');
430
+ }
431
+ if (typeof node === 'string') {
432
+ continue;
433
+ }
434
+ const { children } = node;
435
+ if (children !== undefined) {
436
+ const childDepth = depth + 1;
437
+ for (const child of children) {
438
+ pendingEntries.push({ node: child, depth: childDepth });
439
+ }
440
+ }
441
+ }
442
+ };
443
+ const scheduleContent = (output, workStack, node, closeElementStep) => {
444
+ const { childSelectValue } = closeElementStep;
445
+ const { children } = node;
417
446
  if (children !== undefined) {
418
- for (const child of children) {
419
- serializeNode(output, context, child, depth + 1, undefined, selectValue);
447
+ workStack.push(closeElementStep);
448
+ for (let index = children.length - 1; index >= 0; index--) {
449
+ workStack.push({
450
+ _tag: 'VisitNode',
451
+ node: Array.getUnsafe(children, index),
452
+ selectValue: childSelectValue,
453
+ });
420
454
  }
421
455
  }
422
- else if (node.text !== undefined) {
423
- output.push(escapeText(node.text));
456
+ else {
457
+ if (node.text !== undefined) {
458
+ output.push(escapeText(node.text));
459
+ }
460
+ workStack.push(closeElementStep);
424
461
  }
425
462
  };
426
463
  // NOTE: an option without a value prop falls back to its label the way the
@@ -552,7 +589,7 @@ const selectValueForChildren = (tagName, node, inherited) => {
552
589
  }
553
590
  return undefined;
554
591
  };
555
- const serializeElement = (output, context, node, selector, depth, extraAttributes, selectValue) => {
592
+ const openElement = (output, context, workStack, node, selector, extraAttributes, selectValue) => {
556
593
  const authoredTagName = tagNameFromSelector(selector);
557
594
  if (!TAG_NAME_PATTERN.test(authoredTagName)) {
558
595
  throw new Error(`[foldkit] Cannot serialize the invalid tag name "${authoredTagName}". Tag ` +
@@ -663,6 +700,12 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
663
700
  const childSelectValue = isForeignNamespace
664
701
  ? undefined
665
702
  : selectValueForChildren(tagName, node, selectValue);
703
+ const closeElementStep = {
704
+ _tag: 'CloseElement',
705
+ tagName,
706
+ childSelectValue,
707
+ selectValue,
708
+ };
666
709
  const isHtmlRawText = !isForeignNamespace && RAW_TEXT_ELEMENTS.has(tagName);
667
710
  const isHtmlRcdata = !isForeignNamespace && RCDATA_ELEMENTS.has(tagName);
668
711
  const innerHtml = data?.props?.['innerHTML'];
@@ -689,6 +732,7 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
689
732
  output.push('\n');
690
733
  }
691
734
  output.push(innerHtml);
735
+ workStack.push(closeElementStep);
692
736
  }
693
737
  else if (!isForeignNamespace && tagName === 'textarea') {
694
738
  const content = controlledValueContent(data?.props);
@@ -697,12 +741,13 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
697
741
  output.push('\n');
698
742
  }
699
743
  output.push(escapeText(content));
744
+ workStack.push(closeElementStep);
700
745
  }
701
746
  else {
702
747
  if (leadingTextOf(node)?.startsWith('\n')) {
703
748
  output.push('\n');
704
749
  }
705
- serializeChildren(output, context, node, depth, childSelectValue);
750
+ scheduleContent(output, workStack, node, closeElementStep);
706
751
  }
707
752
  }
708
753
  else if (!isForeignNamespace && tagName === 'output') {
@@ -712,16 +757,17 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
712
757
  const content = controlledValueContent(data?.props);
713
758
  if (content !== undefined) {
714
759
  output.push(escapeText(content));
760
+ workStack.push(closeElementStep);
715
761
  }
716
762
  else {
717
- serializeChildren(output, context, node, depth, childSelectValue);
763
+ scheduleContent(output, workStack, node, closeElementStep);
718
764
  }
719
765
  }
720
766
  else if (!isForeignNamespace && NEWLINE_DROPPING_ELEMENTS.has(tagName)) {
721
767
  if (leadingTextOf(node)?.startsWith('\n')) {
722
768
  output.push('\n');
723
769
  }
724
- serializeChildren(output, context, node, depth, childSelectValue);
770
+ scheduleContent(output, workStack, node, closeElementStep);
725
771
  }
726
772
  else if (isHtmlRawText) {
727
773
  const rawText = collectRawText(node);
@@ -730,10 +776,14 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
730
776
  assertNoscriptTextIsSafe(rawText);
731
777
  }
732
778
  output.push(rawText);
779
+ workStack.push(closeElementStep);
733
780
  }
734
781
  else {
735
- serializeChildren(output, context, node, depth, childSelectValue);
782
+ scheduleContent(output, workStack, node, closeElementStep);
736
783
  }
784
+ };
785
+ const closeElement = (output, closeElementStep) => {
786
+ const { childSelectValue, selectValue, tagName } = closeElementStep;
737
787
  if (childSelectValue !== undefined &&
738
788
  childSelectValue !== selectValue &&
739
789
  !childSelectValue.consumed &&
@@ -747,16 +797,7 @@ const serializeElement = (output, context, node, selector, depth, extraAttribute
747
797
  }
748
798
  output.push(`</${tagName}>`);
749
799
  };
750
- const serializeNode = (output, context, node, depth, extraAttributes, selectValue) => {
751
- if (depth > MAX_RENDER_DEPTH) {
752
- throw new Error(`[foldkit] renderToString exceeded the maximum render depth of ${MAX_RENDER_DEPTH}. ` +
753
- 'A view nesting elements this deeply, often from mapping untrusted ' +
754
- 'hierarchical data straight to markup, is refused to protect the ' +
755
- 'render stack.');
756
- }
757
- if (node === null) {
758
- return;
759
- }
800
+ const visitNode = (output, context, workStack, node, extraAttributes, selectValue) => {
760
801
  if (typeof node === 'string') {
761
802
  output.push(escapeText(node));
762
803
  return;
@@ -774,7 +815,7 @@ const serializeNode = (output, context, node, depth, extraAttributes, selectValu
774
815
  output.push(`<!--${commentText}-->`);
775
816
  return;
776
817
  }
777
- serializeElement(output, context, node, selector, depth, extraAttributes, selectValue);
818
+ openElement(output, context, workStack, node, selector, extraAttributes, selectValue);
778
819
  };
779
820
  /** Serializes a view-produced vnode tree to an HTML string. Event handlers and
780
821
  * hooks are behavior, not markup, and are skipped; attrs, class, dataset,
@@ -793,10 +834,27 @@ export const serializeHtml = (root, options) => {
793
834
  if (root === null) {
794
835
  return '<!---->';
795
836
  }
837
+ assertWithinRenderDepth(root);
796
838
  const context = {
797
839
  emitHydrationMarkers: options?.emitHydrationMarkers ?? false,
798
840
  };
799
841
  const output = [];
800
- serializeNode(output, context, root, 0, options?.rootAttributes);
842
+ const workStack = [
843
+ {
844
+ _tag: 'VisitNode',
845
+ node: root,
846
+ selectValue: undefined,
847
+ extraAttributes: options?.rootAttributes,
848
+ },
849
+ ];
850
+ for (let step = workStack.pop(); step !== undefined; step = workStack.pop()) {
851
+ if (step._tag === 'VisitNode') {
852
+ const { node, extraAttributes, selectValue } = step;
853
+ visitNode(output, context, workStack, node, extraAttributes, selectValue);
854
+ }
855
+ else {
856
+ closeElement(output, step);
857
+ }
858
+ }
801
859
  return output.join('');
802
860
  };