foldkit 0.135.0 → 0.137.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.
- package/dist/asyncData/asyncData.d.ts +4 -6
- package/dist/asyncData/asyncData.d.ts.map +1 -1
- package/dist/asyncData/asyncData.js +4 -6
- package/dist/command/brand.d.ts +9 -0
- package/dist/command/brand.d.ts.map +1 -0
- package/dist/command/brand.js +15 -0
- package/dist/command/index.d.ts +124 -24
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +76 -26
- package/dist/command/interruptible/interruptible.d.ts +9 -94
- package/dist/command/interruptible/interruptible.d.ts.map +1 -1
- package/dist/command/interruptible/interruptible.js +9 -75
- package/dist/command/interruptible/public.d.ts +1 -1
- package/dist/command/interruptible/public.d.ts.map +1 -1
- package/dist/command/interruptible/public.js +1 -1
- package/dist/command/public.d.ts +1 -1
- package/dist/command/public.d.ts.map +1 -1
- package/dist/file/select.d.ts +2 -2
- package/dist/file/select.js +2 -2
- package/dist/http/http.d.ts +4 -7
- package/dist/http/http.d.ts.map +1 -1
- package/dist/http/http.js +4 -7
- package/dist/port/port.d.ts +8 -9
- package/dist/port/port.d.ts.map +1 -1
- package/dist/port/port.js +8 -9
- package/dist/test/apps/counter.d.ts.map +1 -1
- package/dist/test/apps/counter.js +9 -2
- package/dist/test/apps/crashOnRender.d.ts +3 -3
- package/dist/test/apps/crashOnRender.d.ts.map +1 -1
- package/dist/test/apps/crashOnRender.js +9 -4
- package/dist/test/apps/drafts.d.ts +1 -2
- package/dist/test/apps/drafts.d.ts.map +1 -1
- package/dist/test/apps/drafts.js +7 -2
- package/dist/test/apps/formChild.d.ts +5 -5
- package/dist/test/apps/formChild.d.ts.map +1 -1
- package/dist/test/apps/formChild.js +11 -5
- package/dist/test/apps/login.d.ts.map +1 -1
- package/dist/test/apps/login.js +4 -1
- package/dist/test/apps/resumeUpload.d.ts +3 -3
- package/dist/test/apps/resumeUpload.d.ts.map +1 -1
- package/dist/test/apps/resumeUpload.js +15 -8
- package/dist/test/apps/uploads.d.ts +4 -4
- package/dist/test/apps/uploads.d.ts.map +1 -1
- package/dist/test/apps/uploads.js +10 -1
- package/dist/test/internal.d.ts +2 -2
- package/dist/test/internal.js +1 -1
- package/dist/test/scene.d.ts +1 -1
- package/dist/test/story.d.ts +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@ export const Model = S.Struct({
|
|
|
11
11
|
});
|
|
12
12
|
// MESSAGE
|
|
13
13
|
export const ClickedChooseResume = m('ClickedChooseResume');
|
|
14
|
-
export const
|
|
14
|
+
export const CompletedSelectResume = m('CompletedSelectResume', {
|
|
15
15
|
file: File.File,
|
|
16
16
|
});
|
|
17
17
|
export const CancelledSelectResume = m('CancelledSelectResume');
|
|
@@ -22,18 +22,25 @@ export const FailedReadPreview = m('FailedReadPreview');
|
|
|
22
22
|
export const ClickedRemoveResume = m('ClickedRemoveResume');
|
|
23
23
|
export const Message = S.Union([
|
|
24
24
|
ClickedChooseResume,
|
|
25
|
-
|
|
25
|
+
CompletedSelectResume,
|
|
26
26
|
CancelledSelectResume,
|
|
27
27
|
SucceededReadPreview,
|
|
28
28
|
FailedReadPreview,
|
|
29
29
|
ClickedRemoveResume,
|
|
30
30
|
]);
|
|
31
31
|
// COMMAND
|
|
32
|
-
export const SelectResume = Command.define('SelectResume',
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
export const SelectResume = Command.define('SelectResume', {
|
|
33
|
+
messages: [CompletedSelectResume, CancelledSelectResume],
|
|
34
|
+
execute: File.select(['application/pdf']).pipe(Effect.map(Option.match({
|
|
35
|
+
onNone: () => CancelledSelectResume(),
|
|
36
|
+
onSome: file => CompletedSelectResume({ file }),
|
|
37
|
+
}))),
|
|
38
|
+
});
|
|
39
|
+
export const ReadResumePreview = Command.define('ReadResumePreview', {
|
|
40
|
+
args: { file: File.File },
|
|
41
|
+
messages: [SucceededReadPreview, FailedReadPreview],
|
|
42
|
+
execute: ({ file }) => File.readAsDataUrl(file).pipe(Effect.map(dataUrl => SucceededReadPreview({ dataUrl })), Effect.catch(() => Effect.succeed(FailedReadPreview()))),
|
|
43
|
+
});
|
|
37
44
|
// INIT
|
|
38
45
|
export const initialModel = {
|
|
39
46
|
maybeResume: Option.none(),
|
|
@@ -42,7 +49,7 @@ export const initialModel = {
|
|
|
42
49
|
};
|
|
43
50
|
export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
44
51
|
ClickedChooseResume: () => [model, [SelectResume()]],
|
|
45
|
-
|
|
52
|
+
CompletedSelectResume: ({ file }) => [
|
|
46
53
|
evo(model, {
|
|
47
54
|
maybeResume: () => Option.some(file),
|
|
48
55
|
maybePreviewDataUrl: () => Option.none(),
|
|
@@ -53,17 +53,17 @@ export declare const UploadFileArgs: S.Struct<{
|
|
|
53
53
|
export type UploadFileArgs = typeof UploadFileArgs.Type;
|
|
54
54
|
export declare const UploadFile: Interruptible.DefinitionWithArgs<"UploadFile", {
|
|
55
55
|
readonly uploadId: S.Number;
|
|
56
|
-
}, {
|
|
56
|
+
}, Pick<{
|
|
57
57
|
readonly uploadId: number;
|
|
58
|
-
}, Effect.Effect<{
|
|
58
|
+
}, "uploadId">, Effect.Effect<{
|
|
59
59
|
readonly _tag: "SucceededUploadFile";
|
|
60
60
|
readonly uploadId: number;
|
|
61
61
|
}, never, never>>;
|
|
62
62
|
export declare const CancelUploadFile: ({ uploadId }: UploadFileArgs) => Readonly<{
|
|
63
63
|
name: "UploadFile.Interrupt";
|
|
64
|
-
args: {
|
|
64
|
+
args: Pick<{
|
|
65
65
|
readonly uploadId: number;
|
|
66
|
-
}
|
|
66
|
+
}, "uploadId">;
|
|
67
67
|
interruptsKey: string;
|
|
68
68
|
effect: Effect.Effect<{
|
|
69
69
|
readonly _tag: "CompletedCancelUploadFile";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../../src/test/apps/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEvE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAMhE,eAAO,MAAM,YAAY,mEAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,kBAAkB,gFAA0B,CAAA;AACzD,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,eAAO,MAAM,gBAAgB;;EAAgD,CAAA;AAC7E,eAAO,MAAM,yBAAyB;;;EAGpC,CAAA;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,cAAc;;EAAmC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;
|
|
1
|
+
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../../src/test/apps/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAsB,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEvE,OAAO,KAAK,OAAO,MAAM,wBAAwB,CAAA;AACjD,OAAO,KAAK,aAAa,MAAM,sCAAsC,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAMhE,eAAO,MAAM,YAAY,mEAKvB,CAAA;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAEnD,eAAO,MAAM,MAAM;;;EAGjB,CAAA;AACF,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC,eAAO,MAAM,KAAK;;;;;;EAGhB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,kBAAkB,gFAA0B,CAAA;AACzD,eAAO,MAAM,kBAAkB;;EAE7B,CAAA;AACF,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,eAAO,MAAM,mBAAmB;;EAE9B,CAAA;AACF,eAAO,MAAM,gBAAgB;;EAAgD,CAAA;AAC7E,eAAO,MAAM,yBAAyB;;;EAGpC,CAAA;AAEF,eAAO,MAAM,OAAO;;;;;;;;;;;IAOlB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,cAAc;;EAAmC,CAAA;AAC9D,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;iBASrB,CAAA;AAEF,eAAO,MAAM,gBAAgB,GAAI,cAAc,cAAc;;;;;;;;;;;;;;;EAG1D,CAAA;AAIH,eAAO,MAAM,YAAY,EAAE,KAAoC,CAAA;AAS/D,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAiDxD,CAAA;AAIH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,KAAG,QAyB5D,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Array, Effect, Match as M, Number, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from '../../command/index.js';
|
|
2
3
|
import * as Interruptible from '../../command/interruptible/index.js';
|
|
3
4
|
import { m } from '../../message/index.js';
|
|
4
5
|
import { evo } from '../../struct/index.js';
|
|
@@ -43,7 +44,15 @@ export const Message = S.Union([
|
|
|
43
44
|
]);
|
|
44
45
|
// COMMAND
|
|
45
46
|
export const UploadFileArgs = S.Struct({ uploadId: S.Number });
|
|
46
|
-
export const UploadFile =
|
|
47
|
+
export const UploadFile = Command.define('UploadFile', {
|
|
48
|
+
args: UploadFileArgs.fields,
|
|
49
|
+
messages: [SucceededUploadFile, FailedUploadFile],
|
|
50
|
+
interrupt: {
|
|
51
|
+
keyFields: ['uploadId'],
|
|
52
|
+
toKey: ({ uploadId }) => String(uploadId),
|
|
53
|
+
},
|
|
54
|
+
execute: ({ uploadId }) => Effect.as(Effect.never, SucceededUploadFile({ uploadId })),
|
|
55
|
+
});
|
|
47
56
|
export const CancelUploadFile = ({ uploadId }) => UploadFile.Interrupt({ uploadId }, outcome => CompletedCancelUploadFile({ uploadId, outcome }));
|
|
48
57
|
// INIT
|
|
49
58
|
export const initialModel = { uploadId: 0, uploads: [] };
|
package/dist/test/internal.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { type MountDefinition } from '../mount/index.js';
|
|
|
12
12
|
* without the test restating it. Absent on synthetic matchers built for
|
|
13
13
|
* formatting; treated as empty then.
|
|
14
14
|
*
|
|
15
|
-
* `key` is present on Commands built with `Command.
|
|
15
|
+
* `key` is present on Commands built with an interruptible `Command.define`:
|
|
16
16
|
* such Commands may stay pending across Messages (they model long-running
|
|
17
17
|
* work). `interruptsKey` is present on Interrupt Commands: resolving one
|
|
18
18
|
* drops every pending Command holding that key, mirroring the runtime
|
|
@@ -144,7 +144,7 @@ export declare const assertExactCommands: (commands: ReadonlyArray<AnyCommand>,
|
|
|
144
144
|
/** Throws if there are any pending Commands. */
|
|
145
145
|
export declare const assertZeroCommands: (commands: ReadonlyArray<AnyCommand>) => void;
|
|
146
146
|
/** Throws when trying to send a message with unresolved Commands. Keyed
|
|
147
|
-
* Commands (built with `Command.
|
|
147
|
+
* Commands (built with an interruptible `Command.define`) and Interrupt
|
|
148
148
|
* Commands are exempt: they model in-flight async work that legitimately
|
|
149
149
|
* stays pending while later Messages arrive, so a story can dispatch the
|
|
150
150
|
* Message that interrupts a keyed Command, or keep typing while a
|
package/dist/test/internal.js
CHANGED
|
@@ -164,7 +164,7 @@ export const assertZeroCommands = (commands) => {
|
|
|
164
164
|
}
|
|
165
165
|
};
|
|
166
166
|
/** Throws when trying to send a message with unresolved Commands. Keyed
|
|
167
|
-
* Commands (built with `Command.
|
|
167
|
+
* Commands (built with an interruptible `Command.define`) and Interrupt
|
|
168
168
|
* Commands are exempt: they model in-flight async work that legitimately
|
|
169
169
|
* stays pending while later Messages arrive, so a story can dispatch the
|
|
170
170
|
* Message that interrupts a keyed Command, or keep typing while a
|
package/dist/test/scene.d.ts
CHANGED
|
@@ -64,7 +64,7 @@ type SceneCommandInstance<ResultMessage = unknown> = Readonly<{
|
|
|
64
64
|
}>;
|
|
65
65
|
/** A Command Definition accepted by `Scene.Command.resolve` as a name matcher:
|
|
66
66
|
* a plain `Command.define` Definition or an interruptible
|
|
67
|
-
* `Command.
|
|
67
|
+
* interruptible `Command.define` Definition. Both carry the
|
|
68
68
|
* `CommandDefinitionTypeId` brand and match by name at runtime, so `resolve`
|
|
69
69
|
* accepts either, the way `expectHas`/`expectExact` already do. */
|
|
70
70
|
type ResolvableCommandDefinition<Name extends string, ResultMessage> = CommandDefinition<Name, ResultMessage> | Interruptible.DefinitionNoArgs<Name, Effect.Effect<ResultMessage, any, any>> | Interruptible.DefinitionWithArgs<Name, any, any, Effect.Effect<ResultMessage, any, any>> | Interruptible.DefinitionWithArgsNameKeyed<Name, any, Effect.Effect<ResultMessage, any, any>>;
|
package/dist/test/story.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ type AnyCommandInstance<ResultMessage = unknown> = Readonly<{
|
|
|
13
13
|
}>;
|
|
14
14
|
/** A Command Definition accepted by `Story.Command.resolve` as a name matcher:
|
|
15
15
|
* a plain `Command.define` Definition or an interruptible
|
|
16
|
-
* `Command.
|
|
16
|
+
* interruptible `Command.define` Definition. Both carry the
|
|
17
17
|
* `CommandDefinitionTypeId` brand and match by name at runtime, so `resolve`
|
|
18
18
|
* accepts either, the way `expectHas`/`expectExact` already do. */
|
|
19
19
|
type ResolvableCommandDefinition<Name extends string, ResultMessage> = CommandDefinition<Name, ResultMessage> | Interruptible.DefinitionNoArgs<Name, Effect.Effect<ResultMessage, any, any>> | Interruptible.DefinitionWithArgs<Name, any, any, Effect.Effect<ResultMessage, any, any>> | Interruptible.DefinitionWithArgsNameKeyed<Name, any, Effect.Effect<ResultMessage, any, any>>;
|