@plures/praxis 0.2.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/FRAMEWORK.md +420 -0
- package/LICENSE +21 -0
- package/README.md +1310 -0
- package/dist/adapters/cli.d.ts +43 -0
- package/dist/adapters/cli.d.ts.map +1 -0
- package/dist/adapters/cli.js +126 -0
- package/dist/adapters/cli.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +26 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +233 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/cloud.d.ts +27 -0
- package/dist/cli/commands/cloud.d.ts.map +1 -0
- package/dist/cli/commands/cloud.js +232 -0
- package/dist/cli/commands/cloud.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +25 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +168 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +179 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cloud/auth.d.ts +51 -0
- package/dist/cloud/auth.d.ts.map +1 -0
- package/dist/cloud/auth.js +194 -0
- package/dist/cloud/auth.js.map +1 -0
- package/dist/cloud/billing.d.ts +184 -0
- package/dist/cloud/billing.d.ts.map +1 -0
- package/dist/cloud/billing.js +179 -0
- package/dist/cloud/billing.js.map +1 -0
- package/dist/cloud/client.d.ts +39 -0
- package/dist/cloud/client.d.ts.map +1 -0
- package/dist/cloud/client.js +176 -0
- package/dist/cloud/client.js.map +1 -0
- package/dist/cloud/index.d.ts +44 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +44 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/marketplace.d.ts +166 -0
- package/dist/cloud/marketplace.d.ts.map +1 -0
- package/dist/cloud/marketplace.js +159 -0
- package/dist/cloud/marketplace.js.map +1 -0
- package/dist/cloud/provisioning.d.ts +110 -0
- package/dist/cloud/provisioning.d.ts.map +1 -0
- package/dist/cloud/provisioning.js +148 -0
- package/dist/cloud/provisioning.js.map +1 -0
- package/dist/cloud/relay/endpoints.d.ts +62 -0
- package/dist/cloud/relay/endpoints.d.ts.map +1 -0
- package/dist/cloud/relay/endpoints.js +217 -0
- package/dist/cloud/relay/endpoints.js.map +1 -0
- package/dist/cloud/relay/health/index.d.ts +5 -0
- package/dist/cloud/relay/health/index.d.ts.map +1 -0
- package/dist/cloud/relay/health/index.js +9 -0
- package/dist/cloud/relay/health/index.js.map +1 -0
- package/dist/cloud/relay/stats/index.d.ts +5 -0
- package/dist/cloud/relay/stats/index.d.ts.map +1 -0
- package/dist/cloud/relay/stats/index.js +9 -0
- package/dist/cloud/relay/stats/index.js.map +1 -0
- package/dist/cloud/relay/sync/index.d.ts +5 -0
- package/dist/cloud/relay/sync/index.d.ts.map +1 -0
- package/dist/cloud/relay/sync/index.js +9 -0
- package/dist/cloud/relay/sync/index.js.map +1 -0
- package/dist/cloud/relay/usage/index.d.ts +5 -0
- package/dist/cloud/relay/usage/index.d.ts.map +1 -0
- package/dist/cloud/relay/usage/index.js +9 -0
- package/dist/cloud/relay/usage/index.js.map +1 -0
- package/dist/cloud/sponsors.d.ts +81 -0
- package/dist/cloud/sponsors.d.ts.map +1 -0
- package/dist/cloud/sponsors.js +130 -0
- package/dist/cloud/sponsors.js.map +1 -0
- package/dist/cloud/types.d.ts +169 -0
- package/dist/cloud/types.d.ts.map +1 -0
- package/dist/cloud/types.js +7 -0
- package/dist/cloud/types.js.map +1 -0
- package/dist/components/index.d.ts +43 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +17 -0
- package/dist/components/index.js.map +1 -0
- package/dist/core/actors.d.ts +95 -0
- package/dist/core/actors.d.ts.map +1 -0
- package/dist/core/actors.js +158 -0
- package/dist/core/actors.js.map +1 -0
- package/dist/core/component/generator.d.ts +122 -0
- package/dist/core/component/generator.d.ts.map +1 -0
- package/dist/core/component/generator.js +307 -0
- package/dist/core/component/generator.js.map +1 -0
- package/dist/core/engine.d.ts +92 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +199 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/introspection.d.ts +141 -0
- package/dist/core/introspection.d.ts.map +1 -0
- package/dist/core/introspection.js +208 -0
- package/dist/core/introspection.js.map +1 -0
- package/dist/core/logic/generator.d.ts +76 -0
- package/dist/core/logic/generator.d.ts.map +1 -0
- package/dist/core/logic/generator.js +339 -0
- package/dist/core/logic/generator.js.map +1 -0
- package/dist/core/pluresdb/generator.d.ts +58 -0
- package/dist/core/pluresdb/generator.d.ts.map +1 -0
- package/dist/core/pluresdb/generator.js +162 -0
- package/dist/core/pluresdb/generator.js.map +1 -0
- package/dist/core/protocol.d.ts +121 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +46 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/rules.d.ts +120 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +81 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/schema/loader.d.ts +47 -0
- package/dist/core/schema/loader.d.ts.map +1 -0
- package/dist/core/schema/loader.js +189 -0
- package/dist/core/schema/loader.js.map +1 -0
- package/dist/core/schema/normalize.d.ts +72 -0
- package/dist/core/schema/normalize.d.ts.map +1 -0
- package/dist/core/schema/normalize.js +190 -0
- package/dist/core/schema/normalize.js.map +1 -0
- package/dist/core/schema/types.d.ts +370 -0
- package/dist/core/schema/types.d.ts.map +1 -0
- package/dist/core/schema/types.js +161 -0
- package/dist/core/schema/types.js.map +1 -0
- package/dist/dsl/index.d.ts +152 -0
- package/dist/dsl/index.d.ts.map +1 -0
- package/dist/dsl/index.js +132 -0
- package/dist/dsl/index.js.map +1 -0
- package/dist/dsl.d.ts +124 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +130 -0
- package/dist/dsl.js.map +1 -0
- package/dist/examples/advanced-todo/index.d.ts +55 -0
- package/dist/examples/advanced-todo/index.d.ts.map +1 -0
- package/dist/examples/advanced-todo/index.js +222 -0
- package/dist/examples/advanced-todo/index.js.map +1 -0
- package/dist/examples/auth-basic/index.d.ts +17 -0
- package/dist/examples/auth-basic/index.d.ts.map +1 -0
- package/dist/examples/auth-basic/index.js +122 -0
- package/dist/examples/auth-basic/index.js.map +1 -0
- package/dist/examples/cart/index.d.ts +19 -0
- package/dist/examples/cart/index.d.ts.map +1 -0
- package/dist/examples/cart/index.js +202 -0
- package/dist/examples/cart/index.js.map +1 -0
- package/dist/examples/hero-ecommerce/index.d.ts +39 -0
- package/dist/examples/hero-ecommerce/index.d.ts.map +1 -0
- package/dist/examples/hero-ecommerce/index.js +506 -0
- package/dist/examples/hero-ecommerce/index.js.map +1 -0
- package/dist/examples/svelte-counter/index.d.ts +31 -0
- package/dist/examples/svelte-counter/index.d.ts.map +1 -0
- package/dist/examples/svelte-counter/index.js +123 -0
- package/dist/examples/svelte-counter/index.js.map +1 -0
- package/dist/flows.d.ts +125 -0
- package/dist/flows.d.ts.map +1 -0
- package/dist/flows.js +160 -0
- package/dist/flows.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/pluresdb.d.ts +56 -0
- package/dist/integrations/pluresdb.d.ts.map +1 -0
- package/dist/integrations/pluresdb.js +46 -0
- package/dist/integrations/pluresdb.js.map +1 -0
- package/dist/integrations/svelte.d.ts +306 -0
- package/dist/integrations/svelte.d.ts.map +1 -0
- package/dist/integrations/svelte.js +447 -0
- package/dist/integrations/svelte.js.map +1 -0
- package/dist/registry.d.ts +94 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +181 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtime/terminal-adapter.d.ts +105 -0
- package/dist/runtime/terminal-adapter.d.ts.map +1 -0
- package/dist/runtime/terminal-adapter.js +113 -0
- package/dist/runtime/terminal-adapter.js.map +1 -0
- package/dist/step.d.ts +34 -0
- package/dist/step.d.ts.map +1 -0
- package/dist/step.js +111 -0
- package/dist/step.js.map +1 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/docs/MONETIZATION.md +394 -0
- package/docs/TERMINAL_NODE.md +588 -0
- package/docs/guides/canvas.md +389 -0
- package/docs/guides/getting-started.md +347 -0
- package/docs/guides/history-state-pattern.md +618 -0
- package/docs/guides/orchestration.md +617 -0
- package/docs/guides/parallel-state-pattern.md +767 -0
- package/docs/guides/svelte-integration.md +691 -0
- package/package.json +96 -0
- package/src/__tests__/actors.test.ts +270 -0
- package/src/__tests__/billing.test.ts +175 -0
- package/src/__tests__/cloud.test.ts +247 -0
- package/src/__tests__/dsl.test.ts +154 -0
- package/src/__tests__/edge-cases.test.ts +475 -0
- package/src/__tests__/engine.test.ts +137 -0
- package/src/__tests__/generators.test.ts +270 -0
- package/src/__tests__/introspection.test.ts +321 -0
- package/src/__tests__/protocol.test.ts +40 -0
- package/src/__tests__/provisioning.test.ts +162 -0
- package/src/__tests__/schema.test.ts +241 -0
- package/src/__tests__/svelte-integration.test.ts +431 -0
- package/src/__tests__/terminal-node.test.ts +352 -0
- package/src/adapters/cli.ts +175 -0
- package/src/cli/commands/auth.ts +271 -0
- package/src/cli/commands/cloud.ts +281 -0
- package/src/cli/commands/generate.ts +225 -0
- package/src/cli/index.ts +190 -0
- package/src/cloud/README.md +383 -0
- package/src/cloud/auth.ts +245 -0
- package/src/cloud/billing.ts +336 -0
- package/src/cloud/client.ts +221 -0
- package/src/cloud/index.ts +121 -0
- package/src/cloud/marketplace.ts +303 -0
- package/src/cloud/provisioning.ts +254 -0
- package/src/cloud/relay/endpoints.ts +307 -0
- package/src/cloud/relay/health/function.json +17 -0
- package/src/cloud/relay/health/index.ts +10 -0
- package/src/cloud/relay/host.json +15 -0
- package/src/cloud/relay/local.settings.json +8 -0
- package/src/cloud/relay/stats/function.json +17 -0
- package/src/cloud/relay/stats/index.ts +10 -0
- package/src/cloud/relay/sync/function.json +17 -0
- package/src/cloud/relay/sync/index.ts +10 -0
- package/src/cloud/relay/usage/function.json +17 -0
- package/src/cloud/relay/usage/index.ts +10 -0
- package/src/cloud/sponsors.ts +213 -0
- package/src/cloud/types.ts +198 -0
- package/src/components/README.md +125 -0
- package/src/components/TerminalNode.svelte +457 -0
- package/src/components/index.ts +46 -0
- package/src/core/actors.ts +205 -0
- package/src/core/component/generator.ts +432 -0
- package/src/core/engine.ts +243 -0
- package/src/core/introspection.ts +329 -0
- package/src/core/logic/generator.ts +420 -0
- package/src/core/pluresdb/generator.ts +229 -0
- package/src/core/protocol.ts +132 -0
- package/src/core/rules.ts +167 -0
- package/src/core/schema/loader.ts +247 -0
- package/src/core/schema/normalize.ts +322 -0
- package/src/core/schema/types.ts +557 -0
- package/src/dsl/index.ts +218 -0
- package/src/dsl.ts +214 -0
- package/src/examples/advanced-todo/App.svelte +506 -0
- package/src/examples/advanced-todo/README.md +371 -0
- package/src/examples/advanced-todo/index.ts +309 -0
- package/src/examples/auth-basic/index.ts +163 -0
- package/src/examples/cart/index.ts +259 -0
- package/src/examples/hero-ecommerce/index.ts +657 -0
- package/src/examples/svelte-counter/index.ts +168 -0
- package/src/flows.ts +268 -0
- package/src/index.ts +154 -0
- package/src/integrations/pluresdb.ts +93 -0
- package/src/integrations/svelte.ts +617 -0
- package/src/registry.ts +223 -0
- package/src/runtime/terminal-adapter.ts +175 -0
- package/src/step.ts +151 -0
- package/src/types.ts +70 -0
- package/templates/basic-app/README.md +147 -0
- package/templates/fullstack-app/README.md +279 -0
package/dist/registry.js
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry for managing rules and constraints in Praxis.
|
|
3
|
+
* Provides registration, retrieval, and execution capabilities.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Registry for managing rules and constraints.
|
|
7
|
+
*/
|
|
8
|
+
export class Registry {
|
|
9
|
+
rules = new Map();
|
|
10
|
+
constraints = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Register a new rule.
|
|
13
|
+
* @throws Error if a rule with the same ID already exists
|
|
14
|
+
*/
|
|
15
|
+
registerRule(rule) {
|
|
16
|
+
if (this.rules.has(rule.id)) {
|
|
17
|
+
throw new Error(`Rule with id '${rule.id}' already exists`);
|
|
18
|
+
}
|
|
19
|
+
this.rules.set(rule.id, rule);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Register multiple rules at once.
|
|
23
|
+
*/
|
|
24
|
+
registerRules(rules) {
|
|
25
|
+
for (const rule of rules) {
|
|
26
|
+
this.registerRule(rule);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Unregister a rule by ID.
|
|
31
|
+
*/
|
|
32
|
+
unregisterRule(id) {
|
|
33
|
+
return this.rules.delete(id);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get a rule by ID.
|
|
37
|
+
*/
|
|
38
|
+
getRule(id) {
|
|
39
|
+
return this.rules.get(id);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get all registered rules.
|
|
43
|
+
*/
|
|
44
|
+
getAllRules() {
|
|
45
|
+
return Array.from(this.rules.values());
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get rules that match a specific event type.
|
|
49
|
+
*/
|
|
50
|
+
getRulesForEvent(eventType) {
|
|
51
|
+
return Array.from(this.rules.values()).filter((rule) => !rule.eventType || rule.eventType === eventType);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register a new constraint.
|
|
55
|
+
* @throws Error if a constraint with the same ID already exists
|
|
56
|
+
*/
|
|
57
|
+
registerConstraint(constraint) {
|
|
58
|
+
if (this.constraints.has(constraint.id)) {
|
|
59
|
+
throw new Error(`Constraint with id '${constraint.id}' already exists`);
|
|
60
|
+
}
|
|
61
|
+
this.constraints.set(constraint.id, constraint);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Register multiple constraints at once.
|
|
65
|
+
*/
|
|
66
|
+
registerConstraints(constraints) {
|
|
67
|
+
for (const constraint of constraints) {
|
|
68
|
+
this.registerConstraint(constraint);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Unregister a constraint by ID.
|
|
73
|
+
*/
|
|
74
|
+
unregisterConstraint(id) {
|
|
75
|
+
return this.constraints.delete(id);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get a constraint by ID.
|
|
79
|
+
*/
|
|
80
|
+
getConstraint(id) {
|
|
81
|
+
return this.constraints.get(id);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get all registered constraints.
|
|
85
|
+
*/
|
|
86
|
+
getAllConstraints() {
|
|
87
|
+
return Array.from(this.constraints.values());
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Evaluate all rules for a given state and event.
|
|
91
|
+
* Returns all effects produced by rules that fire.
|
|
92
|
+
*/
|
|
93
|
+
evaluateRules(state, event) {
|
|
94
|
+
const effects = [];
|
|
95
|
+
// Get rules that match the event type
|
|
96
|
+
const applicableRules = this.getRulesForEvent(event.type);
|
|
97
|
+
// Sort by priority (higher priority first)
|
|
98
|
+
const sortedRules = applicableRules.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
|
99
|
+
// Evaluate each rule
|
|
100
|
+
for (const rule of sortedRules) {
|
|
101
|
+
try {
|
|
102
|
+
if (rule.when(state, event)) {
|
|
103
|
+
const ruleEffects = rule.then(state, event);
|
|
104
|
+
effects.push(...ruleEffects);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error(`Error evaluating rule '${rule.id}':`, error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return effects;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check all constraints for a given state.
|
|
115
|
+
* Returns an array of violations (empty if all constraints pass).
|
|
116
|
+
*/
|
|
117
|
+
checkConstraints(state) {
|
|
118
|
+
const violations = [];
|
|
119
|
+
for (const constraint of this.constraints.values()) {
|
|
120
|
+
try {
|
|
121
|
+
if (!constraint.check(state)) {
|
|
122
|
+
violations.push({
|
|
123
|
+
constraintId: constraint.id,
|
|
124
|
+
message: constraint.errorMessage ||
|
|
125
|
+
`Constraint '${constraint.id}' violated`,
|
|
126
|
+
state,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
violations.push({
|
|
132
|
+
constraintId: constraint.id,
|
|
133
|
+
message: `Error checking constraint '${constraint.id}': ${error}`,
|
|
134
|
+
state,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return violations;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Clear all rules from the registry.
|
|
142
|
+
*/
|
|
143
|
+
clearRules() {
|
|
144
|
+
this.rules.clear();
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Clear all constraints from the registry.
|
|
148
|
+
*/
|
|
149
|
+
clearConstraints() {
|
|
150
|
+
this.constraints.clear();
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Clear all rules and constraints from the registry.
|
|
154
|
+
*/
|
|
155
|
+
clear() {
|
|
156
|
+
this.clearRules();
|
|
157
|
+
this.clearConstraints();
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get statistics about the registry.
|
|
161
|
+
*/
|
|
162
|
+
getStats() {
|
|
163
|
+
const rulesByEventType = {};
|
|
164
|
+
for (const rule of this.rules.values()) {
|
|
165
|
+
const eventType = rule.eventType || '*';
|
|
166
|
+
rulesByEventType[eventType] = (rulesByEventType[eventType] || 0) + 1;
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
ruleCount: this.rules.size,
|
|
170
|
+
constraintCount: this.constraints.size,
|
|
171
|
+
rulesByEventType,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Create a new registry instance.
|
|
177
|
+
*/
|
|
178
|
+
export function createRegistry() {
|
|
179
|
+
return new Registry();
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Node Runtime Adapter
|
|
3
|
+
*
|
|
4
|
+
* Handles terminal command execution and state management.
|
|
5
|
+
* Integrates with pluresDB for state synchronization.
|
|
6
|
+
*/
|
|
7
|
+
import type { TerminalNodeProps } from '../core/schema/types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Terminal command execution result
|
|
10
|
+
*/
|
|
11
|
+
export interface TerminalExecutionResult {
|
|
12
|
+
/** Command that was executed */
|
|
13
|
+
command: string;
|
|
14
|
+
/** Output from the command */
|
|
15
|
+
output: string;
|
|
16
|
+
/** Exit code (0 for success) */
|
|
17
|
+
exitCode: number;
|
|
18
|
+
/** Execution timestamp */
|
|
19
|
+
timestamp: number;
|
|
20
|
+
/** Error message if execution failed */
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Terminal node state
|
|
25
|
+
*/
|
|
26
|
+
export interface TerminalNodeState extends TerminalNodeProps {
|
|
27
|
+
/** Node identifier */
|
|
28
|
+
nodeId: string;
|
|
29
|
+
/** Current working directory */
|
|
30
|
+
cwd?: string;
|
|
31
|
+
/** Environment variables */
|
|
32
|
+
env?: Record<string, string>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Terminal adapter options
|
|
36
|
+
*/
|
|
37
|
+
export interface TerminalAdapterOptions {
|
|
38
|
+
/** Node identifier */
|
|
39
|
+
nodeId: string;
|
|
40
|
+
/** Initial props */
|
|
41
|
+
props?: Partial<TerminalNodeProps>;
|
|
42
|
+
/** PluresDB path for input binding */
|
|
43
|
+
inputPath?: string;
|
|
44
|
+
/** PluresDB path for output binding */
|
|
45
|
+
outputPath?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Terminal Runtime Adapter
|
|
49
|
+
*
|
|
50
|
+
* Manages terminal node execution and state.
|
|
51
|
+
*
|
|
52
|
+
* Note: PluresDB input/output path bindings will be implemented
|
|
53
|
+
* when pluresDB integration is complete.
|
|
54
|
+
*/
|
|
55
|
+
export declare class TerminalAdapter {
|
|
56
|
+
private state;
|
|
57
|
+
private outputPath?;
|
|
58
|
+
constructor(options: TerminalAdapterOptions);
|
|
59
|
+
/**
|
|
60
|
+
* Execute a terminal command
|
|
61
|
+
*
|
|
62
|
+
* @param command - Command to execute
|
|
63
|
+
* @returns Execution result
|
|
64
|
+
*/
|
|
65
|
+
executeCommand(command: string): Promise<TerminalExecutionResult>;
|
|
66
|
+
/**
|
|
67
|
+
* Get current terminal state
|
|
68
|
+
*/
|
|
69
|
+
getState(): Readonly<TerminalNodeState>;
|
|
70
|
+
/**
|
|
71
|
+
* Update terminal props
|
|
72
|
+
*/
|
|
73
|
+
updateProps(props: Partial<TerminalNodeProps>): void;
|
|
74
|
+
/**
|
|
75
|
+
* Clear command history
|
|
76
|
+
*/
|
|
77
|
+
clearHistory(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get command history
|
|
80
|
+
*/
|
|
81
|
+
getHistory(): ReadonlyArray<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Sync state to pluresDB (placeholder)
|
|
84
|
+
*
|
|
85
|
+
* @param _path - PluresDB path (unused until integration is complete)
|
|
86
|
+
* @param _data - Data to sync (unused until integration is complete)
|
|
87
|
+
*/
|
|
88
|
+
private syncToPluresDB;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a terminal adapter instance
|
|
92
|
+
*
|
|
93
|
+
* @param options - Terminal adapter options
|
|
94
|
+
* @returns Terminal adapter instance
|
|
95
|
+
*/
|
|
96
|
+
export declare function createTerminalAdapter(options: TerminalAdapterOptions): TerminalAdapter;
|
|
97
|
+
/**
|
|
98
|
+
* Run a terminal command (convenience function)
|
|
99
|
+
*
|
|
100
|
+
* @param nodeId - Terminal node identifier
|
|
101
|
+
* @param command - Command to execute
|
|
102
|
+
* @returns Execution result
|
|
103
|
+
*/
|
|
104
|
+
export declare function runTerminalCommand(nodeId: string, command: string): Promise<TerminalExecutionResult>;
|
|
105
|
+
//# sourceMappingURL=terminal-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-adapter.d.ts","sourceRoot":"","sources":["../../src/runtime/terminal-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnC,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,OAAO,EAAE,sBAAsB;IAY3C;;;;;OAKG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAwBvE;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC;IAIvC;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAOpD;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;OAEG;IACH,UAAU,IAAI,aAAa,CAAC,MAAM,CAAC;IAInC;;;;;OAKG;YACW,cAAc;CAK7B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAEjB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC,CAGlC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal Node Runtime Adapter
|
|
3
|
+
*
|
|
4
|
+
* Handles terminal command execution and state management.
|
|
5
|
+
* Integrates with pluresDB for state synchronization.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Terminal Runtime Adapter
|
|
9
|
+
*
|
|
10
|
+
* Manages terminal node execution and state.
|
|
11
|
+
*
|
|
12
|
+
* Note: PluresDB input/output path bindings will be implemented
|
|
13
|
+
* when pluresDB integration is complete.
|
|
14
|
+
*/
|
|
15
|
+
export class TerminalAdapter {
|
|
16
|
+
state;
|
|
17
|
+
outputPath;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.state = {
|
|
20
|
+
nodeId: options.nodeId,
|
|
21
|
+
inputMode: options.props?.inputMode || 'text',
|
|
22
|
+
history: options.props?.history || [],
|
|
23
|
+
lastOutput: options.props?.lastOutput || null,
|
|
24
|
+
};
|
|
25
|
+
// TODO: Store inputPath when pluresDB integration is complete
|
|
26
|
+
// const inputPath = options.inputPath;
|
|
27
|
+
this.outputPath = options.outputPath;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Execute a terminal command
|
|
31
|
+
*
|
|
32
|
+
* @param command - Command to execute
|
|
33
|
+
* @returns Execution result
|
|
34
|
+
*/
|
|
35
|
+
async executeCommand(command) {
|
|
36
|
+
// Add to history
|
|
37
|
+
this.state.history.push(command);
|
|
38
|
+
// TODO: Integrate with RuneBook execution model
|
|
39
|
+
// For now, return a stubbed response
|
|
40
|
+
const result = {
|
|
41
|
+
command,
|
|
42
|
+
output: `[Stub] Command received: ${command}\nIntegration with RuneBook pending.`,
|
|
43
|
+
exitCode: 0,
|
|
44
|
+
timestamp: Date.now(),
|
|
45
|
+
};
|
|
46
|
+
// Update last output
|
|
47
|
+
this.state.lastOutput = result.output;
|
|
48
|
+
// TODO: Sync to pluresDB output path when integration is available
|
|
49
|
+
if (this.outputPath) {
|
|
50
|
+
await this.syncToPluresDB(this.outputPath, result);
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get current terminal state
|
|
56
|
+
*/
|
|
57
|
+
getState() {
|
|
58
|
+
return { ...this.state };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Update terminal props
|
|
62
|
+
*/
|
|
63
|
+
updateProps(props) {
|
|
64
|
+
this.state = {
|
|
65
|
+
...this.state,
|
|
66
|
+
...props,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Clear command history
|
|
71
|
+
*/
|
|
72
|
+
clearHistory() {
|
|
73
|
+
this.state.history = [];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get command history
|
|
77
|
+
*/
|
|
78
|
+
getHistory() {
|
|
79
|
+
return [...this.state.history];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Sync state to pluresDB (placeholder)
|
|
83
|
+
*
|
|
84
|
+
* @param _path - PluresDB path (unused until integration is complete)
|
|
85
|
+
* @param _data - Data to sync (unused until integration is complete)
|
|
86
|
+
*/
|
|
87
|
+
async syncToPluresDB(_path, _data) {
|
|
88
|
+
// TODO: Implement pluresDB sync when integration is available
|
|
89
|
+
// When implemented, this will sync terminal output to the specified pluresDB path
|
|
90
|
+
// for reactive state management across the application
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create a terminal adapter instance
|
|
95
|
+
*
|
|
96
|
+
* @param options - Terminal adapter options
|
|
97
|
+
* @returns Terminal adapter instance
|
|
98
|
+
*/
|
|
99
|
+
export function createTerminalAdapter(options) {
|
|
100
|
+
return new TerminalAdapter(options);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Run a terminal command (convenience function)
|
|
104
|
+
*
|
|
105
|
+
* @param nodeId - Terminal node identifier
|
|
106
|
+
* @param command - Command to execute
|
|
107
|
+
* @returns Execution result
|
|
108
|
+
*/
|
|
109
|
+
export async function runTerminalCommand(nodeId, command) {
|
|
110
|
+
const adapter = createTerminalAdapter({ nodeId });
|
|
111
|
+
return adapter.executeCommand(command);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=terminal-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-adapter.js","sourceRoot":"","sources":["../../src/runtime/terminal-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8CH;;;;;;;GAOG;AACH,MAAM,OAAO,eAAe;IAClB,KAAK,CAAoB;IACzB,UAAU,CAAU;IAE5B,YAAY,OAA+B;QACzC,IAAI,CAAC,KAAK,GAAG;YACX,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,IAAI,MAAM;YAC7C,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE;YACrC,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI;SAC9C,CAAC;QACF,8DAA8D;QAC9D,uCAAuC;QACvC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,iBAAiB;QACjB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,gDAAgD;QAChD,qCAAqC;QACrC,MAAM,MAAM,GAA4B;YACtC,OAAO;YACP,MAAM,EAAE,4BAA4B,OAAO,sCAAsC;YACjF,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QAEF,qBAAqB;QACrB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;QAEtC,mEAAmE;QACnE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAiC;QAC3C,IAAI,CAAC,KAAK,GAAG;YACX,GAAG,IAAI,CAAC,KAAK;YACb,GAAG,KAAK;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,KAAc;QACxD,8DAA8D;QAC9D,kFAAkF;QAClF,uDAAuD;IACzD,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAA+B;IAE/B,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,OAAe;IAEf,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAClD,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/step.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core step function implementation for Praxis.
|
|
3
|
+
* Pure function that transitions from one state to another given an event.
|
|
4
|
+
*/
|
|
5
|
+
import type { PraxisState, PraxisEvent, StepFunction } from './types.js';
|
|
6
|
+
import type { Registry } from './registry.js';
|
|
7
|
+
/**
|
|
8
|
+
* Options for creating a step function.
|
|
9
|
+
*/
|
|
10
|
+
export interface StepOptions<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> {
|
|
11
|
+
/** Registry containing rules and constraints */
|
|
12
|
+
registry?: Registry<S, E>;
|
|
13
|
+
/** Whether to check constraints before and after state transitions */
|
|
14
|
+
checkConstraints?: boolean;
|
|
15
|
+
/** Custom reducer function for state transitions */
|
|
16
|
+
reducer?: (state: S, event: E) => S;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create a step function that integrates with the registry.
|
|
20
|
+
* This is the main entry point for creating state transition logic.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createStepFunction<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(options?: StepOptions<S, E>): StepFunction<S, E>;
|
|
23
|
+
/**
|
|
24
|
+
* Simple step function that just applies a reducer.
|
|
25
|
+
* Useful for basic state transitions without rules or constraints.
|
|
26
|
+
*/
|
|
27
|
+
export declare function step<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(reducer: (state: S, event: E) => S): StepFunction<S, E>;
|
|
28
|
+
/**
|
|
29
|
+
* Compose multiple step functions into a single step function.
|
|
30
|
+
* Each step function is applied in sequence, with the output of one
|
|
31
|
+
* becoming the input to the next.
|
|
32
|
+
*/
|
|
33
|
+
export declare function compose<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(...steps: StepFunction<S, E>[]): StepFunction<S, E>;
|
|
34
|
+
//# sourceMappingURL=step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW;IAEnC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,OAAO,GAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAM,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAgErD;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAClB,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAYxD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBpD"}
|
package/dist/step.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core step function implementation for Praxis.
|
|
3
|
+
* Pure function that transitions from one state to another given an event.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Create a step function that integrates with the registry.
|
|
7
|
+
* This is the main entry point for creating state transition logic.
|
|
8
|
+
*/
|
|
9
|
+
export function createStepFunction(options = {}) {
|
|
10
|
+
const { registry, checkConstraints = true, reducer } = options;
|
|
11
|
+
return (state, event) => {
|
|
12
|
+
const errors = [];
|
|
13
|
+
// Check constraints before transition
|
|
14
|
+
if (checkConstraints && registry) {
|
|
15
|
+
const violations = registry.checkConstraints(state);
|
|
16
|
+
if (violations.length > 0) {
|
|
17
|
+
errors.push(...violations.map((v) => `Pre-condition: ${v.message}`));
|
|
18
|
+
// Return current state with errors
|
|
19
|
+
return { state, errors };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Apply the reducer to get the new state
|
|
23
|
+
let newState;
|
|
24
|
+
if (reducer) {
|
|
25
|
+
try {
|
|
26
|
+
newState = reducer(state, event);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
errors.push(`Reducer error: ${error}`);
|
|
30
|
+
return { state, errors };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Default behavior: merge event data into facts
|
|
35
|
+
newState = {
|
|
36
|
+
...state,
|
|
37
|
+
facts: {
|
|
38
|
+
...state.facts,
|
|
39
|
+
...(event.data || {}),
|
|
40
|
+
},
|
|
41
|
+
metadata: {
|
|
42
|
+
...state.metadata,
|
|
43
|
+
lastUpdated: event.timestamp,
|
|
44
|
+
version: (state.metadata?.version || 0) + 1,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Evaluate rules to get effects
|
|
49
|
+
const effects = registry ? registry.evaluateRules(newState, event) : [];
|
|
50
|
+
// Check constraints after transition
|
|
51
|
+
if (checkConstraints && registry) {
|
|
52
|
+
const violations = registry.checkConstraints(newState);
|
|
53
|
+
if (violations.length > 0) {
|
|
54
|
+
errors.push(...violations.map((v) => `Post-condition: ${v.message}`));
|
|
55
|
+
// Return previous state with errors to maintain invariants
|
|
56
|
+
return { state, errors };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
state: newState,
|
|
61
|
+
effects,
|
|
62
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Simple step function that just applies a reducer.
|
|
68
|
+
* Useful for basic state transitions without rules or constraints.
|
|
69
|
+
*/
|
|
70
|
+
export function step(reducer) {
|
|
71
|
+
return (state, event) => {
|
|
72
|
+
try {
|
|
73
|
+
const newState = reducer(state, event);
|
|
74
|
+
return { state: newState };
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return {
|
|
78
|
+
state,
|
|
79
|
+
errors: [`Step error: ${error}`],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Compose multiple step functions into a single step function.
|
|
86
|
+
* Each step function is applied in sequence, with the output of one
|
|
87
|
+
* becoming the input to the next.
|
|
88
|
+
*/
|
|
89
|
+
export function compose(...steps) {
|
|
90
|
+
return (state, event) => {
|
|
91
|
+
let currentState = state;
|
|
92
|
+
const allEffects = [];
|
|
93
|
+
const allErrors = [];
|
|
94
|
+
for (const stepFn of steps) {
|
|
95
|
+
const result = stepFn(currentState, event);
|
|
96
|
+
currentState = result.state;
|
|
97
|
+
if (result.effects) {
|
|
98
|
+
allEffects.push(...result.effects);
|
|
99
|
+
}
|
|
100
|
+
if (result.errors) {
|
|
101
|
+
allErrors.push(...result.errors);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
state: currentState,
|
|
106
|
+
effects: allEffects.length > 0 ? allEffects : undefined,
|
|
107
|
+
errors: allErrors.length > 0 ? allErrors : undefined,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=step.js.map
|
package/dist/step.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types for Praxis - A TypeScript library for typed, functional application logic.
|
|
3
|
+
* All types are designed to be JSON-friendly for serialization and interoperability.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base type for all Praxis events.
|
|
7
|
+
* Events represent things that have happened and trigger state transitions.
|
|
8
|
+
*/
|
|
9
|
+
export interface PraxisEvent {
|
|
10
|
+
/** Unique identifier for the event type */
|
|
11
|
+
type: string;
|
|
12
|
+
/** Timestamp when the event occurred */
|
|
13
|
+
timestamp: number;
|
|
14
|
+
/** Additional event data (must be JSON-serializable) */
|
|
15
|
+
data?: Record<string, unknown>;
|
|
16
|
+
/** Optional metadata for tracing and debugging */
|
|
17
|
+
metadata?: {
|
|
18
|
+
correlationId?: string;
|
|
19
|
+
source?: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Base type for all Praxis state.
|
|
25
|
+
* State represents the current facts and context of the application.
|
|
26
|
+
*/
|
|
27
|
+
export interface PraxisState {
|
|
28
|
+
/** Current facts - immutable truths about the system */
|
|
29
|
+
facts: Record<string, unknown>;
|
|
30
|
+
/** Optional metadata for debugging and inspection */
|
|
31
|
+
metadata?: {
|
|
32
|
+
version?: number;
|
|
33
|
+
lastUpdated?: number;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Result of a state transition step.
|
|
39
|
+
* Contains the new state and any side effects to be executed.
|
|
40
|
+
*/
|
|
41
|
+
export interface StepResult<S extends PraxisState = PraxisState> {
|
|
42
|
+
/** The new state after applying the event */
|
|
43
|
+
state: S;
|
|
44
|
+
/** Side effects to be executed (e.g., commands, events to emit) */
|
|
45
|
+
effects?: Effect[];
|
|
46
|
+
/** Optional errors or warnings that occurred during the step */
|
|
47
|
+
errors?: string[];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Represents a side effect to be executed outside the pure step function.
|
|
51
|
+
*/
|
|
52
|
+
export interface Effect {
|
|
53
|
+
/** Type of the effect */
|
|
54
|
+
type: string;
|
|
55
|
+
/** Effect payload (must be JSON-serializable) */
|
|
56
|
+
payload?: Record<string, unknown>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A pure function that transitions from one state to another given an event.
|
|
60
|
+
* This is the core abstraction of Praxis.
|
|
61
|
+
*/
|
|
62
|
+
export type StepFunction<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> = (state: S, event: E) => StepResult<S>;
|
|
63
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,EAAE;QACT,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC7D,6CAA6C;IAC7C,KAAK,EAAE,CAAC,CAAC;IACT,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,CAAC,SAAS,WAAW,GAAG,WAAW,IACjC,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|