@rotorsoft/act 0.12.2 → 0.14.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/README.md +9 -9
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/act-builder.d.ts +30 -88
- package/dist/@types/act-builder.d.ts.map +1 -1
- package/dist/@types/act.d.ts +5 -5
- package/dist/@types/ports.d.ts +1 -1
- package/dist/@types/projection-builder.d.ts +2 -6
- package/dist/@types/projection-builder.d.ts.map +1 -1
- package/dist/@types/slice-builder.d.ts +13 -24
- package/dist/@types/slice-builder.d.ts.map +1 -1
- package/dist/@types/state-builder.d.ts +63 -48
- package/dist/@types/state-builder.d.ts.map +1 -1
- package/dist/@types/types/ports.d.ts +1 -1
- package/dist/index.cjs +108 -109
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +108 -107
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -53,8 +53,6 @@ __export(index_exports, {
|
|
|
53
53
|
dispose: () => dispose,
|
|
54
54
|
disposeAndExit: () => disposeAndExit,
|
|
55
55
|
extend: () => extend,
|
|
56
|
-
isProjection: () => isProjection,
|
|
57
|
-
isSlice: () => isSlice,
|
|
58
56
|
logger: () => logger,
|
|
59
57
|
patch: () => patch,
|
|
60
58
|
port: () => port,
|
|
@@ -843,8 +841,8 @@ var Act = class {
|
|
|
843
841
|
* @example Reaction triggering another action
|
|
844
842
|
* ```typescript
|
|
845
843
|
* const app = act()
|
|
846
|
-
* .
|
|
847
|
-
* .
|
|
844
|
+
* .withState(Order)
|
|
845
|
+
* .withState(Inventory)
|
|
848
846
|
* .on("OrderPlaced")
|
|
849
847
|
* .do(async (event, context) => {
|
|
850
848
|
* // This action is triggered by an event
|
|
@@ -1206,8 +1204,8 @@ var Act = class {
|
|
|
1206
1204
|
* @example Dynamic stream creation
|
|
1207
1205
|
* ```typescript
|
|
1208
1206
|
* const app = act()
|
|
1209
|
-
* .
|
|
1210
|
-
* .
|
|
1207
|
+
* .withState(User)
|
|
1208
|
+
* .withState(UserStats)
|
|
1211
1209
|
* .on("UserLoggedIn")
|
|
1212
1210
|
* .do(async (event) => ["incrementLoginCount", {}])
|
|
1213
1211
|
* .to((event) => ({
|
|
@@ -1448,10 +1446,84 @@ var _this_ = ({ stream }) => ({
|
|
|
1448
1446
|
});
|
|
1449
1447
|
var _void_ = () => void 0;
|
|
1450
1448
|
|
|
1451
|
-
// src/
|
|
1452
|
-
function
|
|
1453
|
-
|
|
1449
|
+
// src/act-builder.ts
|
|
1450
|
+
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
1451
|
+
actions: {},
|
|
1452
|
+
events: {}
|
|
1453
|
+
}, pendingProjections = []) {
|
|
1454
|
+
const builder = {
|
|
1455
|
+
withState: (state2) => {
|
|
1456
|
+
registerState(state2, states, registry.actions, registry.events);
|
|
1457
|
+
return act(
|
|
1458
|
+
states,
|
|
1459
|
+
registry,
|
|
1460
|
+
pendingProjections
|
|
1461
|
+
);
|
|
1462
|
+
},
|
|
1463
|
+
withSlice: (input) => {
|
|
1464
|
+
for (const s of input.states.values()) {
|
|
1465
|
+
registerState(s, states, registry.actions, registry.events);
|
|
1466
|
+
}
|
|
1467
|
+
for (const eventName of Object.keys(input.events)) {
|
|
1468
|
+
const sliceRegister = input.events[eventName];
|
|
1469
|
+
for (const [name, reaction] of sliceRegister.reactions) {
|
|
1470
|
+
registry.events[eventName].reactions.set(name, reaction);
|
|
1471
|
+
}
|
|
1472
|
+
}
|
|
1473
|
+
pendingProjections.push(...input.projections);
|
|
1474
|
+
return act(
|
|
1475
|
+
states,
|
|
1476
|
+
registry,
|
|
1477
|
+
pendingProjections
|
|
1478
|
+
);
|
|
1479
|
+
},
|
|
1480
|
+
withProjection: (proj) => {
|
|
1481
|
+
mergeProjection(proj, registry.events);
|
|
1482
|
+
return act(states, registry, pendingProjections);
|
|
1483
|
+
},
|
|
1484
|
+
on: (event) => ({
|
|
1485
|
+
do: (handler, options) => {
|
|
1486
|
+
const reaction = {
|
|
1487
|
+
handler,
|
|
1488
|
+
resolver: _this_,
|
|
1489
|
+
options: {
|
|
1490
|
+
blockOnError: options?.blockOnError ?? true,
|
|
1491
|
+
maxRetries: options?.maxRetries ?? 3
|
|
1492
|
+
}
|
|
1493
|
+
};
|
|
1494
|
+
const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
|
|
1495
|
+
registry.events[event].reactions.set(name, reaction);
|
|
1496
|
+
return {
|
|
1497
|
+
...builder,
|
|
1498
|
+
to(resolver) {
|
|
1499
|
+
registry.events[event].reactions.set(name, {
|
|
1500
|
+
...reaction,
|
|
1501
|
+
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1502
|
+
});
|
|
1503
|
+
return builder;
|
|
1504
|
+
},
|
|
1505
|
+
void() {
|
|
1506
|
+
registry.events[event].reactions.set(name, {
|
|
1507
|
+
...reaction,
|
|
1508
|
+
resolver: _void_
|
|
1509
|
+
});
|
|
1510
|
+
return builder;
|
|
1511
|
+
}
|
|
1512
|
+
};
|
|
1513
|
+
}
|
|
1514
|
+
}),
|
|
1515
|
+
build: () => {
|
|
1516
|
+
for (const proj of pendingProjections) {
|
|
1517
|
+
mergeProjection(proj, registry.events);
|
|
1518
|
+
}
|
|
1519
|
+
return new Act(registry, states);
|
|
1520
|
+
},
|
|
1521
|
+
events: registry.events
|
|
1522
|
+
};
|
|
1523
|
+
return builder;
|
|
1454
1524
|
}
|
|
1525
|
+
|
|
1526
|
+
// src/projection-builder.ts
|
|
1455
1527
|
function projection(target, events = {}) {
|
|
1456
1528
|
const defaultResolver = target ? { target } : void 0;
|
|
1457
1529
|
const builder = {
|
|
@@ -1513,12 +1585,9 @@ function projection(target, events = {}) {
|
|
|
1513
1585
|
}
|
|
1514
1586
|
|
|
1515
1587
|
// src/slice-builder.ts
|
|
1516
|
-
function isSlice(x) {
|
|
1517
|
-
return x != null && x._tag === "Slice";
|
|
1518
|
-
}
|
|
1519
1588
|
function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, projections = []) {
|
|
1520
1589
|
const builder = {
|
|
1521
|
-
|
|
1590
|
+
withState: (state2) => {
|
|
1522
1591
|
registerState(state2, states, actions, events);
|
|
1523
1592
|
return slice(
|
|
1524
1593
|
states,
|
|
@@ -1527,7 +1596,7 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1527
1596
|
projections
|
|
1528
1597
|
);
|
|
1529
1598
|
},
|
|
1530
|
-
|
|
1599
|
+
withProjection: (proj) => {
|
|
1531
1600
|
projections.push(proj);
|
|
1532
1601
|
return slice(states, actions, events, projections);
|
|
1533
1602
|
},
|
|
@@ -1573,94 +1642,6 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1573
1642
|
return builder;
|
|
1574
1643
|
}
|
|
1575
1644
|
|
|
1576
|
-
// src/act-builder.ts
|
|
1577
|
-
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
1578
|
-
actions: {},
|
|
1579
|
-
events: {}
|
|
1580
|
-
}, pendingProjections = []) {
|
|
1581
|
-
const builder = {
|
|
1582
|
-
with: ((input) => {
|
|
1583
|
-
if (isProjection(input)) {
|
|
1584
|
-
mergeProjection(input, registry.events);
|
|
1585
|
-
return act(
|
|
1586
|
-
states,
|
|
1587
|
-
registry,
|
|
1588
|
-
pendingProjections
|
|
1589
|
-
);
|
|
1590
|
-
}
|
|
1591
|
-
if (isSlice(input)) {
|
|
1592
|
-
for (const s of input.states.values()) {
|
|
1593
|
-
registerState(s, states, registry.actions, registry.events);
|
|
1594
|
-
}
|
|
1595
|
-
for (const eventName of Object.keys(input.events)) {
|
|
1596
|
-
const sliceRegister = input.events[eventName];
|
|
1597
|
-
for (const [name, reaction] of sliceRegister.reactions) {
|
|
1598
|
-
registry.events[eventName].reactions.set(name, reaction);
|
|
1599
|
-
}
|
|
1600
|
-
}
|
|
1601
|
-
pendingProjections.push(...input.projections);
|
|
1602
|
-
return act(
|
|
1603
|
-
states,
|
|
1604
|
-
registry,
|
|
1605
|
-
pendingProjections
|
|
1606
|
-
);
|
|
1607
|
-
}
|
|
1608
|
-
registerState(input, states, registry.actions, registry.events);
|
|
1609
|
-
return act(
|
|
1610
|
-
states,
|
|
1611
|
-
registry,
|
|
1612
|
-
pendingProjections
|
|
1613
|
-
);
|
|
1614
|
-
}),
|
|
1615
|
-
/**
|
|
1616
|
-
* Adds a reaction to an event.
|
|
1617
|
-
*
|
|
1618
|
-
* @template K The type of event
|
|
1619
|
-
* @param event The event to add a reaction to
|
|
1620
|
-
* @returns The builder
|
|
1621
|
-
*/
|
|
1622
|
-
on: (event) => ({
|
|
1623
|
-
do: (handler, options) => {
|
|
1624
|
-
const reaction = {
|
|
1625
|
-
handler,
|
|
1626
|
-
resolver: _this_,
|
|
1627
|
-
options: {
|
|
1628
|
-
blockOnError: options?.blockOnError ?? true,
|
|
1629
|
-
maxRetries: options?.maxRetries ?? 3
|
|
1630
|
-
}
|
|
1631
|
-
};
|
|
1632
|
-
const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
|
|
1633
|
-
registry.events[event].reactions.set(name, reaction);
|
|
1634
|
-
return {
|
|
1635
|
-
...builder,
|
|
1636
|
-
to(resolver) {
|
|
1637
|
-
registry.events[event].reactions.set(name, {
|
|
1638
|
-
...reaction,
|
|
1639
|
-
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1640
|
-
});
|
|
1641
|
-
return builder;
|
|
1642
|
-
},
|
|
1643
|
-
void() {
|
|
1644
|
-
registry.events[event].reactions.set(name, {
|
|
1645
|
-
...reaction,
|
|
1646
|
-
resolver: _void_
|
|
1647
|
-
});
|
|
1648
|
-
return builder;
|
|
1649
|
-
}
|
|
1650
|
-
};
|
|
1651
|
-
}
|
|
1652
|
-
}),
|
|
1653
|
-
build: () => {
|
|
1654
|
-
for (const proj of pendingProjections) {
|
|
1655
|
-
mergeProjection(proj, registry.events);
|
|
1656
|
-
}
|
|
1657
|
-
return new Act(registry, states);
|
|
1658
|
-
},
|
|
1659
|
-
events: registry.events
|
|
1660
|
-
};
|
|
1661
|
-
return builder;
|
|
1662
|
-
}
|
|
1663
|
-
|
|
1664
1645
|
// src/state-builder.ts
|
|
1665
1646
|
function state(entry) {
|
|
1666
1647
|
const keys = Object.keys(entry);
|
|
@@ -1671,19 +1652,34 @@ function state(entry) {
|
|
|
1671
1652
|
init(init) {
|
|
1672
1653
|
return {
|
|
1673
1654
|
emits(events) {
|
|
1674
|
-
|
|
1675
|
-
|
|
1655
|
+
const defaultPatch = Object.fromEntries(
|
|
1656
|
+
Object.keys(events).map((k) => [
|
|
1657
|
+
k,
|
|
1658
|
+
({ data }) => data
|
|
1659
|
+
])
|
|
1660
|
+
);
|
|
1661
|
+
const builder = action_builder({
|
|
1662
|
+
events,
|
|
1663
|
+
actions: {},
|
|
1664
|
+
state: stateSchema,
|
|
1665
|
+
name,
|
|
1666
|
+
init,
|
|
1667
|
+
patch: defaultPatch,
|
|
1668
|
+
on: {}
|
|
1669
|
+
});
|
|
1670
|
+
return Object.assign(builder, {
|
|
1671
|
+
patch(customPatch) {
|
|
1676
1672
|
return action_builder({
|
|
1677
1673
|
events,
|
|
1678
1674
|
actions: {},
|
|
1679
1675
|
state: stateSchema,
|
|
1680
1676
|
name,
|
|
1681
1677
|
init,
|
|
1682
|
-
patch:
|
|
1678
|
+
patch: { ...defaultPatch, ...customPatch },
|
|
1683
1679
|
on: {}
|
|
1684
1680
|
});
|
|
1685
1681
|
}
|
|
1686
|
-
};
|
|
1682
|
+
});
|
|
1687
1683
|
}
|
|
1688
1684
|
};
|
|
1689
1685
|
}
|
|
@@ -1706,7 +1702,12 @@ function action_builder(state2) {
|
|
|
1706
1702
|
return { emit };
|
|
1707
1703
|
}
|
|
1708
1704
|
function emit(handler) {
|
|
1709
|
-
|
|
1705
|
+
if (typeof handler === "string") {
|
|
1706
|
+
const eventName = handler;
|
|
1707
|
+
on[action2] = ((payload) => [eventName, payload]);
|
|
1708
|
+
} else {
|
|
1709
|
+
on[action2] = handler;
|
|
1710
|
+
}
|
|
1710
1711
|
return action_builder({
|
|
1711
1712
|
...state2,
|
|
1712
1713
|
actions,
|
|
@@ -1749,8 +1750,6 @@ function action_builder(state2) {
|
|
|
1749
1750
|
dispose,
|
|
1750
1751
|
disposeAndExit,
|
|
1751
1752
|
extend,
|
|
1752
|
-
isProjection,
|
|
1753
|
-
isSlice,
|
|
1754
1753
|
logger,
|
|
1755
1754
|
patch,
|
|
1756
1755
|
port,
|