@effect-app/vue 4.0.0-beta.98 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +2707 -0
  2. package/dist/atomQuery.d.ts +120 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +434 -0
  5. package/dist/commander.d.ts +318 -43
  6. package/dist/commander.d.ts.map +1 -1
  7. package/dist/commander.js +593 -81
  8. package/dist/confirm.d.ts +5 -3
  9. package/dist/confirm.d.ts.map +1 -1
  10. package/dist/confirm.js +12 -14
  11. package/dist/dependencyMetadata.d.ts +18 -0
  12. package/dist/dependencyMetadata.d.ts.map +1 -0
  13. package/dist/dependencyMetadata.js +67 -0
  14. package/dist/errorReporter.d.ts +6 -4
  15. package/dist/errorReporter.d.ts.map +1 -1
  16. package/dist/errorReporter.js +14 -19
  17. package/dist/form.d.ts +5 -5
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/form.js +16 -10
  20. package/dist/internal/tanstackQuery.d.ts +9 -0
  21. package/dist/internal/tanstackQuery.d.ts.map +1 -0
  22. package/dist/internal/tanstackQuery.js +204 -0
  23. package/dist/intl.d.ts +4 -4
  24. package/dist/intl.d.ts.map +1 -1
  25. package/dist/intl.js +2 -2
  26. package/dist/lib.d.ts +8 -10
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/lib.js +37 -12
  29. package/dist/liveQueryInvalidation.d.ts +16 -0
  30. package/dist/liveQueryInvalidation.d.ts.map +1 -0
  31. package/dist/liveQueryInvalidation.js +115 -0
  32. package/dist/makeClient.d.ts +232 -109
  33. package/dist/makeClient.d.ts.map +1 -1
  34. package/dist/makeClient.js +416 -84
  35. package/dist/makeContext.d.ts.map +1 -1
  36. package/dist/makeIntl.d.ts.map +1 -1
  37. package/dist/makeUseCommand.d.ts +3 -2
  38. package/dist/makeUseCommand.d.ts.map +1 -1
  39. package/dist/makeUseCommand.js +2 -2
  40. package/dist/mutate.d.ts +110 -41
  41. package/dist/mutate.d.ts.map +1 -1
  42. package/dist/mutate.js +236 -59
  43. package/dist/query.d.ts +161 -44
  44. package/dist/query.d.ts.map +1 -1
  45. package/dist/query.js +382 -113
  46. package/dist/queryLifetime.d.ts +25 -0
  47. package/dist/queryLifetime.d.ts.map +1 -0
  48. package/dist/queryLifetime.js +54 -0
  49. package/dist/routeParams.d.ts +4 -4
  50. package/dist/routeParams.d.ts.map +1 -1
  51. package/dist/routeParams.js +4 -3
  52. package/dist/runtime.d.ts +1 -17
  53. package/dist/runtime.d.ts.map +1 -1
  54. package/dist/runtime.js +2 -38
  55. package/dist/suspense.d.ts +19 -0
  56. package/dist/suspense.d.ts.map +1 -0
  57. package/dist/suspense.js +38 -0
  58. package/dist/toast.d.ts +1 -45
  59. package/dist/toast.d.ts.map +1 -1
  60. package/dist/toast.js +2 -32
  61. package/dist/withToast.d.ts +1 -24
  62. package/dist/withToast.d.ts.map +1 -1
  63. package/dist/withToast.js +2 -45
  64. package/docs/atom-query-api-redesign.md +207 -0
  65. package/docs/mutation-command-atoms.md +40 -0
  66. package/docs/query-key-invalidation.md +107 -0
  67. package/examples/streamMutation.ts +72 -0
  68. package/package.json +35 -94
  69. package/src/atomQuery.ts +600 -0
  70. package/src/commander.ts +1064 -116
  71. package/src/confirm.ts +12 -14
  72. package/src/dependencyMetadata.ts +84 -0
  73. package/src/errorReporter.ts +65 -75
  74. package/src/form.ts +22 -15
  75. package/src/index.ts +7 -7
  76. package/src/internal/tanstackQuery.ts +308 -0
  77. package/src/intl.ts +2 -2
  78. package/src/lib.ts +51 -23
  79. package/src/liveQueryInvalidation.ts +138 -0
  80. package/src/makeClient.ts +972 -263
  81. package/src/makeIntl.ts +2 -2
  82. package/src/makeUseCommand.ts +8 -5
  83. package/src/mutate.ts +407 -154
  84. package/src/query.ts +758 -242
  85. package/src/queryLifetime.ts +74 -0
  86. package/src/routeParams.ts +7 -7
  87. package/src/runtime.ts +1 -54
  88. package/src/suspense.ts +43 -0
  89. package/src/toast.ts +1 -52
  90. package/src/withToast.ts +1 -99
  91. package/test/Mutation.test.ts +104 -17
  92. package/test/dependencyInvalidation.test.ts +444 -0
  93. package/test/dist/dependencyInvalidation.test.d.ts.map +1 -0
  94. package/test/dist/form.test.d.ts.map +1 -1
  95. package/test/dist/inactiveInvalidation.test.d.ts.map +1 -0
  96. package/test/dist/interrupt-refetch-repro.test.d.ts.map +1 -0
  97. package/test/dist/lib.test.d.ts.map +1 -0
  98. package/test/dist/liveQueryInvalidation.test.d.ts.map +1 -0
  99. package/test/dist/query-span.test.d.ts.map +1 -0
  100. package/test/dist/queryOptions.test.d.ts.map +1 -0
  101. package/test/dist/streamFinal.test.d.ts.map +1 -0
  102. package/test/dist/streamFn.test.d.ts.map +1 -0
  103. package/test/dist/stubs.d.ts +3681 -256
  104. package/test/dist/stubs.d.ts.map +1 -1
  105. package/test/dist/stubs.js +166 -25
  106. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  107. package/test/dist/suspense.test.d.ts.map +1 -0
  108. package/test/form-validation-errors.test.ts +2 -1
  109. package/test/form.test.ts +2 -1
  110. package/test/inactiveInvalidation.test.ts +172 -0
  111. package/test/interrupt-refetch-repro.test.ts +625 -0
  112. package/test/lib.test.ts +240 -0
  113. package/test/liveQueryInvalidation.test.ts +108 -0
  114. package/test/makeClient.test.ts +414 -32
  115. package/test/query-span.test.ts +92 -0
  116. package/test/queryOptions.test.ts +88 -0
  117. package/test/streamFinal.test.ts +64 -0
  118. package/test/streamFn.test.ts +457 -0
  119. package/test/stubs.ts +194 -36
  120. package/test/suspense-regression.test.ts +168 -0
  121. package/test/suspense.test.ts +160 -0
  122. package/tsconfig.examples.json +20 -0
  123. package/tsconfig.json +9 -1
  124. package/tsconfig.src.json +34 -34
  125. package/tsconfig.test.json +2 -2
  126. package/vitest.config.ts +5 -5
  127. package/eslint.config.mjs +0 -24
  128. package/tsconfig.json.bak +0 -12
package/dist/commander.js CHANGED
@@ -1,13 +1,24 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { asResult, reportRuntimeError } from "@effect-app/vue";
3
2
  import { reportMessage } from "@effect-app/vue/errorReporter";
4
- import { Cause, Context, Effect, flow, Layer, Match, MutableHashMap, Option, Predicate, S } from "effect-app";
3
+ import { deepToRaw, reportRuntimeError } from "@effect-app/vue/lib";
4
+ import { asResult, asStreamResult } from "@effect-app/vue/mutate";
5
5
  import { SupportedErrors } from "effect-app/client";
6
- import { OperationFailure, OperationSuccess } from "effect-app/Operations";
6
+ import * as Context from "effect-app/Context";
7
+ import * as Effect from "effect-app/Effect";
8
+ import * as Layer from "effect-app/Layer";
9
+ import * as Option from "effect-app/Option";
10
+ import * as S from "effect-app/Schema";
7
11
  import { isGeneratorFunction, wrapEffect } from "effect-app/utils";
8
- import { computed, reactive, ref } from "vue";
12
+ import * as Cause from "effect/Cause";
13
+ import { flow } from "effect/Function";
14
+ import * as MutableHashMap from "effect/MutableHashMap";
15
+ import * as Predicate from "effect/Predicate";
16
+ import * as AsyncResult from "effect/reactivity/AsyncResult";
17
+ import * as Stream from "effect/Stream";
18
+ import { computed, reactive, ref, toRaw } from "vue";
9
19
  import { Confirm } from "./confirm.js";
10
20
  import { I18n } from "./intl.js";
21
+ import { CurrentToastId, Toast } from "./toast.js";
11
22
  import { WithToast } from "./withToast.js";
12
23
  export const DefaultIntl = {
13
24
  de: {
@@ -39,39 +50,86 @@ export const DefaultIntl = {
39
50
  };
40
51
  export class CommandContext extends Context.Service()("CommandContext") {
41
52
  }
53
+ /**
54
+ * Service available inside `streamFn` stream handlers that lets you imperatively push
55
+ * progress updates to the command's reactive `progress` ref.
56
+ *
57
+ * Use `Command.mapProgress(fn)` or `Command.updateProgress(progress)` to interact with this service.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * // Using mapProgress (recommended) — applied as a stream pipe operator:
62
+ * const exportCmd = Command.streamFn("exportData")(
63
+ * function*(arg, ctx) {
64
+ * return makeExportStream(arg.id).pipe(
65
+ * Command.mapProgress((r) =>
66
+ * AsyncResult.isSuccess(r) && r.value._tag === "OperationProgress"
67
+ * ? { text: `${r.value.completed}/${r.value.total}`, percentage: r.value.completed / r.value.total * 100 }
68
+ * : undefined
69
+ * )
70
+ * )
71
+ * }
72
+ * )
73
+ * // exportCmd.progress is updated for every OperationProgress event
74
+ * ```
75
+ */
76
+ export class CommandProgress extends Context.Reference("Commander.CommandProgress", {
77
+ defaultValue: () => ({ update: (_progress) => Effect.void })
78
+ }) {
79
+ }
42
80
  /**
43
81
  * Use to wrap emit calls with a callback to signal completion.
44
82
  * Useful when the publisher wants to wait for the subscriber to finish processing.
45
83
  */
46
84
  export const wrapEmit = (emit, event) => (value) => new Promise((resolve) => emit(event, value, resolve));
47
- const renderErrorMaker = I18n.useSync(({ intl }) => (action, errorRenderer) => (e, ...args) => {
48
- if (errorRenderer) {
49
- const m = errorRenderer(e, action, ...args);
50
- if (m !== undefined) {
51
- return m;
85
+ export class CommanderErrorRenderers extends Context.Reference("Commander.ErrorRenderers", {
86
+ defaultValue: () => []
87
+ }) {
88
+ }
89
+ export const makeRegisteredErrorRenderer = (guard, render) => ({
90
+ guard,
91
+ render
92
+ });
93
+ const renderErrorMaker = Effect.gen(function* () {
94
+ const { intl } = yield* I18n;
95
+ const registeredRenderers = yield* CommanderErrorRenderers;
96
+ return ((action, errorRenderer) => (e, ...args) => {
97
+ if (errorRenderer) {
98
+ const m = errorRenderer(e, action, ...args);
99
+ if (m !== undefined) {
100
+ return m;
101
+ }
52
102
  }
53
- }
54
- if (!S.is(SupportedErrors)(e) && !S.isSchemaError(e)) {
55
- if (typeof e === "object" && e !== null) {
56
- if ("message" in e) {
57
- return `${e.message}`;
103
+ for (const entry of registeredRenderers) {
104
+ if (!entry.guard(e)) {
105
+ continue;
58
106
  }
59
- if ("_tag" in e) {
60
- return `${e._tag}`;
107
+ const m = entry.render(e);
108
+ if (m !== undefined) {
109
+ return m;
61
110
  }
62
111
  }
63
- return "";
64
- }
65
- const e2 = e;
66
- return Match.value(e2).pipe(Match.tags({
67
- NotFoundError: (e) => {
68
- return intl.formatMessage({ id: "handle.not_found" }, { type: e.type, id: e.id });
69
- },
70
- SchemaError: (e) => {
71
- console.warn(e.toString());
112
+ if (!S.is(SupportedErrors)(e) && !S.isSchemaError(e)) {
113
+ if (typeof e === "object" && e !== null) {
114
+ if ("message" in e) {
115
+ return `${e.message}`;
116
+ }
117
+ if ("_tag" in e) {
118
+ return `${e._tag}`;
119
+ }
120
+ }
121
+ return "";
122
+ }
123
+ const e2 = e;
124
+ if (e2._tag === "NotFoundError") {
125
+ return intl.formatMessage({ id: "handle.not_found" }, { type: e2.type, id: String(e2.id) });
126
+ }
127
+ if (e2._tag === "SchemaError") {
128
+ console.warn(e2.toString());
72
129
  return intl.formatMessage({ id: "validation.failed" });
73
130
  }
74
- }), Match.orElse((e) => `${e.message ?? e._tag ?? e}`));
131
+ return e2.message ?? e2._tag ?? e2;
132
+ });
75
133
  });
76
134
  const defaultFailureMessageHandler = (actionMaker, errorRenderer) => Effect.fnUntraced(function* (o, ...args) {
77
135
  const action = yield* wrapEffect(actionMaker)(o, ...args);
@@ -82,33 +140,88 @@ const defaultFailureMessageHandler = (actionMaker, errorRenderer) => Effect.fnUn
82
140
  action,
83
141
  error: "" // TODO consider again Cause.pretty(cause), // will be reported to Sentry/Otel anyway.. and we shouldn't bother users with error dumps?
84
142
  }),
85
- onSome: (e) => S.is(OperationFailure)(e)
86
- ? {
143
+ onSome: (e) => {
144
+ const rendered = renderError(action, errorRenderer)(e, ...args);
145
+ return {
87
146
  level: "warn",
88
- message: intl.formatMessage({ id: "handle.with_warnings" }, { action }) + e.message
89
- ? "\n" + e.message
90
- : ""
91
- }
92
- : `${intl.formatMessage({ id: "handle.with_errors" }, { action })}:\n` + renderError(action, errorRenderer)(e, ...args)
147
+ message: `${intl.formatMessage({ id: "handle.with_errors" }, { action })}:\n` + rendered
148
+ };
149
+ }
93
150
  });
94
151
  });
95
152
  export const CommanderStatic = {
96
153
  accessArgs: (cb) => (self, arg, arg2) => cb(arg, arg2)(self),
154
+ /**
155
+ * Stream pipe operator that maps each emitted value to a `Progress` entry and updates the
156
+ * command's reactive `progress` ref via the `CommandProgress` service.
157
+ *
158
+ * The mapper receives an `AsyncResult<A, E>` (each emitted value wrapped as
159
+ * `AsyncResult.success(value, { waiting: true })`), matching the same shape used by
160
+ * `CommandButton`'s `:progress-map` prop.
161
+ *
162
+ * Designed to be used inside a `streamFn` handler (either directly with `.pipe()`, or as
163
+ * a combinator argument):
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * // Inside the handler body:
168
+ * Command.streamFn("exportData")(function*(arg, ctx) {
169
+ * return makeExportStream(arg.id).pipe(
170
+ * Command.mapProgress((r) =>
171
+ * AsyncResult.isSuccess(r) && r.value._tag === "OperationProgress"
172
+ * ? { text: `${r.value.completed}/${r.value.total}`, percentage: r.value.completed / r.value.total * 100 }
173
+ * : undefined
174
+ * )
175
+ * )
176
+ * })
177
+ *
178
+ * // Or as a stream combinator argument:
179
+ * Command.streamFn("exportData")(
180
+ * function*(arg, ctx) { return makeExportStream(arg.id) },
181
+ * (s) => s.pipe(Command.mapProgress((r) => AsyncResult.isSuccess(r) && r.value._tag === "OperationProgress" ? { text: `${r.value.completed}/${r.value.total}` } : undefined))
182
+ * )
183
+ * ```
184
+ */
185
+ mapProgress: (fn) => (stream) => stream.pipe(Stream.tap((v) => {
186
+ const p = fn(AsyncResult.success(v, { waiting: true }));
187
+ return p !== undefined ? CommandProgress.use((s) => s.update(p)) : Effect.void;
188
+ })),
189
+ /**
190
+ * Imperatively push a progress update from inside a `streamFn` handler.
191
+ * Requires `CommandProgress` to be in context — provided automatically for all `streamFn` streams.
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * // In a streamFn handler:
196
+ * stream.pipe(
197
+ * Stream.tap((event) =>
198
+ * event._tag === "OperationProgress"
199
+ * ? Command.updateProgress({ text: `${event.completed}/${event.total}`, percentage: event.completed / event.total * 100 })
200
+ * : Effect.void
201
+ * )
202
+ * )
203
+ * ```
204
+ */
205
+ updateProgress: (progress) => CommandProgress.use((s) => s.update(progress)),
97
206
  /** Version of @see confirmOrInterrupt that automatically includes the action name in the default messages */
98
- confirmOrInterrupt: Effect.fnUntraced(function* (message = undefined) {
207
+ confirmOrInterrupt: Effect.fnUntraced(function* (message) {
99
208
  const context = yield* CommandContext;
100
209
  const { intl } = yield* I18n;
101
210
  yield* Confirm.confirmOrInterrupt(message
102
211
  ?? intl.formatMessage({ id: "handle.confirmation" }, { action: context.action }));
103
212
  }),
104
213
  /** Version of @see confirm that automatically includes the action name in the default messages */
105
- confirm: Effect.fnUntraced(function* (message = undefined) {
214
+ confirm: Effect.fnUntraced(function* (message) {
106
215
  const context = yield* CommandContext;
107
216
  const { intl } = yield* I18n;
108
217
  return yield* Confirm.confirm(message
109
218
  ?? intl.formatMessage({ id: "handle.confirmation" }, { action: context.action }));
110
219
  }),
111
220
  updateAction: (update) => (_, ...input) => Effect.updateService(_, CommandContext, (c) => ({ ...c, action: update(c.action, ...input) })),
221
+ registerErrorRenderer: (guard, render) => Layer.effect(CommanderErrorRenderers, Effect.gen(function* () {
222
+ const current = yield* CommanderErrorRenderers;
223
+ return [...current, makeRegisteredErrorRenderer(guard, render)];
224
+ })),
112
225
  defaultFailureMessageHandler,
113
226
  renderError: renderErrorMaker,
114
227
  /**
@@ -122,7 +235,7 @@ export const CommanderStatic = {
122
235
  * If you provide a string or function, it will be used instead of the i18n message.
123
236
  * If you provide an `errorRenderer`, it will be used to render errors in the failure message.
124
237
  */
125
- withDefaultToast: (options) => (self, ...args) => Effect.gen(function* () {
238
+ withDefaultToast: (options) => Effect.fnUntraced(function* (self, ...args) {
126
239
  const cc = yield* CommandContext;
127
240
  const { intl } = yield* I18n;
128
241
  const withToast = yield* WithToast;
@@ -156,14 +269,150 @@ export const CommanderStatic = {
156
269
  : intl.formatMessage({ id: "handle.waiting" }, { action: cc.action }),
157
270
  onSuccess: options?.onSuccess === null
158
271
  ? null
159
- : (a, ..._args) => hasCustomSuccess
272
+ : (_a, ..._args) => hasCustomSuccess
160
273
  ? intl.formatMessage({ id: customSuccess }, cc.state)
161
- : (intl.formatMessage({ id: "handle.success" }, { action: cc.action })
162
- + (S.is(OperationSuccess)(a) && a.message ? "\n" + a.message : "")),
274
+ : intl.formatMessage({ id: "handle.success" }, { action: cc.action }),
163
275
  onFailure: defaultFailureMessageHandler(hasCustomFailure ? intl.formatMessage({ id: customFailure }, cc.state) : cc.action, options?.errorRenderer),
164
- stableToastId
276
+ stableToastId,
277
+ groupId: cc.id,
278
+ ...options?.showSpanInfo === false ? { showSpanInfo: options.showSpanInfo } : {}
165
279
  })(_, ...args));
166
280
  }),
281
+ /**
282
+ * Stream-aware version of `withDefaultToast`. Use this as a combinator inside `streamFn`
283
+ * (or anywhere a `Stream` needs toast lifecycle handling) instead of `withDefaultToast`.
284
+ *
285
+ * Unlike `withDefaultToast` (which only wraps the initial `Effect`), this combinator:
286
+ * - Shows the "waiting" toast **before** the stream starts
287
+ * - Updates the waiting toast with progress text when `progress` is set and a new element arrives
288
+ * - Shows the "success" toast only **after** the stream drains fully without error
289
+ * - Shows the "failure" toast if the stream errors or fails
290
+ *
291
+ * Accepts either a `Stream<A, E, R>` or an `Effect<Stream<A, E, R>, EE, ER>` as input,
292
+ * so it works in both the `NonGenStream` and `StreamGen` overloads of `streamFn`.
293
+ *
294
+ * @example
295
+ * ```ts
296
+ * Command.streamFn("exportData")(
297
+ * function*(arg, ctx) { return makeExportStream(arg.id) },
298
+ * Command.withDefaultToastStream({
299
+ * progress: (r) =>
300
+ * AsyncResult.isSuccess(r) && r.value._tag === "OperationProgress"
301
+ * ? { text: `${r.value.completed}/${r.value.total}`, percentage: r.value.completed / r.value.total * 100 }
302
+ * : undefined
303
+ * })
304
+ * )
305
+ * ```
306
+ */
307
+ withDefaultToastStream: (options) => (self, ...args) => {
308
+ const rawStream = Stream.isStream(self)
309
+ ? self
310
+ : Stream.unwrap(self);
311
+ return Stream.unwrap(Effect.gen(function* () {
312
+ const cc = yield* CommandContext;
313
+ const { intl } = yield* I18n;
314
+ const toast = yield* Toast;
315
+ const customWaiting = cc.namespaced("waiting");
316
+ const hasCustomWaiting = !!intl.messages[customWaiting];
317
+ const customSuccess = cc.namespaced("success");
318
+ const hasCustomSuccess = !!intl.messages[customSuccess];
319
+ const customFailure = cc.namespaced("failure");
320
+ const hasCustomFailure = !!intl.messages[customFailure];
321
+ const stableToastId = options?.stableToastId
322
+ ? typeof options.stableToastId === "string"
323
+ ? options.stableToastId
324
+ : typeof options.stableToastId === "boolean"
325
+ ? cc.id
326
+ : typeof options.stableToastId === "function"
327
+ ? (() => {
328
+ const r = options.stableToastId(cc.id, ...args);
329
+ if (typeof r === "string")
330
+ return r;
331
+ if (r === true)
332
+ return cc.id;
333
+ return undefined;
334
+ })()
335
+ : undefined
336
+ : undefined;
337
+ const baseTimeout = 3_000;
338
+ const waitingMsg = options?.onWaiting === null
339
+ ? null
340
+ : typeof options?.onWaiting === "string"
341
+ ? options.onWaiting
342
+ : typeof options?.onWaiting === "function"
343
+ ? options.onWaiting(cc.id, ...args) ?? null
344
+ : hasCustomWaiting
345
+ ? intl.formatMessage({ id: customWaiting }, cc.state)
346
+ : intl.formatMessage({ id: "handle.waiting" }, { action: cc.action });
347
+ const toastId = waitingMsg === null
348
+ ? stableToastId
349
+ : stableToastId ?? `wait-${Math.random().toString(36).slice(2)}`;
350
+ const requestId = yield* Effect.currentSpan.pipe(Effect.map((span) => span.traceId), Effect.orElseSucceed(() => S.StringId.make()));
351
+ const meta = { groupId: cc.id, requestId };
352
+ if (waitingMsg !== null) {
353
+ yield* toast.info(waitingMsg, { id: toastId, timeout: Infinity, ...meta });
354
+ }
355
+ const failureHandler = defaultFailureMessageHandler(hasCustomFailure ? intl.formatMessage({ id: customFailure }, cc.state) : cc.action, options?.errorRenderer);
356
+ let lastValue = undefined;
357
+ let didFail = false;
358
+ const composed = rawStream.pipe(Stream.tap((v) => Effect.gen(function* () {
359
+ lastValue = v;
360
+ if (options?.progress !== undefined) {
361
+ const p = options.progress(AsyncResult.success(v, { waiting: true }));
362
+ if (p !== undefined) {
363
+ // Update CommandProgress so CommandButton progress indicator is also driven
364
+ yield* CommandProgress.use((s) => s.update(p));
365
+ if (toastId !== undefined) {
366
+ const progressText = typeof p === "string" ? p : p.text;
367
+ const msg = waitingMsg ? `${waitingMsg}\n${progressText}` : progressText;
368
+ yield* toast.info(msg, { id: toastId, timeout: Infinity, ...meta });
369
+ }
370
+ }
371
+ }
372
+ })), Stream.tapCause(Effect.fnUntraced(function* (cause) {
373
+ didFail = true;
374
+ if (Cause.hasInterruptsOnly(cause)) {
375
+ if (toastId !== undefined)
376
+ yield* toast.dismiss(toastId);
377
+ return;
378
+ }
379
+ const spanInfo = options?.showSpanInfo !== false
380
+ ? yield* Effect.currentSpan.pipe(Effect.map((span) => `\nTrace: ${span.traceId}\nSpan: ${span.spanId}`), Effect.orElseSucceed(() => ""))
381
+ : "";
382
+ const t = yield* failureHandler(Cause.findErrorOption(cause));
383
+ const opts = { timeout: baseTimeout * 2, ...meta };
384
+ if (typeof t === "object") {
385
+ const message = t.message + spanInfo;
386
+ yield* t.level === "warn"
387
+ ? toast.warning(message, toastId !== undefined ? { ...opts, id: toastId } : opts)
388
+ : toast.error(message, toastId !== undefined ? { ...opts, id: toastId } : opts);
389
+ }
390
+ else {
391
+ yield* toast.error(t + spanInfo, toastId !== undefined ? { ...opts, id: toastId } : opts);
392
+ }
393
+ }, Effect.uninterruptible)), Stream.ensuring(Effect.suspend(() => {
394
+ if (didFail)
395
+ return Effect.void;
396
+ if (options?.onSuccess === null)
397
+ return Effect.void;
398
+ const successMsg = typeof options?.onSuccess === "string"
399
+ ? options.onSuccess
400
+ : typeof options?.onSuccess === "function"
401
+ ? options.onSuccess(lastValue, cc.action, ...args) ?? null
402
+ : hasCustomSuccess
403
+ ? intl.formatMessage({ id: customSuccess }, cc.state)
404
+ : intl.formatMessage({ id: "handle.success" }, { action: cc.action });
405
+ if (successMsg === null)
406
+ return Effect.void;
407
+ return toast.success(successMsg, toastId !== undefined
408
+ ? { id: toastId, timeout: baseTimeout, ...meta }
409
+ : { timeout: baseTimeout, ...meta });
410
+ })));
411
+ return (toastId !== undefined
412
+ ? composed.pipe(Stream.provideService(CurrentToastId, CurrentToastId.of({ toastId })))
413
+ : composed);
414
+ }));
415
+ },
167
416
  /** borrowing the idea from Families in Effect Atom */
168
417
  family: (maker, keyMaker) => {
169
418
  const commands = MutableHashMap.empty();
@@ -330,6 +579,7 @@ export class CommanderImpl {
330
579
  const rt = Effect.context().pipe(Effect.provide(this.hooks)).pipe(Effect.runSyncWith(this.rt));
331
580
  const runFork = Effect.runForkWith(rt);
332
581
  const handle = Object.assign((arg) => {
582
+ arg = toRaw(arg); // remove outside vue proxy bs
333
583
  // we capture the call site stack here
334
584
  const limit = Error.stackTraceLimit;
335
585
  Error.stackTraceLimit = 2;
@@ -357,17 +607,21 @@ export class CommanderImpl {
357
607
  return cache;
358
608
  }
359
609
  };
360
- const command = currentState.pipe(Effect.flatMap((state) => Effect.withSpan(exec(arg, { ...context.value, state }), id, {
361
- captureStackTrace,
362
- attributes: {
363
- input: arg,
364
- state,
365
- action: initialContext.action,
366
- label: initialContext.label,
367
- id: initialContext.id,
368
- i18nKey: initialContext.i18nKey
369
- }
370
- })));
610
+ const command = currentState.pipe(Effect.flatMap((state) => {
611
+ const rawArg = deepToRaw(arg);
612
+ const rawState = deepToRaw(state);
613
+ return Effect.withSpan(exec(arg, { ...context.value, state }), id, {
614
+ captureStackTrace,
615
+ attributes: {
616
+ input: rawArg,
617
+ state: rawState,
618
+ action: initialContext.action,
619
+ label: initialContext.label,
620
+ id: initialContext.id,
621
+ i18nKey: initialContext.i18nKey
622
+ }
623
+ });
624
+ }));
371
625
  return runFork(command);
372
626
  }, { action, label });
373
627
  return reactive({
@@ -381,6 +635,8 @@ export class CommanderImpl {
381
635
  namespaced: initialContext.namespaced,
382
636
  /** reactive */
383
637
  result,
638
+ /** always undefined for non-stream commands */
639
+ progress: undefined,
384
640
  /** reactive */
385
641
  waiting,
386
642
  /** reactive */
@@ -470,20 +726,252 @@ export class CommanderImpl {
470
726
  * **User Feedback**: Use the `withDefaultToast` helper for status notifications, or render
471
727
  * the `result` inline for custom UI feedback.
472
728
  */
473
- fn = (id, options) => Object.assign((fn, ...combinators) => {
474
- // we capture the definition stack here, so we can append it to later stack traces
475
- const limit = Error.stackTraceLimit;
476
- Error.stackTraceLimit = 2;
477
- const errorDef = new Error();
478
- Error.stackTraceLimit = limit;
479
- return this.makeCommand(id, options, errorDef)(Effect.fnUntraced(
480
- // fnUntraced only supports generators as first arg, so we convert to generator if needed
481
- isGeneratorFunction(fn) ? fn : function* (...args) {
482
- return yield* fn(...args);
483
- }, ...combinators));
484
- }, makeBaseInfo(typeof id === "string" ? id : id.id, options), {
485
- state: Context.Service(`Commander.Command.${typeof id === "string" ? id : id.id}.state`)
486
- });
729
+ fn = (id, options) => {
730
+ const resolvedId = typeof id === "string" ? id : id.id;
731
+ return Object.assign((fn, ...combinators) => {
732
+ // we capture the definition stack here, so we can append it to later stack traces
733
+ const limit = Error.stackTraceLimit;
734
+ Error.stackTraceLimit = 2;
735
+ const errorDef = new Error();
736
+ Error.stackTraceLimit = limit;
737
+ return this.makeCommand(resolvedId, options, errorDef)(Effect.fnUntraced(
738
+ // fnUntraced only supports generators as first arg, so we convert to generator if needed
739
+ isGeneratorFunction(fn) ? fn : function* (...args) {
740
+ return yield* fn(...args);
741
+ }, ...combinators));
742
+ }, makeBaseInfo(resolvedId, options), {
743
+ state: Context.Service(`Commander.Command.${resolvedId}.state`)
744
+ });
745
+ };
746
+ /**
747
+ * Internal factory for stream-backed commands. Accepts a handler that returns a `Stream` directly.
748
+ * Services (`CommandContext`, `stateTag`) are provided to the stream via `Stream.provideServiceEffect`.
749
+ */
750
+ makeStreamCommand = (id_, options, errorDef) => {
751
+ const id = typeof id_ === "string" ? id_ : id_.id;
752
+ const state = getStateValues(options);
753
+ return Object.assign((handler) => {
754
+ const limit = Error.stackTraceLimit;
755
+ Error.stackTraceLimit = 2;
756
+ const localErrorDef = new Error();
757
+ Error.stackTraceLimit = limit;
758
+ if (!errorDef) {
759
+ errorDef = localErrorDef;
760
+ }
761
+ const key = `Commander.Command.${id}.state`;
762
+ const stateTag = Context.Service(key);
763
+ const makeContext_ = () => this.makeContext(id, { ...options, state: state?.value });
764
+ const initialContext = makeContext_();
765
+ const context = computed(() => makeContext_());
766
+ const action = computed(() => context.value.action);
767
+ const label = computed(() => context.value.label);
768
+ const currentState = Effect.sync(() => state.value);
769
+ // Reactive ref driven by the CommandProgress service — updated imperatively
770
+ // from inside the stream via `Command.mapProgress(fn)` or `Command.updateProgress(p)`.
771
+ const progressRef = ref(undefined);
772
+ const commandProgressService = {
773
+ update: (p) => Effect.sync(() => {
774
+ progressRef.value = p;
775
+ })
776
+ };
777
+ const streamErrorReporter = (self) => self.pipe(Stream.tapCause(Effect.fnUntraced(function* (cause) {
778
+ if (Cause.hasInterruptsOnly(cause)) {
779
+ console.info(`Interrupted while trying to ${id}`);
780
+ return;
781
+ }
782
+ const fail = Cause.findErrorOption(cause);
783
+ if (Option.isSome(fail)) {
784
+ const message = `Failure trying to ${id}`;
785
+ yield* reportMessage(message, {
786
+ action: id,
787
+ error: fail.value
788
+ });
789
+ return;
790
+ }
791
+ const ctx = yield* CommandContext;
792
+ const extra = {
793
+ action: ctx.action,
794
+ message: `Unexpected Error trying to ${id}`
795
+ };
796
+ yield* reportRuntimeError(cause, extra);
797
+ }, Effect.uninterruptible)));
798
+ const theStreamHandler = (arg, ctx) => handler(arg, ctx).pipe(streamErrorReporter, Stream.provideService(CommandProgress, commandProgressService), Stream.provideServiceEffect(stateTag, currentState), Stream.provideServiceEffect(CommandContext, Effect.sync(() => makeContext_())));
799
+ const waitId = options?.waitKey ? options.waitKey(id) : undefined;
800
+ const blockId = options?.blockKey ? options.blockKey(id) : undefined;
801
+ const [result, exec_] = asStreamResult(theStreamHandler);
802
+ const exec = Effect
803
+ .fnUntraced(function* (...args) {
804
+ if (waitId !== undefined)
805
+ registerWait(waitId);
806
+ if (blockId !== undefined && blockId !== waitId) {
807
+ registerWait(blockId);
808
+ }
809
+ return yield* exec_(...args);
810
+ }, Effect.onExit(() => Effect.sync(() => {
811
+ if (waitId !== undefined)
812
+ unregisterWait(waitId);
813
+ if (blockId !== undefined && blockId !== waitId) {
814
+ unregisterWait(blockId);
815
+ }
816
+ })));
817
+ const waiting = waitId !== undefined
818
+ ? computed(() => result.value.waiting || (waitState.value[waitId] ?? 0) > 0)
819
+ : computed(() => result.value.waiting);
820
+ const blocked = blockId !== undefined
821
+ ? computed(() => waiting.value || (waitState.value[blockId] ?? 0) > 0)
822
+ : computed(() => waiting.value);
823
+ const computeAllowed = options?.allowed;
824
+ const allowed = computeAllowed ? computed(() => computeAllowed(id, state)) : true;
825
+ const rt = Effect.context().pipe(Effect.provide(this.hooks)).pipe(Effect.runSyncWith(this.rt));
826
+ const runFork = Effect.runForkWith(rt);
827
+ const progress = progressRef;
828
+ const handle = Object.assign((arg) => {
829
+ arg = toRaw(arg);
830
+ progressRef.value = undefined; // reset progress on new invocation
831
+ const limit = Error.stackTraceLimit;
832
+ Error.stackTraceLimit = 2;
833
+ const errorCall = new Error();
834
+ Error.stackTraceLimit = limit;
835
+ let cache = false;
836
+ const captureStackTrace = () => {
837
+ if (cache !== false) {
838
+ return cache;
839
+ }
840
+ if (errorCall.stack) {
841
+ const stackDef = errorDef.stack.trim().split("\n");
842
+ const stackCall = errorCall.stack.trim().split("\n");
843
+ let endStackDef = stackDef.slice(2).join("\n").trim();
844
+ if (!endStackDef.includes(`(`)) {
845
+ endStackDef = endStackDef.replace(/at (.*)/, "at ($1)");
846
+ }
847
+ let endStackCall = stackCall.slice(2).join("\n").trim();
848
+ if (!endStackCall.includes(`(`)) {
849
+ endStackCall = endStackCall.replace(/at (.*)/, "at ($1)");
850
+ }
851
+ cache = `${endStackDef}\n${endStackCall}`;
852
+ return cache;
853
+ }
854
+ };
855
+ const command = currentState.pipe(Effect.flatMap((state) => {
856
+ const rawArg = deepToRaw(arg);
857
+ const rawState = deepToRaw(state);
858
+ return Effect.withSpan(exec(arg, { ...context.value, state }), id, {
859
+ captureStackTrace,
860
+ attributes: {
861
+ input: rawArg,
862
+ state: rawState,
863
+ action: initialContext.action,
864
+ label: initialContext.label,
865
+ id: initialContext.id,
866
+ i18nKey: initialContext.i18nKey
867
+ }
868
+ });
869
+ }));
870
+ return runFork(command);
871
+ }, { action, label });
872
+ return reactive({
873
+ id,
874
+ i18nKey: initialContext.i18nKey,
875
+ namespace: initialContext.namespace,
876
+ namespaced: initialContext.namespaced,
877
+ result,
878
+ /** reactive – progress driven by `Command.mapProgress` or `Command.updateProgress` inside the stream */
879
+ progress,
880
+ waiting,
881
+ blocked,
882
+ allowed,
883
+ action,
884
+ label,
885
+ state,
886
+ handle
887
+ });
888
+ }, { id });
889
+ };
890
+ /**
891
+ * Define a stream-backed Command for handling user actions.
892
+ *
893
+ * Like `fn`, but the body generator (or function) must **return** a `Stream` rather than
894
+ * an `Effect`. The command's `waiting` state stays `true` while the stream is running and
895
+ * is set to `false` once it terminates. The reactive `result` ref is updated for every
896
+ * value emitted by the stream.
897
+ *
898
+ * Three handler shapes are accepted:
899
+ * 1. **Generator returning a Stream** (primary) — may yield Effects freely before returning the stream:
900
+ * ```ts
901
+ * Command.streamFn("exportData")(
902
+ * function*(arg, ctx) {
903
+ * const token = yield* getAuthToken
904
+ * return Stream.fromEffect(startExport(token, arg.id)).pipe(
905
+ * Stream.flatMap((job) => pollProgress(job.id))
906
+ * )
907
+ * }
908
+ * )
909
+ * ```
910
+ * 2. **Function returning a Stream directly**: `(arg, ctx) => Stream.make(1, 2, 3)`
911
+ * 3. **Function returning `Effect<Stream>`**: `(arg, ctx) => Effect.map(setup, (s) => s.stream)`
912
+ *
913
+ * @param id The internal identifier for the action (used for tracing and i18n lookup).
914
+ * @param options Same options as `fn` (`state`, `blockKey`, `waitKey`, `allowed`, `i18nCustomKey`).
915
+ *
916
+ * **Progress** — use `Command.mapProgress(fn)` as a stream pipe operator; the mapper receives
917
+ * `AsyncResult<A, E>` (each value wrapped as `AsyncResult.success(v, { waiting: true })`),
918
+ * matching the same shape as CommandButton’s `:progress-map` prop. Or call
919
+ * `Command.updateProgress(p)` for imperative control:
920
+ *
921
+ * ```ts
922
+ * // mapProgress as a combinator arg (outside the handler):
923
+ * Command.streamFn("exportData")(
924
+ * function*(arg, ctx) { return makeExportStream(arg.id) },
925
+ * (s) => s.pipe(Command.mapProgress((r) => AsyncResult.isSuccess(r) && r.value._tag === "OperationProgress" ? { text: `${r.value.completed}/${r.value.total}` } : undefined))
926
+ * )
927
+ *
928
+ * // Or inline inside the handler body:
929
+ * Command.streamFn("exportData")(function*(arg, ctx) {
930
+ * return makeExportStream(arg.id).pipe(Command.mapProgress((r) => AsyncResult.isSuccess(r) ? ... : undefined))
931
+ * })
932
+ * ```
933
+ *
934
+ * **Pipeable combinators** — the 2nd–Nth args follow the same pattern as `fn`: each combinator
935
+ * receives `(stream, arg, ctx)` and returns a transformed stream:
936
+ * ```ts
937
+ * Command.streamFn("exportData")(
938
+ * handler,
939
+ * (s, arg, ctx) => s.pipe(Command.mapProgress(fn), Stream.take(100))
940
+ * )
941
+ * ```
942
+ *
943
+ * **Returned Properties**: `action`, `label`, `result`, `progress`, `waiting`, `blocked`,
944
+ * `allowed`, `handle`, `i18nKey`, `namespace`, `namespaced`.
945
+ */
946
+ streamFn = (id, options) => {
947
+ const resolvedId = typeof id === "string" ? id : id.id;
948
+ const toRawHandler = (fn) => {
949
+ if (isGeneratorFunction(fn)) {
950
+ return Effect.fnUntraced(function* (arg, ctx) {
951
+ return yield* fn(arg, ctx);
952
+ });
953
+ }
954
+ return fn;
955
+ };
956
+ const toFinalStream = (value) => Stream.isStream(value) ? value : Stream.unwrap(value);
957
+ return Object.assign((fn, ...combinators) => {
958
+ const limit = Error.stackTraceLimit;
959
+ Error.stackTraceLimit = 2;
960
+ const errorDef = new Error();
961
+ Error.stackTraceLimit = limit;
962
+ const rawHandler = toRawHandler(fn);
963
+ const handler = (arg, ctx) => {
964
+ let current = rawHandler(arg, ctx);
965
+ for (const combinator of combinators) {
966
+ current = combinator(current, arg, ctx);
967
+ }
968
+ return toFinalStream(current);
969
+ };
970
+ return this.makeStreamCommand(id, options, errorDef)(handler);
971
+ }, makeBaseInfo(resolvedId, options), {
972
+ state: Context.Service(`Commander.Command.${resolvedId}.state`)
973
+ });
974
+ };
487
975
  /** @deprecated */
488
976
  alt2 = (_id, options) => {
489
977
  const isObject = Predicate.isObjectKeyword(_id);
@@ -527,21 +1015,45 @@ export class CommanderImpl {
527
1015
  * **User Feedback**: Use the `withDefaultToast` helper for status notifications, or render
528
1016
  * the `result` inline for custom UI feedback.
529
1017
  */
530
- wrap = (mutation, options) => Object.assign((...combinators) => {
531
- // we capture the definition stack here, so we can append it to later stack traces
532
- const limit = Error.stackTraceLimit;
533
- Error.stackTraceLimit = 2;
534
- const errorDef = new Error();
535
- Error.stackTraceLimit = limit;
536
- const mutate = "mutate" in mutation ? mutation.mutate : mutation;
537
- return this.makeCommand(mutation.id, options, errorDef)(Effect.fnUntraced(
538
- // fnUntraced only supports generators as first arg, so we convert to generator if needed
539
- isGeneratorFunction(mutate) ? mutate : function* (arg) {
540
- return yield* mutate(arg);
541
- }, ...combinators));
542
- }, makeBaseInfo(mutation.id, options), {
543
- state: Context.Service(`Commander.Command.${mutation.id}.state`)
544
- });
1018
+ streamWrap = (handler, id, options) => {
1019
+ return Object.assign((...combinators) => {
1020
+ const limit = Error.stackTraceLimit;
1021
+ Error.stackTraceLimit = 2;
1022
+ const errorDef = new Error();
1023
+ Error.stackTraceLimit = limit;
1024
+ return this.makeStreamCommand(id, options, errorDef)(combinators.length === 0
1025
+ ? handler
1026
+ : (arg, ctx) => {
1027
+ let current = handler(arg, ctx);
1028
+ for (const combinator of combinators) {
1029
+ current = combinator(current, arg, ctx);
1030
+ }
1031
+ return current;
1032
+ });
1033
+ }, makeBaseInfo(id, options), {
1034
+ state: Context.Service(`Commander.Command.${id}.state`)
1035
+ });
1036
+ };
1037
+ wrap = (mutation, options) => {
1038
+ const callMutation = mutation;
1039
+ return Object.assign((...combinators) => {
1040
+ // we capture the definition stack here, so we can append it to later stack traces
1041
+ const limit = Error.stackTraceLimit;
1042
+ Error.stackTraceLimit = 2;
1043
+ const errorDef = new Error();
1044
+ Error.stackTraceLimit = limit;
1045
+ const mutate = "mutate" in callMutation
1046
+ ? callMutation.mutate
1047
+ : callMutation;
1048
+ return this.makeCommand(callMutation.id, options, errorDef)(Effect.fnUntraced(
1049
+ // fnUntraced only supports generators as first arg, so we convert to generator if needed
1050
+ isGeneratorFunction(mutate) ? mutate : function* (arg) {
1051
+ return yield* mutate(arg);
1052
+ }, ...combinators));
1053
+ }, makeBaseInfo(callMutation.id, options), {
1054
+ state: Context.Service(`Commander.Command.${callMutation.id}.state`)
1055
+ });
1056
+ };
545
1057
  }
546
1058
  // @effect-diagnostics-next-line missingEffectServiceDependency:off
547
1059
  export class Commander extends Context.Service()("Commander", {
@@ -553,4 +1065,4 @@ export class Commander extends Context.Service()("Commander", {
553
1065
  static DefaultWithoutDependencies = Layer.effect(this, this.make);
554
1066
  static Default = this.DefaultWithoutDependencies;
555
1067
  }
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBNEIsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUF5QixJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDcEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUdsRSxPQUFPLEVBQUUsUUFBUSxFQUFvQixRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUF1QjFDLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN6QixFQUFFLEVBQUU7UUFDRixxQkFBcUIsRUFBRSxzQkFBc0I7UUFDN0MsZ0JBQWdCLEVBQUUsNkJBQTZCO1FBQy9DLGdCQUFnQixFQUFFLHNCQUFzQjtRQUN4QyxvQkFBb0IsRUFBRSx5QkFBeUI7UUFDL0Msc0JBQXNCLEVBQUUscUNBQXFDO1FBQzdELHVCQUF1QixFQUNyQixpSEFBaUg7UUFDbkgsdUJB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
1068
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFBO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVuRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNuRCxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ2xFLE9BQU8sS0FBSyxLQUFLLE1BQU0sY0FBYyxDQUFBO0FBR3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN0QyxPQUFPLEtBQUssY0FBYyxNQUFNLHVCQUF1QixDQUFBO0FBQ3ZELE9BQU8sS0FBSyxTQUFTLE1BQU0sa0JBQWtCLENBQUE7QUFFN0MsT0FBTyxLQUFLLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQTtBQUM1RCxPQUFPLEtBQUssTUFBTSxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxPQUFPLEVBQUUsUUFBUSxFQUFvQixRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFB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