@rotorsoft/act 0.12.2 → 0.13.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 +7 -7
- 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/types/ports.d.ts +1 -1
- package/dist/index.cjs +83 -104
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +83 -102
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -774,8 +774,8 @@ var Act = class {
|
|
|
774
774
|
* @example Reaction triggering another action
|
|
775
775
|
* ```typescript
|
|
776
776
|
* const app = act()
|
|
777
|
-
* .
|
|
778
|
-
* .
|
|
777
|
+
* .withState(Order)
|
|
778
|
+
* .withState(Inventory)
|
|
779
779
|
* .on("OrderPlaced")
|
|
780
780
|
* .do(async (event, context) => {
|
|
781
781
|
* // This action is triggered by an event
|
|
@@ -1137,8 +1137,8 @@ var Act = class {
|
|
|
1137
1137
|
* @example Dynamic stream creation
|
|
1138
1138
|
* ```typescript
|
|
1139
1139
|
* const app = act()
|
|
1140
|
-
* .
|
|
1141
|
-
* .
|
|
1140
|
+
* .withState(User)
|
|
1141
|
+
* .withState(UserStats)
|
|
1142
1142
|
* .on("UserLoggedIn")
|
|
1143
1143
|
* .do(async (event) => ["incrementLoginCount", {}])
|
|
1144
1144
|
* .to((event) => ({
|
|
@@ -1379,10 +1379,84 @@ var _this_ = ({ stream }) => ({
|
|
|
1379
1379
|
});
|
|
1380
1380
|
var _void_ = () => void 0;
|
|
1381
1381
|
|
|
1382
|
-
// src/
|
|
1383
|
-
function
|
|
1384
|
-
|
|
1382
|
+
// src/act-builder.ts
|
|
1383
|
+
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
1384
|
+
actions: {},
|
|
1385
|
+
events: {}
|
|
1386
|
+
}, pendingProjections = []) {
|
|
1387
|
+
const builder = {
|
|
1388
|
+
withState: (state2) => {
|
|
1389
|
+
registerState(state2, states, registry.actions, registry.events);
|
|
1390
|
+
return act(
|
|
1391
|
+
states,
|
|
1392
|
+
registry,
|
|
1393
|
+
pendingProjections
|
|
1394
|
+
);
|
|
1395
|
+
},
|
|
1396
|
+
withSlice: (input) => {
|
|
1397
|
+
for (const s of input.states.values()) {
|
|
1398
|
+
registerState(s, states, registry.actions, registry.events);
|
|
1399
|
+
}
|
|
1400
|
+
for (const eventName of Object.keys(input.events)) {
|
|
1401
|
+
const sliceRegister = input.events[eventName];
|
|
1402
|
+
for (const [name, reaction] of sliceRegister.reactions) {
|
|
1403
|
+
registry.events[eventName].reactions.set(name, reaction);
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
pendingProjections.push(...input.projections);
|
|
1407
|
+
return act(
|
|
1408
|
+
states,
|
|
1409
|
+
registry,
|
|
1410
|
+
pendingProjections
|
|
1411
|
+
);
|
|
1412
|
+
},
|
|
1413
|
+
withProjection: (proj) => {
|
|
1414
|
+
mergeProjection(proj, registry.events);
|
|
1415
|
+
return act(states, registry, pendingProjections);
|
|
1416
|
+
},
|
|
1417
|
+
on: (event) => ({
|
|
1418
|
+
do: (handler, options) => {
|
|
1419
|
+
const reaction = {
|
|
1420
|
+
handler,
|
|
1421
|
+
resolver: _this_,
|
|
1422
|
+
options: {
|
|
1423
|
+
blockOnError: options?.blockOnError ?? true,
|
|
1424
|
+
maxRetries: options?.maxRetries ?? 3
|
|
1425
|
+
}
|
|
1426
|
+
};
|
|
1427
|
+
const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
|
|
1428
|
+
registry.events[event].reactions.set(name, reaction);
|
|
1429
|
+
return {
|
|
1430
|
+
...builder,
|
|
1431
|
+
to(resolver) {
|
|
1432
|
+
registry.events[event].reactions.set(name, {
|
|
1433
|
+
...reaction,
|
|
1434
|
+
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1435
|
+
});
|
|
1436
|
+
return builder;
|
|
1437
|
+
},
|
|
1438
|
+
void() {
|
|
1439
|
+
registry.events[event].reactions.set(name, {
|
|
1440
|
+
...reaction,
|
|
1441
|
+
resolver: _void_
|
|
1442
|
+
});
|
|
1443
|
+
return builder;
|
|
1444
|
+
}
|
|
1445
|
+
};
|
|
1446
|
+
}
|
|
1447
|
+
}),
|
|
1448
|
+
build: () => {
|
|
1449
|
+
for (const proj of pendingProjections) {
|
|
1450
|
+
mergeProjection(proj, registry.events);
|
|
1451
|
+
}
|
|
1452
|
+
return new Act(registry, states);
|
|
1453
|
+
},
|
|
1454
|
+
events: registry.events
|
|
1455
|
+
};
|
|
1456
|
+
return builder;
|
|
1385
1457
|
}
|
|
1458
|
+
|
|
1459
|
+
// src/projection-builder.ts
|
|
1386
1460
|
function projection(target, events = {}) {
|
|
1387
1461
|
const defaultResolver = target ? { target } : void 0;
|
|
1388
1462
|
const builder = {
|
|
@@ -1444,12 +1518,9 @@ function projection(target, events = {}) {
|
|
|
1444
1518
|
}
|
|
1445
1519
|
|
|
1446
1520
|
// src/slice-builder.ts
|
|
1447
|
-
function isSlice(x) {
|
|
1448
|
-
return x != null && x._tag === "Slice";
|
|
1449
|
-
}
|
|
1450
1521
|
function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, projections = []) {
|
|
1451
1522
|
const builder = {
|
|
1452
|
-
|
|
1523
|
+
withState: (state2) => {
|
|
1453
1524
|
registerState(state2, states, actions, events);
|
|
1454
1525
|
return slice(
|
|
1455
1526
|
states,
|
|
@@ -1458,7 +1529,7 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1458
1529
|
projections
|
|
1459
1530
|
);
|
|
1460
1531
|
},
|
|
1461
|
-
|
|
1532
|
+
withProjection: (proj) => {
|
|
1462
1533
|
projections.push(proj);
|
|
1463
1534
|
return slice(states, actions, events, projections);
|
|
1464
1535
|
},
|
|
@@ -1504,94 +1575,6 @@ function slice(states = /* @__PURE__ */ new Map(), actions = {}, events = {}, pr
|
|
|
1504
1575
|
return builder;
|
|
1505
1576
|
}
|
|
1506
1577
|
|
|
1507
|
-
// src/act-builder.ts
|
|
1508
|
-
function act(states = /* @__PURE__ */ new Map(), registry = {
|
|
1509
|
-
actions: {},
|
|
1510
|
-
events: {}
|
|
1511
|
-
}, pendingProjections = []) {
|
|
1512
|
-
const builder = {
|
|
1513
|
-
with: ((input) => {
|
|
1514
|
-
if (isProjection(input)) {
|
|
1515
|
-
mergeProjection(input, registry.events);
|
|
1516
|
-
return act(
|
|
1517
|
-
states,
|
|
1518
|
-
registry,
|
|
1519
|
-
pendingProjections
|
|
1520
|
-
);
|
|
1521
|
-
}
|
|
1522
|
-
if (isSlice(input)) {
|
|
1523
|
-
for (const s of input.states.values()) {
|
|
1524
|
-
registerState(s, states, registry.actions, registry.events);
|
|
1525
|
-
}
|
|
1526
|
-
for (const eventName of Object.keys(input.events)) {
|
|
1527
|
-
const sliceRegister = input.events[eventName];
|
|
1528
|
-
for (const [name, reaction] of sliceRegister.reactions) {
|
|
1529
|
-
registry.events[eventName].reactions.set(name, reaction);
|
|
1530
|
-
}
|
|
1531
|
-
}
|
|
1532
|
-
pendingProjections.push(...input.projections);
|
|
1533
|
-
return act(
|
|
1534
|
-
states,
|
|
1535
|
-
registry,
|
|
1536
|
-
pendingProjections
|
|
1537
|
-
);
|
|
1538
|
-
}
|
|
1539
|
-
registerState(input, states, registry.actions, registry.events);
|
|
1540
|
-
return act(
|
|
1541
|
-
states,
|
|
1542
|
-
registry,
|
|
1543
|
-
pendingProjections
|
|
1544
|
-
);
|
|
1545
|
-
}),
|
|
1546
|
-
/**
|
|
1547
|
-
* Adds a reaction to an event.
|
|
1548
|
-
*
|
|
1549
|
-
* @template K The type of event
|
|
1550
|
-
* @param event The event to add a reaction to
|
|
1551
|
-
* @returns The builder
|
|
1552
|
-
*/
|
|
1553
|
-
on: (event) => ({
|
|
1554
|
-
do: (handler, options) => {
|
|
1555
|
-
const reaction = {
|
|
1556
|
-
handler,
|
|
1557
|
-
resolver: _this_,
|
|
1558
|
-
options: {
|
|
1559
|
-
blockOnError: options?.blockOnError ?? true,
|
|
1560
|
-
maxRetries: options?.maxRetries ?? 3
|
|
1561
|
-
}
|
|
1562
|
-
};
|
|
1563
|
-
const name = handler.name || `${String(event)}_${registry.events[event].reactions.size}`;
|
|
1564
|
-
registry.events[event].reactions.set(name, reaction);
|
|
1565
|
-
return {
|
|
1566
|
-
...builder,
|
|
1567
|
-
to(resolver) {
|
|
1568
|
-
registry.events[event].reactions.set(name, {
|
|
1569
|
-
...reaction,
|
|
1570
|
-
resolver: typeof resolver === "string" ? { target: resolver } : resolver
|
|
1571
|
-
});
|
|
1572
|
-
return builder;
|
|
1573
|
-
},
|
|
1574
|
-
void() {
|
|
1575
|
-
registry.events[event].reactions.set(name, {
|
|
1576
|
-
...reaction,
|
|
1577
|
-
resolver: _void_
|
|
1578
|
-
});
|
|
1579
|
-
return builder;
|
|
1580
|
-
}
|
|
1581
|
-
};
|
|
1582
|
-
}
|
|
1583
|
-
}),
|
|
1584
|
-
build: () => {
|
|
1585
|
-
for (const proj of pendingProjections) {
|
|
1586
|
-
mergeProjection(proj, registry.events);
|
|
1587
|
-
}
|
|
1588
|
-
return new Act(registry, states);
|
|
1589
|
-
},
|
|
1590
|
-
events: registry.events
|
|
1591
|
-
};
|
|
1592
|
-
return builder;
|
|
1593
|
-
}
|
|
1594
|
-
|
|
1595
1578
|
// src/state-builder.ts
|
|
1596
1579
|
function state(entry) {
|
|
1597
1580
|
const keys = Object.keys(entry);
|
|
@@ -1679,8 +1662,6 @@ export {
|
|
|
1679
1662
|
dispose,
|
|
1680
1663
|
disposeAndExit,
|
|
1681
1664
|
extend,
|
|
1682
|
-
isProjection,
|
|
1683
|
-
isSlice,
|
|
1684
1665
|
logger,
|
|
1685
1666
|
patch,
|
|
1686
1667
|
port,
|