@doeixd/machine 0.0.13 → 0.0.18

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 (54) hide show
  1. package/README.md +77 -25
  2. package/dist/cjs/development/core.js +1852 -0
  3. package/dist/cjs/development/core.js.map +7 -0
  4. package/dist/cjs/development/index.js +1377 -1372
  5. package/dist/cjs/development/index.js.map +4 -4
  6. package/dist/cjs/production/core.js +1 -0
  7. package/dist/cjs/production/index.js +5 -5
  8. package/dist/esm/development/core.js +1829 -0
  9. package/dist/esm/development/core.js.map +7 -0
  10. package/dist/esm/development/index.js +1377 -1372
  11. package/dist/esm/development/index.js.map +4 -4
  12. package/dist/esm/production/core.js +1 -0
  13. package/dist/esm/production/index.js +5 -5
  14. package/dist/types/core.d.ts +18 -0
  15. package/dist/types/core.d.ts.map +1 -0
  16. package/dist/types/extract.d.ts +15 -1
  17. package/dist/types/extract.d.ts.map +1 -1
  18. package/dist/types/functional-combinators.d.ts +3 -5
  19. package/dist/types/functional-combinators.d.ts.map +1 -1
  20. package/dist/types/index.d.ts +254 -18
  21. package/dist/types/index.d.ts.map +1 -1
  22. package/dist/types/middleware/composition.d.ts +460 -0
  23. package/dist/types/middleware/composition.d.ts.map +1 -0
  24. package/dist/types/middleware/core.d.ts +196 -0
  25. package/dist/types/middleware/core.d.ts.map +1 -0
  26. package/dist/types/middleware/history.d.ts +54 -0
  27. package/dist/types/middleware/history.d.ts.map +1 -0
  28. package/dist/types/middleware/index.d.ts +10 -0
  29. package/dist/types/middleware/index.d.ts.map +1 -0
  30. package/dist/types/middleware/snapshot.d.ts +63 -0
  31. package/dist/types/middleware/snapshot.d.ts.map +1 -0
  32. package/dist/types/middleware/time-travel.d.ts +81 -0
  33. package/dist/types/middleware/time-travel.d.ts.map +1 -0
  34. package/package.json +19 -6
  35. package/src/core.ts +167 -0
  36. package/src/entry-react.ts +9 -0
  37. package/src/entry-solid.ts +9 -0
  38. package/src/extract.ts +61 -61
  39. package/src/functional-combinators.ts +3 -3
  40. package/src/generators.ts +6 -6
  41. package/src/index.ts +389 -101
  42. package/src/middleware/composition.ts +944 -0
  43. package/src/middleware/core.ts +573 -0
  44. package/src/middleware/history.ts +104 -0
  45. package/src/middleware/index.ts +13 -0
  46. package/src/middleware/snapshot.ts +153 -0
  47. package/src/middleware/time-travel.ts +236 -0
  48. package/src/middleware.ts +735 -1614
  49. package/src/prototype_functional.ts +46 -0
  50. package/src/reproduce_issue.ts +26 -0
  51. package/dist/types/middleware.d.ts +0 -1048
  52. package/dist/types/middleware.d.ts.map +0 -1
  53. package/dist/types/runtime-extract.d.ts +0 -53
  54. package/dist/types/runtime-extract.d.ts.map +0 -1
@@ -0,0 +1,46 @@
1
+ // Mocking the core types for the prototype
2
+ type Machine<C, T> = { context: C } & T;
3
+
4
+ function createMachineInternal<C, T>(context: C, transitions: T): Machine<C, T> {
5
+ return Object.assign({ context }, transitions) as Machine<C, T>;
6
+ }
7
+
8
+ // Proposed API
9
+ // fn takes a 'transition' helper and returns the transitions object
10
+ export function createMachine<C, T extends Record<string, (this: C, ...args: any[]) => any>>(
11
+ context: C,
12
+ fn: (transition: (newContext: C) => Machine<C, T>) => T
13
+ ): Machine<C, T> {
14
+ // We need to handle the circularity:
15
+ // T depends on the return type of fn.
16
+ // fn needs 'transition' which returns Machine<C, T>.
17
+
18
+ // In runtime:
19
+ let transitions: T;
20
+
21
+ const transition = (newContext: C) => {
22
+ return createMachineInternal(newContext, transitions);
23
+ };
24
+
25
+ transitions = fn(transition);
26
+
27
+ return createMachineInternal(context, transitions);
28
+ }
29
+
30
+ // Usage Test
31
+ type Context = { count: number };
32
+
33
+ const machine = createMachine({ count: 0 }, (transition) => ({
34
+ inc() {
35
+ // 'this' should be Context
36
+ return transition({ count: this.count + 1 });
37
+ },
38
+ add(n: number) {
39
+ return transition({ count: this.count + n });
40
+ }
41
+ }));
42
+
43
+ // Verify types
44
+ const next = machine.inc(); // Should be Machine<Context, ...>
45
+ const val = next.context.count;
46
+ const next2 = next.add(5);
@@ -0,0 +1,26 @@
1
+ import { createMachine } from './index';
2
+
3
+ type ContextA = { count: number };
4
+ type ContextB = { text: string };
5
+
6
+ const machineA = createMachine<ContextA, any>({ count: 0 }, {
7
+ next() {
8
+ // Check if this.transitions exists
9
+ console.log('this.transitions is:', (this as any).transitions);
10
+
11
+ // Passing `this` which includes `context: ContextA`
12
+ // to a machine that expects `ContextB`.
13
+ return createMachine<ContextB, any>({ text: "hello" }, this);
14
+ }
15
+ });
16
+
17
+ // Check the type of machineA.next()
18
+ const machineB = machineA.next();
19
+
20
+ // machineB.context should be ContextB
21
+ // But if the issue exists, it might have issues.
22
+ const text: string = machineB.context.text;
23
+
24
+ // Let's try to access a property that shouldn't exist if types are correct
25
+ // @ts-expect-error
26
+ const count: number = machineB.context.count;