foldkit 0.43.1 → 0.44.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/devtools/overlay.d.ts.map +1 -1
- package/dist/devtools/overlay.js +4 -67
- package/dist/devtools/store.d.ts +10 -2
- package/dist/devtools/store.d.ts.map +1 -1
- package/dist/devtools/store.js +79 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +2 -2
- package/dist/test/apps/counter.d.ts +38 -0
- package/dist/test/apps/counter.d.ts.map +1 -0
- package/dist/test/apps/counter.js +25 -0
- package/dist/test/apps/formChild.d.ts +69 -0
- package/dist/test/apps/formChild.d.ts.map +1 -0
- package/dist/test/apps/formChild.js +84 -0
- package/dist/test/apps/keypress.d.ts +23 -0
- package/dist/test/apps/keypress.d.ts.map +1 -0
- package/dist/test/apps/keypress.js +39 -0
- package/dist/test/apps/login.d.ts +46 -0
- package/dist/test/apps/login.d.ts.map +1 -0
- package/dist/test/apps/login.js +83 -0
- package/dist/test/apps/logoutButton.d.ts +17 -0
- package/dist/test/apps/logoutButton.d.ts.map +1 -0
- package/dist/test/apps/logoutButton.js +22 -0
- package/dist/test/internal.d.ts +25 -0
- package/dist/test/internal.d.ts.map +1 -0
- package/dist/test/internal.js +39 -0
- package/dist/test/matchers.d.ts +94 -0
- package/dist/test/matchers.d.ts.map +1 -0
- package/dist/test/matchers.js +283 -0
- package/dist/test/public.d.ts +2 -2
- package/dist/test/public.d.ts.map +1 -1
- package/dist/test/public.js +2 -1
- package/dist/test/query.d.ts +87 -0
- package/dist/test/query.d.ts.map +1 -0
- package/dist/test/query.js +226 -0
- package/dist/test/scene.d.ts +106 -0
- package/dist/test/scene.d.ts.map +1 -0
- package/dist/test/scene.js +373 -0
- package/dist/test/{index.d.ts → story.d.ts} +13 -17
- package/dist/test/story.d.ts.map +1 -0
- package/dist/test/{index.js → story.js} +8 -36
- package/dist/test/vitest-setup.d.ts +19 -0
- package/dist/test/vitest-setup.d.ts.map +1 -0
- package/dist/test/vitest-setup.js +3 -0
- package/package.json +5 -5
- package/dist/test/index.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/devtools/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EACN,OAAO,EAGP,MAAM,EAQP,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAKrC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAMxE,OAAO,EAAE,KAAK,aAAa,EAA+B,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../src/devtools/overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,MAAM,EACN,OAAO,EAGP,MAAM,EAQP,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAKrC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAMxE,OAAO,EAAE,KAAK,aAAa,EAA+B,MAAM,SAAS,CAAA;AA0KzE,eAAO,MAAM,MAAM;;EAA0C,CAAA;AAC7D,eAAO,MAAM,YAAY;;;;;;EAGxB,CAAA;AACD,eAAO,MAAM,aAAa;;;;;;EAGzB,CAAA;AACD,eAAO,MAAM,MAAM;;EAA4C,CAAA;AAC/D,eAAO,MAAM,KAAK;;EAA0C,CAAA;AAC5D,eAAO,MAAM,UAAU;;EAA6C,CAAA;AACpE,eAAO,MAAM,YAAY;;EAAiD,CAAA;AAC1E,eAAO,MAAM,WAAW;;EAA+C,CAAA;AAkmCvE,eAAO,MAAM,aAAa,GACxB,OAAO,aAAa,EACpB,UAAU,gBAAgB,EAC1B,MAAM,YAAY,EAClB,aAAa,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,sCA4ChC,CAAA"}
|
package/dist/devtools/overlay.js
CHANGED
|
@@ -117,67 +117,6 @@ const objectPreview = (value) => pipe(value, Record.keys, Array_.filter(key => k
|
|
|
117
117
|
},
|
|
118
118
|
}));
|
|
119
119
|
const collapsedPreview = (value) => M.value(value).pipe(M.when(Array.isArray, array => `(${array.length})`), M.when(Predicate.isReadonlyRecord, objectPreview), M.orElse(() => ''));
|
|
120
|
-
const emptyDiff = {
|
|
121
|
-
changedPaths: HashSet.empty(),
|
|
122
|
-
affectedPaths: HashSet.empty(),
|
|
123
|
-
};
|
|
124
|
-
const computeDiff = (previous, current) => {
|
|
125
|
-
const changed = new Set();
|
|
126
|
-
const walk = (prev, curr, path) => {
|
|
127
|
-
if (prev === curr) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
if (!isExpandable(curr) || !isExpandable(prev)) {
|
|
131
|
-
changed.add(path);
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
if (Array.isArray(curr) && Array.isArray(prev)) {
|
|
135
|
-
walkArray(prev, curr, path);
|
|
136
|
-
}
|
|
137
|
-
else if (Predicate.isReadonlyRecord(curr) &&
|
|
138
|
-
Predicate.isReadonlyRecord(prev)) {
|
|
139
|
-
walkObject(prev, curr, path);
|
|
140
|
-
}
|
|
141
|
-
else {
|
|
142
|
-
changed.add(path);
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
const walkObject = (prev, curr, path) => {
|
|
146
|
-
pipe(curr, Record.keys, Array_.forEach(key => {
|
|
147
|
-
const childPath = `${path}.${key}`;
|
|
148
|
-
if (Record.has(prev, key)) {
|
|
149
|
-
walk(prev[key], curr[key], childPath);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
changed.add(childPath);
|
|
153
|
-
}
|
|
154
|
-
}));
|
|
155
|
-
};
|
|
156
|
-
const walkArray = (prev, curr, path) => {
|
|
157
|
-
curr.forEach((item, index) => {
|
|
158
|
-
const childPath = `${path}.${index}`;
|
|
159
|
-
if (index < prev.length) {
|
|
160
|
-
walk(prev[index], item, childPath);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
changed.add(childPath);
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
};
|
|
167
|
-
walk(previous, current, 'root');
|
|
168
|
-
const affected = new Set(changed);
|
|
169
|
-
const addAncestors = (path) => {
|
|
170
|
-
pipe(path, String_.lastIndexOf('.'), Option.map(lastDot => path.substring(0, lastDot)), Option.filter(parent => !affected.has(parent)), Option.map(parent => {
|
|
171
|
-
affected.add(parent);
|
|
172
|
-
addAncestors(parent);
|
|
173
|
-
}));
|
|
174
|
-
};
|
|
175
|
-
changed.forEach(addAncestors);
|
|
176
|
-
return {
|
|
177
|
-
changedPaths: HashSet.fromIterable(changed),
|
|
178
|
-
affectedPaths: HashSet.fromIterable(affected),
|
|
179
|
-
};
|
|
180
|
-
};
|
|
181
120
|
// UPDATE
|
|
182
121
|
export const JumpTo = Command.define('JumpTo', CompletedJump);
|
|
183
122
|
export const InspectState = Command.define('InspectState', ReceivedInspectedState);
|
|
@@ -195,9 +134,7 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
195
134
|
const inspectState = (index) => InspectState(Effect.gen(function* () {
|
|
196
135
|
const model = yield* store.getModelAtIndex(index);
|
|
197
136
|
const maybeMessage = yield* store.getMessageAtIndex(index);
|
|
198
|
-
const diff = index
|
|
199
|
-
? emptyDiff
|
|
200
|
-
: yield* pipe(store.getModelAtIndex(index - 1), Effect.map(previousModel => computeDiff(previousModel, model)), Effect.catchAll(() => Effect.succeed(emptyDiff)));
|
|
137
|
+
const diff = yield* store.getDiffAtIndex(index);
|
|
201
138
|
return ReceivedInspectedState({ model, maybeMessage, ...diff });
|
|
202
139
|
}));
|
|
203
140
|
const inspectLatest = InspectLatest(Effect.gen(function* () {
|
|
@@ -329,13 +266,13 @@ const makeUpdate = (store, shadow, mode) => {
|
|
|
329
266
|
};
|
|
330
267
|
// SUBSCRIPTION
|
|
331
268
|
const SubscriptionDeps = S.Struct({
|
|
332
|
-
storeUpdates: S.
|
|
269
|
+
storeUpdates: S.Boolean,
|
|
333
270
|
mobileBreakpoint: S.Null,
|
|
334
271
|
});
|
|
335
272
|
const makeOverlaySubscriptions = (store) => makeSubscriptions(SubscriptionDeps)({
|
|
336
273
|
storeUpdates: {
|
|
337
|
-
modelToDependencies: () =>
|
|
338
|
-
dependenciesToStream:
|
|
274
|
+
modelToDependencies: ({ isOpen }) => isOpen,
|
|
275
|
+
dependenciesToStream: isOpen => Stream.when(Stream.concat(Stream.fromEffect(SubscriptionRef.get(store.stateRef).pipe(Effect.map(state => ReceivedStoreUpdate(toDisplayState(state))))), Stream.map(store.stateRef.changes, state => ReceivedStoreUpdate(toDisplayState(state)))), () => isOpen),
|
|
339
276
|
},
|
|
340
277
|
mobileBreakpoint: {
|
|
341
278
|
modelToDependencies: () => null,
|
package/dist/devtools/store.d.ts
CHANGED
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { Effect, HashMap, Option, SubscriptionRef } from 'effect';
|
|
1
|
+
import { Effect, HashMap, HashSet, Option, SubscriptionRef } from 'effect';
|
|
2
2
|
export declare const INIT_INDEX = -1;
|
|
3
|
+
export type DiffResult = Readonly<{
|
|
4
|
+
changedPaths: HashSet.HashSet<string>;
|
|
5
|
+
affectedPaths: HashSet.HashSet<string>;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const emptyDiff: DiffResult;
|
|
8
|
+
export declare const computeDiff: (previous: unknown, current: unknown) => DiffResult;
|
|
3
9
|
export type HistoryEntry = Readonly<{
|
|
4
10
|
tag: string;
|
|
5
11
|
message: unknown;
|
|
6
12
|
commandNames: ReadonlyArray<string>;
|
|
7
13
|
timestamp: number;
|
|
8
14
|
isModelChanged: boolean;
|
|
15
|
+
diff: DiffResult;
|
|
9
16
|
}>;
|
|
10
17
|
export type StoreState = Readonly<{
|
|
11
18
|
entries: ReadonlyArray<HistoryEntry>;
|
|
@@ -26,9 +33,10 @@ export type DevtoolsStore = Readonly<{
|
|
|
26
33
|
recordInit: (model: unknown, commandNames: ReadonlyArray<string>) => Effect.Effect<void>;
|
|
27
34
|
recordMessage: (message: Readonly<{
|
|
28
35
|
_tag: string;
|
|
29
|
-
}>, modelAfterUpdate: unknown, commandNames: ReadonlyArray<string>, isModelChanged: boolean) => Effect.Effect<void>;
|
|
36
|
+
}>, modelBeforeUpdate: unknown, modelAfterUpdate: unknown, commandNames: ReadonlyArray<string>, isModelChanged: boolean) => Effect.Effect<void>;
|
|
30
37
|
getModelAtIndex: (index: number) => Effect.Effect<unknown>;
|
|
31
38
|
getMessageAtIndex: (index: number) => Effect.Effect<Option.Option<unknown>>;
|
|
39
|
+
getDiffAtIndex: (index: number) => Effect.Effect<DiffResult>;
|
|
32
40
|
jumpTo: (index: number) => Effect.Effect<void>;
|
|
33
41
|
resume: Effect.Effect<void>;
|
|
34
42
|
clear: Effect.Effect<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devtools/store.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devtools/store.ts"],"names":[],"mappings":"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"}
|
package/dist/devtools/store.js
CHANGED
|
@@ -1,7 +1,69 @@
|
|
|
1
|
-
import { Array, Effect, HashMap, Option, SubscriptionRef, pipe } from 'effect';
|
|
1
|
+
import { Array, Effect, HashMap, HashSet, Option, Predicate, Record, String as String_, SubscriptionRef, pipe, } from 'effect';
|
|
2
2
|
export const INIT_INDEX = -1;
|
|
3
3
|
const KEYFRAME_INTERVAL = 31;
|
|
4
4
|
const DEFAULT_MAX_ENTRIES = 500;
|
|
5
|
+
export const emptyDiff = {
|
|
6
|
+
changedPaths: HashSet.empty(),
|
|
7
|
+
affectedPaths: HashSet.empty(),
|
|
8
|
+
};
|
|
9
|
+
const isExpandable = (value) => Predicate.isNotNull(value) && typeof value === 'object';
|
|
10
|
+
export const computeDiff = (previous, current) => {
|
|
11
|
+
const changed = new Set();
|
|
12
|
+
const walk = (prev, curr, path) => {
|
|
13
|
+
if (prev === curr) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (!isExpandable(curr) || !isExpandable(prev)) {
|
|
17
|
+
changed.add(path);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(curr) && Array.isArray(prev)) {
|
|
21
|
+
walkArray(prev, curr, path);
|
|
22
|
+
}
|
|
23
|
+
else if (Predicate.isReadonlyRecord(curr) &&
|
|
24
|
+
Predicate.isReadonlyRecord(prev)) {
|
|
25
|
+
walkObject(prev, curr, path);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
changed.add(path);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const walkObject = (prev, curr, path) => {
|
|
32
|
+
pipe(curr, Record.keys, Array.forEach(key => {
|
|
33
|
+
const childPath = `${path}.${key}`;
|
|
34
|
+
if (Record.has(prev, key)) {
|
|
35
|
+
walk(prev[key], curr[key], childPath);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
changed.add(childPath);
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
const walkArray = (prev, curr, path) => {
|
|
43
|
+
curr.forEach((item, index) => {
|
|
44
|
+
const childPath = `${path}.${index}`;
|
|
45
|
+
if (index < prev.length) {
|
|
46
|
+
walk(prev[index], item, childPath);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
changed.add(childPath);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
walk(previous, current, 'root');
|
|
54
|
+
const affected = new Set(changed);
|
|
55
|
+
const addAncestors = (path) => {
|
|
56
|
+
pipe(path, String_.lastIndexOf('.'), Option.map(lastDot => path.substring(0, lastDot)), Option.filter(parent => !affected.has(parent)), Option.map(parent => {
|
|
57
|
+
affected.add(parent);
|
|
58
|
+
addAncestors(parent);
|
|
59
|
+
}));
|
|
60
|
+
};
|
|
61
|
+
changed.forEach(addAncestors);
|
|
62
|
+
return {
|
|
63
|
+
changedPaths: HashSet.fromIterable(changed),
|
|
64
|
+
affectedPaths: HashSet.fromIterable(affected),
|
|
65
|
+
};
|
|
66
|
+
};
|
|
5
67
|
const emptyState = {
|
|
6
68
|
entries: [],
|
|
7
69
|
keyframes: HashMap.empty(),
|
|
@@ -41,8 +103,11 @@ export const createDevtoolsStore = (bridge, maxEntries = DEFAULT_MAX_ENTRIES) =>
|
|
|
41
103
|
initCommandNames: commandNames,
|
|
42
104
|
keyframes: HashMap.set(state.keyframes, 0, model),
|
|
43
105
|
}));
|
|
44
|
-
const recordMessage = (message, modelAfterUpdate, commandNames, isModelChanged) => SubscriptionRef.update(stateRef, state => {
|
|
106
|
+
const recordMessage = (message, modelBeforeUpdate, modelAfterUpdate, commandNames, isModelChanged) => SubscriptionRef.update(stateRef, state => {
|
|
45
107
|
const absoluteIndex = state.startIndex + state.entries.length;
|
|
108
|
+
const diff = isModelChanged
|
|
109
|
+
? computeDiff(modelBeforeUpdate, modelAfterUpdate)
|
|
110
|
+
: emptyDiff;
|
|
46
111
|
const nextState = {
|
|
47
112
|
...state,
|
|
48
113
|
entries: Array.append(state.entries, {
|
|
@@ -51,6 +116,7 @@ export const createDevtoolsStore = (bridge, maxEntries = DEFAULT_MAX_ENTRIES) =>
|
|
|
51
116
|
commandNames,
|
|
52
117
|
timestamp: performance.now(),
|
|
53
118
|
isModelChanged,
|
|
119
|
+
diff,
|
|
54
120
|
}),
|
|
55
121
|
keyframes: addKeyframeIfNeeded(state.keyframes, absoluteIndex + 1, modelAfterUpdate),
|
|
56
122
|
};
|
|
@@ -91,11 +157,22 @@ export const createDevtoolsStore = (bridge, maxEntries = DEFAULT_MAX_ENTRIES) =>
|
|
|
91
157
|
onSome: model => HashMap.set(HashMap.empty(), 0, model),
|
|
92
158
|
}),
|
|
93
159
|
}));
|
|
160
|
+
const getDiffAtIndex = (index) => Effect.gen(function* () {
|
|
161
|
+
if (index === INIT_INDEX) {
|
|
162
|
+
return emptyDiff;
|
|
163
|
+
}
|
|
164
|
+
const state = yield* SubscriptionRef.get(stateRef);
|
|
165
|
+
return pipe(state.entries, Array.get(index - state.startIndex), Option.match({
|
|
166
|
+
onNone: () => emptyDiff,
|
|
167
|
+
onSome: ({ diff }) => diff,
|
|
168
|
+
}));
|
|
169
|
+
});
|
|
94
170
|
return {
|
|
95
171
|
recordInit,
|
|
96
172
|
recordMessage,
|
|
97
173
|
getModelAtIndex,
|
|
98
174
|
getMessageAtIndex,
|
|
175
|
+
getDiffAtIndex,
|
|
99
176
|
jumpTo,
|
|
100
177
|
resume,
|
|
101
178
|
clear,
|
package/dist/index.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ export * as Schema from './schema/public';
|
|
|
10
10
|
export * as Struct from './struct/public';
|
|
11
11
|
export * as Subscription from './subscription/public';
|
|
12
12
|
export * as Task from './task/public';
|
|
13
|
-
export * as
|
|
13
|
+
export * as Scene from './test/scene';
|
|
14
|
+
export * as Story from './test/story';
|
|
14
15
|
export * as Ui from './ui';
|
|
15
16
|
export * as Url from './url/public';
|
|
16
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,IAAI,MAAM,eAAe,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,EAAE,MAAM,MAAM,CAAA;AAC1B,OAAO,KAAK,GAAG,MAAM,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export * as Schema from './schema/public';
|
|
|
10
10
|
export * as Struct from './struct/public';
|
|
11
11
|
export * as Subscription from './subscription/public';
|
|
12
12
|
export * as Task from './task/public';
|
|
13
|
-
export * as
|
|
13
|
+
export * as Scene from './test/scene';
|
|
14
|
+
export * as Story from './test/story';
|
|
14
15
|
export * as Ui from './ui';
|
|
15
16
|
export * as Url from './url/public';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,OAAO,EACP,MAAM,EAGN,KAAK,EAEL,MAAM,EAMN,MAAM,EAKP,MAAM,QAAQ,CAAA;AAGf,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,GAAG,EAA+B,MAAM,QAAQ,CAAA;AAOzD,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAOzC,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,YAAY,GACZ,UAAU,GACV,SAAS,CAAA;AAEb,wCAAwC;AACxC,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEjD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,CAAA;AAEnD;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,QAAQ,CAAC;IACP,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC3B,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAC,CAAA;AAMN,sFAAsF;AACtF,MAAM,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;IACrD,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CAAA;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,IACrC,KAAK,GACL,QAAQ,CAAC;IACP,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAChE,CAAC,CAAA;;4BA6BsB,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;2BAC1C,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI;;AALrD,8EAA8E;AAC9E,qBAAa,QAAS,SAAQ,aAM3B;CAAG;AAEN,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,oFAAoF;AACpF,MAAM,MAAM,aAAa,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC5C,YAAY,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAA;IAC9C,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAA;CACnC,CAAC,CAAA;AAEF,0GAA0G;AAC1G,MAAM,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;IAClD,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,KAAK,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;CACjB,CAAC,CAAA;AAEF,iFAAiF;AACjF,MAAM,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IACtD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CACzD,CAAC,CAAA;AA6DF,KAAK,iBAAiB,CACpB,KAAK,EACL,OAAO,EACP,aAAa,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACzD,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,QAAQ,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACvC,MAAM,EAAE,CACN,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,KACb,SAAS;QACZ,KAAK;QACL,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAAC;KAC5E,CAAA;IACD,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAC5B,aAAa,CAAC,EAAE,aAAa,CAC3B,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,GAAG,uBAAuB,CACpC,CAAA;IACD,SAAS,EAAE,WAAW,CAAA;IACtB,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnC,QAAQ,CAAC,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACzC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAA;IAC5E,oFAAoF;IACpF,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B,CAAC,CAAA;AAEF,kEAAkE;AAClE,MAAM,MAAM,6BAA6B,CACvC,KAAK,EACL,OAAO,EACP,aAAa,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACzD,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,iBAAiB,CACnB,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,uBAAuB,CACxB,GACC,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,EAAE,CACJ,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,SAAS;QACZ,KAAK;QACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;KACF,CAAA;CACF,CAAC,CAAA;AAEJ,qEAAqE;AACrE,MAAM,MAAM,oBAAoB,CAC9B,KAAK,EACL,OAAO,EACP,aAAa,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACzD,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,iBAAiB,CACnB,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,uBAAuB,CACxB,GACC,QAAQ,CAAC;IACP,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC/B,IAAI,EAAE,CACJ,GAAG,EAAE,GAAG,KACL,SAAS;QACZ,KAAK;QACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;KACF,CAAA;CACF,CAAC,CAAA;AAEJ,qEAAqE;AACrE,MAAM,MAAM,sBAAsB,CAChC,KAAK,EACL,OAAO,EACP,aAAa,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACzD,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,iBAAiB,CACnB,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,uBAAuB,CACxB,GACC,QAAQ,CAAC;IACP,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACvC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,EAAE,CACJ,KAAK,EAAE,KAAK,KACT,SAAS;QACZ,KAAK;QACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;KACF,CAAA;CACF,CAAC,CAAA;AAEJ,oEAAoE;AACpE,MAAM,MAAM,aAAa,CACvB,KAAK,EACL,OAAO,EACP,aAAa,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACzD,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,iBAAiB,CACnB,KAAK,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,uBAAuB,CACxB,GACC,QAAQ,CAAC;IACP,IAAI,EAAE,MAAM,SAAS;QACnB,KAAK;QACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;KACF,CAAA;CACF,CAAC,CAAA;AAEJ,iEAAiE;AACjE,MAAM,MAAM,WAAW,CACrB,KAAK,EACL,OAAO,EACP,KAAK,GAAG,IAAI,EACZ,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,KAAK,SAAS,IAAI,GAClB,MAAM,SAAS;IACb,KAAK;IACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;CACF,GACD,CACE,KAAK,EAAE,KAAK,KACT,SAAS;IACZ,KAAK;IACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;CACF,CAAA;AAEL,2GAA2G;AAC3G,MAAM,MAAM,kBAAkB,CAC5B,KAAK,EACL,OAAO,EACP,KAAK,GAAG,IAAI,EACZ,SAAS,GAAG,KAAK,EACjB,uBAAuB,GAAG,KAAK,IAC7B,KAAK,SAAS,IAAI,GAClB,CACE,GAAG,EAAE,GAAG,KACL,SAAS;IACZ,KAAK;IACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;CACF,GACD,CACE,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,KACL,SAAS;IACZ,KAAK;IACL,aAAa,CACX,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,uBAAuB,CAAC,CAC7D;CACF,CAAA;AAEL,wGAAwG;AACxG,MAAM,MAAM,iBAAiB,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/runtime.js
CHANGED
|
@@ -111,9 +111,9 @@ const makeRuntime = ({ Model, flags: resolveFlags, init, update, view, subscript
|
|
|
111
111
|
onNone: () => Effect.void,
|
|
112
112
|
onSome: store => store.recordMessage(
|
|
113
113
|
/* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
|
|
114
|
-
message, nextModel, Array.map(
|
|
114
|
+
message, currentModel, nextModel, Array.map(
|
|
115
115
|
/* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */
|
|
116
|
-
commands, command => command.name),
|
|
116
|
+
commands, command => command.name), currentModel !== nextModel),
|
|
117
117
|
});
|
|
118
118
|
});
|
|
119
119
|
const runProcessMessage = (message, messageEffect) => (runtime) => {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Effect, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from '../../command';
|
|
3
|
+
export declare const Model: S.Struct<{
|
|
4
|
+
count: typeof S.Number;
|
|
5
|
+
}>;
|
|
6
|
+
export type Model = typeof Model.Type;
|
|
7
|
+
export declare const ClickedIncrement: import("../../schema").CallableTaggedStruct<"ClickedIncrement", {}>;
|
|
8
|
+
export declare const ClickedDecrement: import("../../schema").CallableTaggedStruct<"ClickedDecrement", {}>;
|
|
9
|
+
export declare const ClickedFetch: import("../../schema").CallableTaggedStruct<"ClickedFetch", {}>;
|
|
10
|
+
export declare const SucceededFetchCount: import("../../schema").CallableTaggedStruct<"SucceededFetchCount", {
|
|
11
|
+
count: typeof S.Number;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const FailedFetchCount: import("../../schema").CallableTaggedStruct<"FailedFetchCount", {
|
|
14
|
+
error: typeof S.String;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const Message: S.Union<[import("../../schema").CallableTaggedStruct<"ClickedIncrement", {}>, import("../../schema").CallableTaggedStruct<"ClickedDecrement", {}>, import("../../schema").CallableTaggedStruct<"ClickedFetch", {}>, import("../../schema").CallableTaggedStruct<"SucceededFetchCount", {
|
|
17
|
+
count: typeof S.Number;
|
|
18
|
+
}>, import("../../schema").CallableTaggedStruct<"FailedFetchCount", {
|
|
19
|
+
error: typeof S.String;
|
|
20
|
+
}>]>;
|
|
21
|
+
export type Message = typeof Message.Type;
|
|
22
|
+
export declare const FetchCount: Command.CommandDefinition<"FetchCount", {
|
|
23
|
+
readonly _tag: "SucceededFetchCount";
|
|
24
|
+
readonly count: number;
|
|
25
|
+
} | {
|
|
26
|
+
readonly _tag: "FailedFetchCount";
|
|
27
|
+
readonly error: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare const fetchCount: Readonly<{
|
|
30
|
+
name: "FetchCount";
|
|
31
|
+
effect: Effect.Effect<{
|
|
32
|
+
readonly _tag: "SucceededFetchCount";
|
|
33
|
+
readonly count: number;
|
|
34
|
+
}, never, never>;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const initialModel: Model;
|
|
37
|
+
export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<Command.Command<Message>>];
|
|
38
|
+
//# sourceMappingURL=counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"counter.d.ts","sourceRoot":"","sources":["../../../src/test/apps/counter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAKxC,eAAO,MAAM,KAAK;;EAAgC,CAAA;AAClD,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,gBAAgB,qEAAwB,CAAA;AACrD,eAAO,MAAM,gBAAgB,qEAAwB,CAAA;AACrD,eAAO,MAAM,YAAY,iEAAoB,CAAA;AAC7C,eAAO,MAAM,mBAAmB;;EAAgD,CAAA;AAChF,eAAO,MAAM,gBAAgB;;EAA6C,CAAA;AAE1E,eAAO,MAAM,OAAO;;;;IAMnB,CAAA;AACD,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,UAAU;;;;;;EAItB,CAAA;AAED,eAAO,MAAM,UAAU;;;;;;EAEtB,CAAA;AAID,eAAO,MAAM,YAAY,EAAE,KAAoB,CAAA;AAI/C,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAYxD,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect, Match as M, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from '../../command';
|
|
3
|
+
import { m } from '../../message';
|
|
4
|
+
// MODEL
|
|
5
|
+
export const Model = S.Struct({ count: S.Number });
|
|
6
|
+
// MESSAGE
|
|
7
|
+
export const ClickedIncrement = m('ClickedIncrement');
|
|
8
|
+
export const ClickedDecrement = m('ClickedDecrement');
|
|
9
|
+
export const ClickedFetch = m('ClickedFetch');
|
|
10
|
+
export const SucceededFetchCount = m('SucceededFetchCount', { count: S.Number });
|
|
11
|
+
export const FailedFetchCount = m('FailedFetchCount', { error: S.String });
|
|
12
|
+
export const Message = S.Union(ClickedIncrement, ClickedDecrement, ClickedFetch, SucceededFetchCount, FailedFetchCount);
|
|
13
|
+
// COMMAND
|
|
14
|
+
export const FetchCount = Command.define('FetchCount', SucceededFetchCount, FailedFetchCount);
|
|
15
|
+
export const fetchCount = FetchCount(Effect.sync(() => SucceededFetchCount({ count: 0 })));
|
|
16
|
+
// INIT
|
|
17
|
+
export const initialModel = { count: 0 };
|
|
18
|
+
// UPDATE
|
|
19
|
+
export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
20
|
+
ClickedIncrement: () => [{ count: model.count + 1 }, []],
|
|
21
|
+
ClickedDecrement: () => [{ count: model.count - 1 }, []],
|
|
22
|
+
ClickedFetch: () => [model, [fetchCount]],
|
|
23
|
+
SucceededFetchCount: ({ count }) => [{ count }, []],
|
|
24
|
+
FailedFetchCount: () => [model, []],
|
|
25
|
+
}));
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Effect, Option, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from '../../command';
|
|
3
|
+
export declare const ChildModel: S.Struct<{
|
|
4
|
+
status: S.Literal<["Idle", "Submitting", "Submitted"]>;
|
|
5
|
+
}>;
|
|
6
|
+
export type ChildModel = typeof ChildModel.Type;
|
|
7
|
+
export declare const SubmittedForm: import("../../schema").CallableTaggedStruct<"SubmittedForm", {}>;
|
|
8
|
+
export declare const SucceededSubmit: import("../../schema").CallableTaggedStruct<"SucceededSubmit", {
|
|
9
|
+
id: typeof S.String;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const CancelledForm: import("../../schema").CallableTaggedStruct<"CancelledForm", {}>;
|
|
12
|
+
export declare const CompletedReset: import("../../schema").CallableTaggedStruct<"CompletedReset", {}>;
|
|
13
|
+
export declare const ChildMessage: S.Union<[import("../../schema").CallableTaggedStruct<"SubmittedForm", {}>, import("../../schema").CallableTaggedStruct<"SucceededSubmit", {
|
|
14
|
+
id: typeof S.String;
|
|
15
|
+
}>, import("../../schema").CallableTaggedStruct<"CancelledForm", {}>, import("../../schema").CallableTaggedStruct<"CompletedReset", {}>]>;
|
|
16
|
+
export type ChildMessage = typeof ChildMessage.Type;
|
|
17
|
+
export declare const RequestedSave: import("../../schema").CallableTaggedStruct<"RequestedSave", {
|
|
18
|
+
id: typeof S.String;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const RequestedCancel: import("../../schema").CallableTaggedStruct<"RequestedCancel", {}>;
|
|
21
|
+
export declare const ChildOutMessage: S.Union<[import("../../schema").CallableTaggedStruct<"RequestedSave", {
|
|
22
|
+
id: typeof S.String;
|
|
23
|
+
}>, import("../../schema").CallableTaggedStruct<"RequestedCancel", {}>]>;
|
|
24
|
+
export type ChildOutMessage = typeof ChildOutMessage.Type;
|
|
25
|
+
export declare const SubmitForm: Command.CommandDefinition<"SubmitForm", {
|
|
26
|
+
readonly _tag: "SucceededSubmit";
|
|
27
|
+
readonly id: string;
|
|
28
|
+
}>;
|
|
29
|
+
export declare const submitForm: Readonly<{
|
|
30
|
+
name: "SubmitForm";
|
|
31
|
+
effect: Effect.Effect<{
|
|
32
|
+
readonly _tag: "SucceededSubmit";
|
|
33
|
+
readonly id: string;
|
|
34
|
+
}, never, never>;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const ResetForm: Command.CommandDefinition<"ResetForm", {
|
|
37
|
+
readonly _tag: "CompletedReset";
|
|
38
|
+
}>;
|
|
39
|
+
export declare const resetForm: Readonly<{
|
|
40
|
+
name: "ResetForm";
|
|
41
|
+
effect: Effect.Effect<{
|
|
42
|
+
readonly _tag: "CompletedReset";
|
|
43
|
+
}, never, never>;
|
|
44
|
+
}>;
|
|
45
|
+
export declare const initialChildModel: ChildModel;
|
|
46
|
+
export declare const childUpdate: (_model: ChildModel, message: ChildMessage) => readonly [ChildModel, ReadonlyArray<Command.Command<ChildMessage>>, Option.Option<ChildOutMessage>];
|
|
47
|
+
export declare const ParentModel: S.Struct<{
|
|
48
|
+
child: S.Struct<{
|
|
49
|
+
status: S.Literal<["Idle", "Submitting", "Submitted"]>;
|
|
50
|
+
}>;
|
|
51
|
+
savedIds: S.Array$<typeof S.String>;
|
|
52
|
+
cancelled: typeof S.Boolean;
|
|
53
|
+
}>;
|
|
54
|
+
export type ParentModel = typeof ParentModel.Type;
|
|
55
|
+
export declare const GotChildMessage: import("../../schema").CallableTaggedStruct<"GotChildMessage", {
|
|
56
|
+
message: S.Union<[import("../../schema").CallableTaggedStruct<"SubmittedForm", {}>, import("../../schema").CallableTaggedStruct<"SucceededSubmit", {
|
|
57
|
+
id: typeof S.String;
|
|
58
|
+
}>, import("../../schema").CallableTaggedStruct<"CancelledForm", {}>, import("../../schema").CallableTaggedStruct<"CompletedReset", {}>]>;
|
|
59
|
+
}>;
|
|
60
|
+
export declare const CompletedParentReset: import("../../schema").CallableTaggedStruct<"CompletedParentReset", {}>;
|
|
61
|
+
export declare const ParentMessage: S.Union<[import("../../schema").CallableTaggedStruct<"GotChildMessage", {
|
|
62
|
+
message: S.Union<[import("../../schema").CallableTaggedStruct<"SubmittedForm", {}>, import("../../schema").CallableTaggedStruct<"SucceededSubmit", {
|
|
63
|
+
id: typeof S.String;
|
|
64
|
+
}>, import("../../schema").CallableTaggedStruct<"CancelledForm", {}>, import("../../schema").CallableTaggedStruct<"CompletedReset", {}>]>;
|
|
65
|
+
}>, import("../../schema").CallableTaggedStruct<"CompletedParentReset", {}>]>;
|
|
66
|
+
export type ParentMessage = typeof ParentMessage.Type;
|
|
67
|
+
export declare const initialParentModel: ParentModel;
|
|
68
|
+
export declare const parentUpdate: (parentModel: ParentModel, message: ParentMessage) => readonly [ParentModel, ReadonlyArray<Command.Command<ChildMessage>>];
|
|
69
|
+
//# sourceMappingURL=formChild.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formChild.d.ts","sourceRoot":"","sources":["../../../src/test/apps/formChild.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhE,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAKxC,eAAO,MAAM,UAAU;;EAErB,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAI/C,eAAO,MAAM,aAAa,kEAAqB,CAAA;AAC/C,eAAO,MAAM,eAAe;;EAAyC,CAAA;AACrE,eAAO,MAAM,aAAa,kEAAqB,CAAA;AAC/C,eAAO,MAAM,cAAc,mEAAsB,CAAA;AAEjD,eAAO,MAAM,YAAY;;yIAKxB,CAAA;AACD,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAInD,eAAO,MAAM,aAAa;;EAAuC,CAAA;AACjE,eAAO,MAAM,eAAe,oEAAuB,CAAA;AAEnD,eAAO,MAAM,eAAe;;wEAA0C,CAAA;AACtE,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAA;AAIzD,eAAO,MAAM,UAAU;;;EAAgD,CAAA;AACvE,eAAO,MAAM,UAAU;;;;;;EAEtB,CAAA;AAED,eAAO,MAAM,SAAS;;EAA8C,CAAA;AACpE,eAAO,MAAM,SAAS;;;;;EAAiD,CAAA;AAIvE,eAAO,MAAM,iBAAiB,EAAE,UAA+B,CAAA;AAI/D,eAAO,MAAM,WAAW,GACtB,QAAQ,UAAU,EAClB,SAAS,YAAY,KACpB,SAAS,CACV,UAAU,EACV,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAC5C,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CA4B7B,CAAA;AAIH,eAAO,MAAM,WAAW;;;;;;EAItB,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA;AAIjD,eAAO,MAAM,eAAe;;;;EAE1B,CAAA;AACF,eAAO,MAAM,oBAAoB,yEAA4B,CAAA;AAE7D,eAAO,MAAM,aAAa;;;;6EAAiD,CAAA;AAC3E,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAIrD,eAAO,MAAM,kBAAkB,EAAE,WAIhC,CAAA;AAID,eAAO,MAAM,YAAY,GACvB,aAAa,WAAW,EACxB,SAAS,aAAa,KACrB,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAkCnE,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Effect, Match as M, Option, Schema as S } from 'effect';
|
|
2
|
+
import * as Command from '../../command';
|
|
3
|
+
import { m } from '../../message';
|
|
4
|
+
// CHILD MODEL
|
|
5
|
+
export const ChildModel = S.Struct({
|
|
6
|
+
status: S.Literal('Idle', 'Submitting', 'Submitted'),
|
|
7
|
+
});
|
|
8
|
+
// CHILD MESSAGE
|
|
9
|
+
export const SubmittedForm = m('SubmittedForm');
|
|
10
|
+
export const SucceededSubmit = m('SucceededSubmit', { id: S.String });
|
|
11
|
+
export const CancelledForm = m('CancelledForm');
|
|
12
|
+
export const CompletedReset = m('CompletedReset');
|
|
13
|
+
export const ChildMessage = S.Union(SubmittedForm, SucceededSubmit, CancelledForm, CompletedReset);
|
|
14
|
+
// CHILD OUT MESSAGE
|
|
15
|
+
export const RequestedSave = m('RequestedSave', { id: S.String });
|
|
16
|
+
export const RequestedCancel = m('RequestedCancel');
|
|
17
|
+
export const ChildOutMessage = S.Union(RequestedSave, RequestedCancel);
|
|
18
|
+
// CHILD COMMAND
|
|
19
|
+
export const SubmitForm = Command.define('SubmitForm', SucceededSubmit);
|
|
20
|
+
export const submitForm = SubmitForm(Effect.sync(() => SucceededSubmit({ id: 'abc' })));
|
|
21
|
+
export const ResetForm = Command.define('ResetForm', CompletedReset);
|
|
22
|
+
export const resetForm = ResetForm(Effect.sync(() => CompletedReset()));
|
|
23
|
+
// CHILD INIT
|
|
24
|
+
export const initialChildModel = { status: 'Idle' };
|
|
25
|
+
// CHILD UPDATE
|
|
26
|
+
export const childUpdate = (_model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
27
|
+
SubmittedForm: () => [
|
|
28
|
+
{ status: 'Submitting' },
|
|
29
|
+
[submitForm],
|
|
30
|
+
Option.none(),
|
|
31
|
+
],
|
|
32
|
+
SucceededSubmit: ({ id }) => [
|
|
33
|
+
{ status: 'Submitted' },
|
|
34
|
+
[resetForm],
|
|
35
|
+
Option.some(RequestedSave({ id })),
|
|
36
|
+
],
|
|
37
|
+
CancelledForm: () => [
|
|
38
|
+
{ status: 'Idle' },
|
|
39
|
+
[],
|
|
40
|
+
Option.some(RequestedCancel()),
|
|
41
|
+
],
|
|
42
|
+
CompletedReset: () => [{ status: 'Idle' }, [], Option.none()],
|
|
43
|
+
}));
|
|
44
|
+
// PARENT MODEL
|
|
45
|
+
export const ParentModel = S.Struct({
|
|
46
|
+
child: ChildModel,
|
|
47
|
+
savedIds: S.Array(S.String),
|
|
48
|
+
cancelled: S.Boolean,
|
|
49
|
+
});
|
|
50
|
+
// PARENT MESSAGE
|
|
51
|
+
export const GotChildMessage = m('GotChildMessage', {
|
|
52
|
+
message: ChildMessage,
|
|
53
|
+
});
|
|
54
|
+
export const CompletedParentReset = m('CompletedParentReset');
|
|
55
|
+
export const ParentMessage = S.Union(GotChildMessage, CompletedParentReset);
|
|
56
|
+
// PARENT INIT
|
|
57
|
+
export const initialParentModel = {
|
|
58
|
+
child: { status: 'Idle' },
|
|
59
|
+
savedIds: [],
|
|
60
|
+
cancelled: false,
|
|
61
|
+
};
|
|
62
|
+
// PARENT UPDATE
|
|
63
|
+
export const parentUpdate = (parentModel, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
64
|
+
GotChildMessage: ({ message: childMessage }) => {
|
|
65
|
+
const [nextChild, commands, maybeOutMessage] = childUpdate(parentModel.child, childMessage);
|
|
66
|
+
const nextParent = Option.match(maybeOutMessage, {
|
|
67
|
+
onNone: () => ({ ...parentModel, child: nextChild }),
|
|
68
|
+
onSome: outMessage => M.value(outMessage).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
69
|
+
RequestedSave: ({ id }) => ({
|
|
70
|
+
...parentModel,
|
|
71
|
+
child: nextChild,
|
|
72
|
+
savedIds: [...parentModel.savedIds, id],
|
|
73
|
+
}),
|
|
74
|
+
RequestedCancel: () => ({
|
|
75
|
+
...parentModel,
|
|
76
|
+
child: nextChild,
|
|
77
|
+
cancelled: true,
|
|
78
|
+
}),
|
|
79
|
+
})),
|
|
80
|
+
});
|
|
81
|
+
return [nextParent, commands];
|
|
82
|
+
},
|
|
83
|
+
CompletedParentReset: () => [parentModel, []],
|
|
84
|
+
}));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Schema as S } from 'effect';
|
|
2
|
+
import type { Html } from '../../html';
|
|
3
|
+
export declare const Model: S.Struct<{
|
|
4
|
+
lastKey: typeof S.String;
|
|
5
|
+
isShifted: typeof S.Boolean;
|
|
6
|
+
}>;
|
|
7
|
+
export type Model = typeof Model.Type;
|
|
8
|
+
export declare const PressedKey: import("../../schema").CallableTaggedStruct<"PressedKey", {
|
|
9
|
+
key: typeof S.String;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const PressedShiftKey: import("../../schema").CallableTaggedStruct<"PressedShiftKey", {
|
|
12
|
+
key: typeof S.String;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const Message: S.Union<[import("../../schema").CallableTaggedStruct<"PressedKey", {
|
|
15
|
+
key: typeof S.String;
|
|
16
|
+
}>, import("../../schema").CallableTaggedStruct<"PressedShiftKey", {
|
|
17
|
+
key: typeof S.String;
|
|
18
|
+
}>]>;
|
|
19
|
+
export type Message = typeof Message.Type;
|
|
20
|
+
export declare const initialModel: Model;
|
|
21
|
+
export declare const update: (model: Model, message: Message) => readonly [Model, ReadonlyArray<never>];
|
|
22
|
+
export declare const view: (model: Model) => Html;
|
|
23
|
+
//# sourceMappingURL=keypress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keypress.d.ts","sourceRoot":"","sources":["../../../src/test/apps/keypress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAMtC,eAAO,MAAM,KAAK;;;EAGhB,CAAA;AAEF,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAIrC,eAAO,MAAM,UAAU;;EAAqC,CAAA;AAC5D,eAAO,MAAM,eAAe;;EAA0C,CAAA;AAEtE,eAAO,MAAM,OAAO;;;;IAAuC,CAAA;AAC3D,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAIzC,eAAO,MAAM,YAAY,EAAE,KAG1B,CAAA;AAID,eAAO,MAAM,MAAM,GACjB,OAAO,KAAK,EACZ,SAAS,OAAO,KACf,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAarC,CAAA;AAMH,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,IAiBjC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Match as M, Schema as S } from 'effect';
|
|
2
|
+
import { html } from '../../html';
|
|
3
|
+
import { m } from '../../message';
|
|
4
|
+
// MODEL
|
|
5
|
+
export const Model = S.Struct({
|
|
6
|
+
lastKey: S.String,
|
|
7
|
+
isShifted: S.Boolean,
|
|
8
|
+
});
|
|
9
|
+
// MESSAGE
|
|
10
|
+
export const PressedKey = m('PressedKey', { key: S.String });
|
|
11
|
+
export const PressedShiftKey = m('PressedShiftKey', { key: S.String });
|
|
12
|
+
export const Message = S.Union(PressedKey, PressedShiftKey);
|
|
13
|
+
// INIT
|
|
14
|
+
export const initialModel = {
|
|
15
|
+
lastKey: '',
|
|
16
|
+
isShifted: false,
|
|
17
|
+
};
|
|
18
|
+
// UPDATE
|
|
19
|
+
export const update = (model, message) => M.value(message).pipe(M.withReturnType(), M.tagsExhaustive({
|
|
20
|
+
PressedKey: ({ key }) => [
|
|
21
|
+
{ ...model, lastKey: key, isShifted: false },
|
|
22
|
+
[],
|
|
23
|
+
],
|
|
24
|
+
PressedShiftKey: ({ key }) => [
|
|
25
|
+
{ ...model, lastKey: key, isShifted: true },
|
|
26
|
+
[],
|
|
27
|
+
],
|
|
28
|
+
}));
|
|
29
|
+
// VIEW
|
|
30
|
+
const { div, span, Id, Class, AriaLabel, Role, OnKeyDown } = html();
|
|
31
|
+
export const view = (model) => div([
|
|
32
|
+
Id('key-app'),
|
|
33
|
+
Role('application'),
|
|
34
|
+
AriaLabel('Key press area'),
|
|
35
|
+
OnKeyDown((key, modifiers) => modifiers.shiftKey ? PressedShiftKey({ key }) : PressedKey({ key })),
|
|
36
|
+
], [
|
|
37
|
+
span([Class('last-key'), AriaLabel('Last key')], [model.lastKey]),
|
|
38
|
+
span([Class('shifted'), AriaLabel('Shift pressed')], [model.isShifted ? 'true' : 'false']),
|
|
39
|
+
]);
|