@vsirotin/ts-stop 1.11.0 → 1.12.1
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 +11 -0
- package/lib/esm/sfsm/FaMerger.js +24 -0
- package/lib/esm/sfsm/index.js +1 -0
- package/lib/sfsm/FaMerger.d.ts +16 -0
- package/lib/sfsm/FaMerger.d.ts.map +1 -0
- package/lib/sfsm/FaMerger.js +28 -0
- package/lib/sfsm/FaMerger.js.map +1 -0
- package/lib/sfsm/index.d.ts +1 -0
- package/lib/sfsm/index.d.ts.map +1 -1
- package/lib/sfsm/index.js +3 -1
- package/lib/sfsm/index.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -6,3 +6,14 @@ For an introduction to the concept, read the [StOP Tutorial](https://github.com/
|
|
|
6
6
|
|
|
7
7
|
For usage and API documentation, see the Angular 17 demo in [ts/ts-example](https://github.com/vsirotin/StOP/blob/main/ts/ts-example).
|
|
8
8
|
|
|
9
|
+
## License
|
|
10
|
+
|
|
11
|
+
This project is dual-licensed:
|
|
12
|
+
|
|
13
|
+
- **[Apache 2.0](./LICENSE)** - Free for open-source, academic, and small commercial use
|
|
14
|
+
- **[Commercial License](./LICENSE-COMMERCIAL.md)** - For organizations with 10+ employees or projects with $10,000+ annual revenue
|
|
15
|
+
|
|
16
|
+
**Quick Summary:**
|
|
17
|
+
- ✅ Free for individuals and small teams (< 10 employees)
|
|
18
|
+
- ✅ Free for non-commercial and low-revenue projects (< $10K/year)
|
|
19
|
+
- 📧 Commercial licensing available - contact the author
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { reduceFA } from './FaReducer';
|
|
2
|
+
/**
|
|
3
|
+
* Merges multiple FA definitions into one compact multi-FA object.
|
|
4
|
+
*
|
|
5
|
+
* Each input is reduced first (same semantics as reduceFA). If an input is
|
|
6
|
+
* already compact, reduceFA returns it unchanged.
|
|
7
|
+
*
|
|
8
|
+
* On duplicate FA keys, the later input overwrites the previous one and a
|
|
9
|
+
* warning entry is emitted.
|
|
10
|
+
*/
|
|
11
|
+
export function mergeFAs(definitions) {
|
|
12
|
+
const merged = {};
|
|
13
|
+
const warnings = [];
|
|
14
|
+
for (let fileIndex = 0; fileIndex < definitions.length; fileIndex++) {
|
|
15
|
+
const reduced = reduceFA(definitions[fileIndex]);
|
|
16
|
+
for (const [faName, transitions] of Object.entries(reduced)) {
|
|
17
|
+
if (Object.prototype.hasOwnProperty.call(merged, faName)) {
|
|
18
|
+
warnings.push(`Duplicate FA key '${faName}' encountered at input #${fileIndex + 1}. Last definition wins.`);
|
|
19
|
+
}
|
|
20
|
+
merged[faName] = transitions;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { merged, warnings };
|
|
24
|
+
}
|
package/lib/esm/sfsm/index.js
CHANGED
|
@@ -2,5 +2,6 @@ export { ExternalWorldHub } from './ExternalWorldHub';
|
|
|
2
2
|
export { FaResolver } from './FaResolver';
|
|
3
3
|
export { Sfsm } from './Sfsm';
|
|
4
4
|
export { reduceFA } from './FaReducer';
|
|
5
|
+
export { mergeFAs } from './FaMerger';
|
|
5
6
|
export { updateCompactFA, updateFullFA } from './FaUpdater';
|
|
6
7
|
export { loadFAFromFile, loadFAFromURL } from './FaLoader';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FaDefinition } from './types';
|
|
2
|
+
export interface MergeFaResult {
|
|
3
|
+
merged: FaDefinition;
|
|
4
|
+
warnings: string[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Merges multiple FA definitions into one compact multi-FA object.
|
|
8
|
+
*
|
|
9
|
+
* Each input is reduced first (same semantics as reduceFA). If an input is
|
|
10
|
+
* already compact, reduceFA returns it unchanged.
|
|
11
|
+
*
|
|
12
|
+
* On duplicate FA keys, the later input overwrites the previous one and a
|
|
13
|
+
* warning entry is emitted.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeFAs(definitions: FaDefinition[]): MergeFaResult;
|
|
16
|
+
//# sourceMappingURL=FaMerger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FaMerger.d.ts","sourceRoot":"","sources":["../../src/sfsm/FaMerger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,aAAa,CAgBnE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mergeFAs = mergeFAs;
|
|
4
|
+
const FaReducer_1 = require("./FaReducer");
|
|
5
|
+
/**
|
|
6
|
+
* Merges multiple FA definitions into one compact multi-FA object.
|
|
7
|
+
*
|
|
8
|
+
* Each input is reduced first (same semantics as reduceFA). If an input is
|
|
9
|
+
* already compact, reduceFA returns it unchanged.
|
|
10
|
+
*
|
|
11
|
+
* On duplicate FA keys, the later input overwrites the previous one and a
|
|
12
|
+
* warning entry is emitted.
|
|
13
|
+
*/
|
|
14
|
+
function mergeFAs(definitions) {
|
|
15
|
+
const merged = {};
|
|
16
|
+
const warnings = [];
|
|
17
|
+
for (let fileIndex = 0; fileIndex < definitions.length; fileIndex++) {
|
|
18
|
+
const reduced = (0, FaReducer_1.reduceFA)(definitions[fileIndex]);
|
|
19
|
+
for (const [faName, transitions] of Object.entries(reduced)) {
|
|
20
|
+
if (Object.prototype.hasOwnProperty.call(merged, faName)) {
|
|
21
|
+
warnings.push(`Duplicate FA key '${faName}' encountered at input #${fileIndex + 1}. Last definition wins.`);
|
|
22
|
+
}
|
|
23
|
+
merged[faName] = transitions;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { merged, warnings };
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=FaMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FaMerger.js","sourceRoot":"","sources":["../../src/sfsm/FaMerger.ts"],"names":[],"mappings":";;AAiBA,4BAgBC;AAhCD,2CAAuC;AAOvC;;;;;;;;GAQG;AACH,SAAgB,QAAQ,CAAC,WAA2B;IAChD,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAEjD,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC,qBAAqB,MAAM,2BAA2B,SAAS,GAAG,CAAC,yBAAyB,CAAC,CAAC;YAChH,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;QACjC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
|
package/lib/sfsm/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { FaDefinition, FaNode, FaUpdate, Transition, SfsmOptions, LogEntry, Miss
|
|
|
4
4
|
export { FaResolver, ResolvedFa } from './FaResolver';
|
|
5
5
|
export { Sfsm } from './Sfsm';
|
|
6
6
|
export { reduceFA } from './FaReducer';
|
|
7
|
+
export { mergeFAs, MergeFaResult } from './FaMerger';
|
|
7
8
|
export { updateCompactFA, updateFullFA } from './FaUpdater';
|
|
8
9
|
export { loadFAFromFile, loadFAFromURL } from './FaLoader';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/sfsm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sfsm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACxI,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sfsm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACxI,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/lib/sfsm/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadFAFromURL = exports.loadFAFromFile = exports.updateFullFA = exports.updateCompactFA = exports.reduceFA = exports.Sfsm = exports.FaResolver = exports.ExternalWorldHub = void 0;
|
|
3
|
+
exports.loadFAFromURL = exports.loadFAFromFile = exports.updateFullFA = exports.updateCompactFA = exports.mergeFAs = exports.reduceFA = exports.Sfsm = exports.FaResolver = exports.ExternalWorldHub = void 0;
|
|
4
4
|
var ExternalWorldHub_1 = require("./ExternalWorldHub");
|
|
5
5
|
Object.defineProperty(exports, "ExternalWorldHub", { enumerable: true, get: function () { return ExternalWorldHub_1.ExternalWorldHub; } });
|
|
6
6
|
var FaResolver_1 = require("./FaResolver");
|
|
@@ -9,6 +9,8 @@ var Sfsm_1 = require("./Sfsm");
|
|
|
9
9
|
Object.defineProperty(exports, "Sfsm", { enumerable: true, get: function () { return Sfsm_1.Sfsm; } });
|
|
10
10
|
var FaReducer_1 = require("./FaReducer");
|
|
11
11
|
Object.defineProperty(exports, "reduceFA", { enumerable: true, get: function () { return FaReducer_1.reduceFA; } });
|
|
12
|
+
var FaMerger_1 = require("./FaMerger");
|
|
13
|
+
Object.defineProperty(exports, "mergeFAs", { enumerable: true, get: function () { return FaMerger_1.mergeFAs; } });
|
|
12
14
|
var FaUpdater_1 = require("./FaUpdater");
|
|
13
15
|
Object.defineProperty(exports, "updateCompactFA", { enumerable: true, get: function () { return FaUpdater_1.updateCompactFA; } });
|
|
14
16
|
Object.defineProperty(exports, "updateFullFA", { enumerable: true, get: function () { return FaUpdater_1.updateFullFA; } });
|
package/lib/sfsm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sfsm/index.ts"],"names":[],"mappings":";;;AACA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAEzB,2CAAsD;AAA7C,wGAAA,UAAU,OAAA;AACnB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,yCAA4D;AAAnD,4GAAA,eAAe,OAAA;AAAE,yGAAA,YAAY,OAAA;AACtC,uCAA2D;AAAlD,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sfsm/index.ts"],"names":[],"mappings":";;;AACA,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AAEzB,2CAAsD;AAA7C,wGAAA,UAAU,OAAA;AACnB,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AACjB,uCAAqD;AAA5C,oGAAA,QAAQ,OAAA;AACjB,yCAA4D;AAAnD,4GAAA,eAAe,OAAA;AAAE,yGAAA,YAAY,OAAA;AACtC,uCAA2D;AAAlD,0GAAA,cAAc,OAAA;AAAE,yGAAA,aAAa,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vsirotin/ts-stop",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.1",
|
|
4
4
|
"description": "State Oriented Programming library for TypeScript",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"publish:local": "./scripts/publish-local.sh",
|
|
35
35
|
"pack": "npm run build && npm pack",
|
|
36
36
|
"reduce-fa": "node scripts/reduce-fa.js",
|
|
37
|
+
"merge-fas": "node scripts/merge-fas.js",
|
|
37
38
|
"update-full-fa": "node scripts/update-fa.js --format=full",
|
|
38
39
|
"update-compact-fa": "node scripts/update-fa.js --format=compact"
|
|
39
40
|
},
|