foldkit 0.166.0 → 0.167.0-canary.49dc36ef672d

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 (63) hide show
  1. package/dist/calendar/calendarDate.d.ts.map +1 -1
  2. package/dist/calendar/calendarDate.js +1 -1
  3. package/dist/command/index.d.ts +4 -4
  4. package/dist/command/index.js +4 -4
  5. package/dist/dom/index.d.ts +6 -0
  6. package/dist/dom/index.d.ts.map +1 -1
  7. package/dist/dom/index.js +3 -0
  8. package/dist/dom/public.d.ts +2 -2
  9. package/dist/dom/public.d.ts.map +1 -1
  10. package/dist/dom/public.js +1 -1
  11. package/dist/{subscription/fromEvent.d.ts → dom/streamFromEvent.d.ts} +31 -31
  12. package/dist/dom/streamFromEvent.d.ts.map +1 -0
  13. package/dist/{subscription/fromEvent.js → dom/streamFromEvent.js} +20 -20
  14. package/dist/{subscription/keyBindings.d.ts → dom/streamFromKeyBindings.d.ts} +7 -7
  15. package/dist/dom/streamFromKeyBindings.d.ts.map +1 -0
  16. package/dist/{subscription/keyBindings.js → dom/streamFromKeyBindings.js} +62 -17
  17. package/dist/{subscription/fromMediaQuery.d.ts → dom/streamFromMediaQuery.d.ts} +7 -7
  18. package/dist/dom/streamFromMediaQuery.d.ts.map +1 -0
  19. package/dist/{subscription/fromMediaQuery.js → dom/streamFromMediaQuery.js} +4 -4
  20. package/dist/experimental/server/document.d.ts +43 -0
  21. package/dist/experimental/server/document.d.ts.map +1 -0
  22. package/dist/experimental/server/document.js +42 -0
  23. package/dist/experimental/server/entry.d.ts +14 -7
  24. package/dist/experimental/server/entry.d.ts.map +1 -1
  25. package/dist/experimental/server/entry.js +8 -6
  26. package/dist/experimental/server/fetch.d.ts +11 -8
  27. package/dist/experimental/server/fetch.d.ts.map +1 -1
  28. package/dist/experimental/server/fetch.js +16 -1
  29. package/dist/experimental/server/index.d.ts +1 -0
  30. package/dist/experimental/server/index.d.ts.map +1 -1
  31. package/dist/experimental/server/index.js +1 -0
  32. package/dist/experimental/server/public.d.ts +2 -2
  33. package/dist/experimental/server/public.d.ts.map +1 -1
  34. package/dist/experimental/server/public.js +1 -1
  35. package/dist/experimental/server/server.d.ts +1 -1
  36. package/dist/port/port.d.ts +8 -8
  37. package/dist/port/port.d.ts.map +1 -1
  38. package/dist/port/port.js +8 -8
  39. package/dist/port/public.d.ts +1 -1
  40. package/dist/port/public.d.ts.map +1 -1
  41. package/dist/port/public.js +1 -1
  42. package/dist/runtime/hydrationHandoff.d.ts.map +1 -1
  43. package/dist/runtime/hydrationHandoff.js +4 -2
  44. package/dist/runtime/runtime.js +1 -1
  45. package/dist/subscription/animationFrame.d.ts +4 -4
  46. package/dist/subscription/animationFrame.d.ts.map +1 -1
  47. package/dist/subscription/animationFrame.js +3 -3
  48. package/dist/subscription/public.d.ts +2 -8
  49. package/dist/subscription/public.d.ts.map +1 -1
  50. package/dist/subscription/public.js +2 -5
  51. package/dist/subscription/subscription.d.ts +9 -9
  52. package/dist/subscription/subscription.d.ts.map +1 -1
  53. package/dist/subscription/subscription.js +6 -6
  54. package/dist/update/public.d.ts +2 -2
  55. package/dist/update/public.d.ts.map +1 -1
  56. package/dist/update/public.js +1 -1
  57. package/dist/update/update.d.ts +109 -0
  58. package/dist/update/update.d.ts.map +1 -1
  59. package/dist/update/update.js +70 -0
  60. package/package.json +1 -1
  61. package/dist/subscription/fromEvent.d.ts.map +0 -1
  62. package/dist/subscription/fromMediaQuery.d.ts.map +0 -1
  63. package/dist/subscription/keyBindings.d.ts.map +0 -1
@@ -141,6 +141,76 @@ export const foldChild = (childFold) => {
141
141
  const context = makeFoldContext(childFold.toParentMessage);
142
142
  return Function.dual(2, (model, input) => runChildFold(childFold, context, model, input));
143
143
  };
144
+ /** Folds one Submodel selected by key into the parent update. `readAt` and
145
+ * `writeAt` use the key to find and replace the child Model.
146
+ * `toParentMessage` receives the key when wrapping child Messages. The returned
147
+ * {@link FoldAt} runs data-first as `fold(model, key, input)` and data-last
148
+ * as `fold(key, input)` for {@link combine}.
149
+ *
150
+ * When `readAt` returns `None` for the key, the fold returns `{ model }`.
151
+ *
152
+ * `foldOutMessage` takes the key and a {@link FoldContext} of lifters bound
153
+ * to `toParentMessage`, then returns a matcher that produces a parent Step.
154
+ * Callbacks that do not need the lifters can omit the context parameter.
155
+ * To forward a child OutMessage, `toParentOutMessage` takes the key and
156
+ * returns a matcher that produces a parent OutMessage. Both factories are
157
+ * skipped when the child emits no OutMessage. If the local Step derives a
158
+ * parent OutMessage, that result takes precedence over forwarding.
159
+ *
160
+ * For example, the parent stores Applicant Submodels in an array and uses each
161
+ * entry's stable id as its key:
162
+ *
163
+ * ```ts
164
+ * const foldApplicant = Update.foldChildAt({
165
+ * update: Applicant.update,
166
+ * readAt: (model: Model, entryId: string) =>
167
+ * Option.map(
168
+ * Array.findFirst(
169
+ * model.applicants,
170
+ * applicant => applicant.id === entryId,
171
+ * ),
172
+ * applicant => applicant.entry,
173
+ * ),
174
+ * writeAt: (model, entryId, nextEntry) =>
175
+ * modifyFields(model, {
176
+ * applicants: Array.map(applicant =>
177
+ * applicant.id === entryId
178
+ * ? modifyFields(applicant, { entry: () => nextEntry })
179
+ * : applicant,
180
+ * ),
181
+ * }),
182
+ * toParentMessage: (entryId, message) =>
183
+ * Message.GotApplicantMessage({ entryId, message }),
184
+ * })
185
+ *
186
+ * GotApplicantMessage: ({ entryId, message }) =>
187
+ * foldApplicant(model, entryId, message)
188
+ * ```
189
+ *
190
+ * When only one child is active at a time, store that one Model and an
191
+ * `Option` of its key instead of a collection. */
192
+ export const foldChildAt = (keyedFold) => Function.dual(3, (model, key, input) => {
193
+ const toParentMessage = (message) => keyedFold.toParentMessage(key, message);
194
+ const toParentOutMessage = keyedFold.toParentOutMessage;
195
+ const foldOutMessage = keyedFold.foldOutMessage;
196
+ const childFold = {
197
+ update: keyedFold.update,
198
+ read: parentModel => keyedFold.readAt(parentModel, key),
199
+ write: (parentModel, nextChildModel) => keyedFold.writeAt(parentModel, key, nextChildModel),
200
+ toParentMessage,
201
+ ...(toParentOutMessage === undefined
202
+ ? {}
203
+ : {
204
+ toParentOutMessage: (outMessage) => toParentOutMessage(key)(outMessage),
205
+ }),
206
+ ...(foldOutMessage === undefined
207
+ ? {}
208
+ : {
209
+ foldOutMessage: (outMessage, context) => foldOutMessage(key, context)(outMessage),
210
+ }),
211
+ };
212
+ return runChildFold(childFold, makeFoldContext(toParentMessage), model, input);
213
+ });
144
214
  const makeFoldContext = (toParentMessage) => ({
145
215
  liftCommand: command => mapMessage(command, toParentMessage),
146
216
  liftCommands: commands => mapMessages(commands, toParentMessage),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foldkit",
3
- "version": "0.166.0",
3
+ "version": "0.167.0-canary.49dc36ef672d",
4
4
  "description": "A TypeScript frontend framework, built on Effect and architected like Elm",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"fromEvent.d.ts","sourceRoot":"","sources":["../../src/subscription/fromEvent.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fromMediaQuery.d.ts","sourceRoot":"","sources":["../../src/subscription/fromMediaQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE9C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,IAAI,QAAQ,CAAC;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,MAAM,CAAA;CAC5C,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,UAC3B,oBAAoB,CAAC,MAAM,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,MAAM,CAmBpB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyBindings.d.ts","sourceRoot":"","sources":["../../src/subscription/keyBindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAOR,MAAM,EAGP,MAAM,QAAQ,CAAA;AAEf,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,CAAA;AAE9C,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE/E,KAAK,WAAW,CAAC,MAAM,IAAI,QAAQ,CAAC;IAClC,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,MAAM,CAAA;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,GAClD,CACI,QAAQ,CAAC;IACP,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAClC,CAAC,GACF,QAAQ,CAAC;IACP,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAClD,YAAY,CAAC,EAAE,KAAK,CAAA;CACrB,CAAC,CACL,CAAA;AAEH,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAEhC,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC/C,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3C,MAAM,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,CAAA;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;CACjC,CAAC,CAAA;AA2sBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0EG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,UACxB,iBAAiB,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAuD,CAAA"}