@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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Svelte Counter Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates Svelte v5 integration with a simple counter.
|
|
5
|
+
* Shows how to connect Praxis logic to reactive Svelte stores.
|
|
6
|
+
*/
|
|
7
|
+
import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule, findEvent, } from "../../index.js";
|
|
8
|
+
import { createPraxisStore, createDerivedStore } from "../../integrations/svelte.js";
|
|
9
|
+
// Define facts
|
|
10
|
+
const CountIncremented = defineFact("CountIncremented");
|
|
11
|
+
const CountDecremented = defineFact("CountDecremented");
|
|
12
|
+
const CountReset = defineFact("CountReset");
|
|
13
|
+
// Define events
|
|
14
|
+
const Increment = defineEvent("INCREMENT");
|
|
15
|
+
const Decrement = defineEvent("DECREMENT");
|
|
16
|
+
const Reset = defineEvent("RESET");
|
|
17
|
+
// Define rules
|
|
18
|
+
const incrementRule = defineRule({
|
|
19
|
+
id: "counter.increment",
|
|
20
|
+
description: "Increment the counter",
|
|
21
|
+
impl: (state, events) => {
|
|
22
|
+
const incrementEvent = findEvent(events, Increment);
|
|
23
|
+
if (!incrementEvent) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const amount = incrementEvent.payload.amount ?? 1;
|
|
27
|
+
state.context.count += amount;
|
|
28
|
+
state.context.history.push(state.context.count);
|
|
29
|
+
return [CountIncremented.create({ amount })];
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const decrementRule = defineRule({
|
|
33
|
+
id: "counter.decrement",
|
|
34
|
+
description: "Decrement the counter",
|
|
35
|
+
impl: (state, events) => {
|
|
36
|
+
const decrementEvent = findEvent(events, Decrement);
|
|
37
|
+
if (!decrementEvent) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
const amount = decrementEvent.payload.amount ?? 1;
|
|
41
|
+
state.context.count -= amount;
|
|
42
|
+
state.context.history.push(state.context.count);
|
|
43
|
+
return [CountDecremented.create({ amount })];
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
const resetRule = defineRule({
|
|
47
|
+
id: "counter.reset",
|
|
48
|
+
description: "Reset the counter",
|
|
49
|
+
impl: (state, events) => {
|
|
50
|
+
const resetEvent = findEvent(events, Reset);
|
|
51
|
+
if (!resetEvent) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
state.context.count = 0;
|
|
55
|
+
state.context.history = [0];
|
|
56
|
+
return [CountReset.create({})];
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
// Create and configure the engine
|
|
60
|
+
function createCounterEngine() {
|
|
61
|
+
const registry = new PraxisRegistry();
|
|
62
|
+
registry.registerRule(incrementRule);
|
|
63
|
+
registry.registerRule(decrementRule);
|
|
64
|
+
registry.registerRule(resetRule);
|
|
65
|
+
const engine = createPraxisEngine({
|
|
66
|
+
initialContext: {
|
|
67
|
+
count: 0,
|
|
68
|
+
history: [0],
|
|
69
|
+
},
|
|
70
|
+
registry,
|
|
71
|
+
});
|
|
72
|
+
return engine;
|
|
73
|
+
}
|
|
74
|
+
// Create Svelte stores
|
|
75
|
+
function createCounterStores() {
|
|
76
|
+
const engine = createCounterEngine();
|
|
77
|
+
const stateStore = createPraxisStore(engine);
|
|
78
|
+
const countStore = createDerivedStore(engine, (ctx) => ctx.count);
|
|
79
|
+
const historyStore = createDerivedStore(engine, (ctx) => ctx.history);
|
|
80
|
+
return {
|
|
81
|
+
engine,
|
|
82
|
+
stateStore,
|
|
83
|
+
countStore,
|
|
84
|
+
historyStore,
|
|
85
|
+
// Helper methods
|
|
86
|
+
increment: (amount) => {
|
|
87
|
+
engine.step([Increment.create({ amount })]);
|
|
88
|
+
},
|
|
89
|
+
decrement: (amount) => {
|
|
90
|
+
engine.step([Decrement.create({ amount })]);
|
|
91
|
+
},
|
|
92
|
+
reset: () => {
|
|
93
|
+
engine.step([Reset.create({})]);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// Example usage (non-Svelte demonstration)
|
|
98
|
+
function runExample() {
|
|
99
|
+
console.log("=== Svelte Counter Example ===\n");
|
|
100
|
+
const { engine, countStore } = createCounterStores();
|
|
101
|
+
// Subscribe to count changes
|
|
102
|
+
console.log("Subscribing to count changes...\n");
|
|
103
|
+
const unsubscribe = countStore.subscribe((count) => {
|
|
104
|
+
console.log(`Count changed: ${count}`);
|
|
105
|
+
});
|
|
106
|
+
// Dispatch some events
|
|
107
|
+
console.log("\nIncrementing by 1:");
|
|
108
|
+
engine.step([Increment.create({})]);
|
|
109
|
+
console.log("\nIncrementing by 5:");
|
|
110
|
+
engine.step([Increment.create({ amount: 5 })]);
|
|
111
|
+
console.log("\nDecrementing by 2:");
|
|
112
|
+
engine.step([Decrement.create({ amount: 2 })]);
|
|
113
|
+
console.log("\nResetting:");
|
|
114
|
+
engine.step([Reset.create({})]);
|
|
115
|
+
console.log("\nContext:", engine.getContext());
|
|
116
|
+
unsubscribe();
|
|
117
|
+
}
|
|
118
|
+
// Run example if executed directly
|
|
119
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
120
|
+
runExample();
|
|
121
|
+
}
|
|
122
|
+
export { createCounterEngine, createCounterStores, runExample };
|
|
123
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/examples/svelte-counter/index.ts"],"names":[],"mappings":"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"}
|
package/dist/flows.d.ts
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flows and actors for orchestrating state transitions in Praxis.
|
|
3
|
+
* Flows represent sequences of state transitions.
|
|
4
|
+
* Actors are entities that maintain their own state and respond to events.
|
|
5
|
+
*/
|
|
6
|
+
import type { PraxisState, PraxisEvent, StepResult, StepFunction } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* A flow represents a sequence of events that need to occur.
|
|
9
|
+
*/
|
|
10
|
+
export interface Flow<E extends PraxisEvent = PraxisEvent> {
|
|
11
|
+
/** Unique identifier for the flow */
|
|
12
|
+
id: string;
|
|
13
|
+
/** Description of what the flow accomplishes */
|
|
14
|
+
description?: string;
|
|
15
|
+
/** Steps in the flow */
|
|
16
|
+
steps: FlowStep<E>[];
|
|
17
|
+
/** Current step index */
|
|
18
|
+
currentStep: number;
|
|
19
|
+
/** Whether the flow is complete */
|
|
20
|
+
complete: boolean;
|
|
21
|
+
/** Optional metadata */
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A step in a flow.
|
|
26
|
+
*/
|
|
27
|
+
export interface FlowStep<E extends PraxisEvent = PraxisEvent> {
|
|
28
|
+
/** Step identifier */
|
|
29
|
+
id: string;
|
|
30
|
+
/** Expected event type for this step */
|
|
31
|
+
expectedEventType: string;
|
|
32
|
+
/** Optional validation function */
|
|
33
|
+
validate?: (event: E) => boolean;
|
|
34
|
+
/** Optional timeout in milliseconds */
|
|
35
|
+
timeout?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* An actor maintains its own state and responds to events.
|
|
39
|
+
*/
|
|
40
|
+
export interface Actor<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> {
|
|
41
|
+
/** Unique identifier for the actor */
|
|
42
|
+
id: string;
|
|
43
|
+
/** Current state of the actor */
|
|
44
|
+
state: S;
|
|
45
|
+
/** Step function for processing events */
|
|
46
|
+
step: StepFunction<S, E>;
|
|
47
|
+
/** Optional metadata */
|
|
48
|
+
metadata?: {
|
|
49
|
+
type?: string;
|
|
50
|
+
created?: number;
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create a new flow.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createFlow<E extends PraxisEvent = PraxisEvent>(id: string, steps: FlowStep<E>[], description?: string): Flow<E>;
|
|
58
|
+
/**
|
|
59
|
+
* Advance a flow with an event.
|
|
60
|
+
* Returns an updated flow and whether the flow accepted the event.
|
|
61
|
+
*/
|
|
62
|
+
export declare function advanceFlow<E extends PraxisEvent = PraxisEvent>(flow: Flow<E>, event: E): {
|
|
63
|
+
flow: Flow<E>;
|
|
64
|
+
accepted: boolean;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Check if a flow is waiting for a specific event type.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isFlowWaitingFor<E extends PraxisEvent = PraxisEvent>(flow: Flow<E>, eventType: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Create a new actor.
|
|
72
|
+
*/
|
|
73
|
+
export declare function createActor<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(id: string, initialState: S, stepFunction: StepFunction<S, E>, type?: string): Actor<S, E>;
|
|
74
|
+
/**
|
|
75
|
+
* Process an event through an actor.
|
|
76
|
+
* Returns the updated actor and any effects.
|
|
77
|
+
*/
|
|
78
|
+
export declare function processActorEvent<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(actor: Actor<S, E>, event: E): {
|
|
79
|
+
actor: Actor<S, E>;
|
|
80
|
+
result: StepResult<S>;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Actor system for managing multiple actors.
|
|
84
|
+
*/
|
|
85
|
+
export declare class ActorSystem<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> {
|
|
86
|
+
private actors;
|
|
87
|
+
/**
|
|
88
|
+
* Register an actor in the system.
|
|
89
|
+
*/
|
|
90
|
+
register(actor: Actor<S, E>): void;
|
|
91
|
+
/**
|
|
92
|
+
* Unregister an actor from the system.
|
|
93
|
+
*/
|
|
94
|
+
unregister(id: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Get an actor by ID.
|
|
97
|
+
*/
|
|
98
|
+
get(id: string): Actor<S, E> | undefined;
|
|
99
|
+
/**
|
|
100
|
+
* Get all actors.
|
|
101
|
+
*/
|
|
102
|
+
getAll(): Actor<S, E>[];
|
|
103
|
+
/**
|
|
104
|
+
* Send an event to a specific actor.
|
|
105
|
+
*/
|
|
106
|
+
send(actorId: string, event: E): StepResult<S> | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Broadcast an event to all actors.
|
|
109
|
+
* Returns a map of actor IDs to their results.
|
|
110
|
+
*/
|
|
111
|
+
broadcast(event: E): Map<string, StepResult<S>>;
|
|
112
|
+
/**
|
|
113
|
+
* Clear all actors from the system.
|
|
114
|
+
*/
|
|
115
|
+
clear(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Get the number of actors in the system.
|
|
118
|
+
*/
|
|
119
|
+
size(): number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create a new actor system.
|
|
123
|
+
*/
|
|
124
|
+
export declare function createActorSystem<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent>(): ActorSystem<S, E>;
|
|
125
|
+
//# sourceMappingURL=flows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../src/flows.ts"],"names":[],"mappings":"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"}
|
package/dist/flows.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flows and actors for orchestrating state transitions in Praxis.
|
|
3
|
+
* Flows represent sequences of state transitions.
|
|
4
|
+
* Actors are entities that maintain their own state and respond to events.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create a new flow.
|
|
8
|
+
*/
|
|
9
|
+
export function createFlow(id, steps, description) {
|
|
10
|
+
return {
|
|
11
|
+
id,
|
|
12
|
+
description,
|
|
13
|
+
steps,
|
|
14
|
+
currentStep: 0,
|
|
15
|
+
complete: false,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Advance a flow with an event.
|
|
20
|
+
* Returns an updated flow and whether the flow accepted the event.
|
|
21
|
+
*/
|
|
22
|
+
export function advanceFlow(flow, event) {
|
|
23
|
+
if (flow.complete) {
|
|
24
|
+
return { flow, accepted: false };
|
|
25
|
+
}
|
|
26
|
+
const currentStep = flow.steps[flow.currentStep];
|
|
27
|
+
if (!currentStep) {
|
|
28
|
+
return { flow, accepted: false };
|
|
29
|
+
}
|
|
30
|
+
// Check if event matches expected type
|
|
31
|
+
if (currentStep.expectedEventType !== event.type) {
|
|
32
|
+
return { flow, accepted: false };
|
|
33
|
+
}
|
|
34
|
+
// Validate event if validator is provided
|
|
35
|
+
if (currentStep.validate && !currentStep.validate(event)) {
|
|
36
|
+
return { flow, accepted: false };
|
|
37
|
+
}
|
|
38
|
+
// Advance to next step
|
|
39
|
+
const nextStep = flow.currentStep + 1;
|
|
40
|
+
const complete = nextStep >= flow.steps.length;
|
|
41
|
+
const updatedFlow = {
|
|
42
|
+
...flow,
|
|
43
|
+
currentStep: nextStep,
|
|
44
|
+
complete,
|
|
45
|
+
};
|
|
46
|
+
return { flow: updatedFlow, accepted: true };
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a flow is waiting for a specific event type.
|
|
50
|
+
*/
|
|
51
|
+
export function isFlowWaitingFor(flow, eventType) {
|
|
52
|
+
if (flow.complete) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
const currentStep = flow.steps[flow.currentStep];
|
|
56
|
+
return currentStep?.expectedEventType === eventType;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create a new actor.
|
|
60
|
+
*/
|
|
61
|
+
export function createActor(id, initialState, stepFunction, type) {
|
|
62
|
+
return {
|
|
63
|
+
id,
|
|
64
|
+
state: initialState,
|
|
65
|
+
step: stepFunction,
|
|
66
|
+
metadata: {
|
|
67
|
+
type,
|
|
68
|
+
created: Date.now(),
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Process an event through an actor.
|
|
74
|
+
* Returns the updated actor and any effects.
|
|
75
|
+
*/
|
|
76
|
+
export function processActorEvent(actor, event) {
|
|
77
|
+
const result = actor.step(actor.state, event);
|
|
78
|
+
const updatedActor = {
|
|
79
|
+
...actor,
|
|
80
|
+
state: result.state,
|
|
81
|
+
};
|
|
82
|
+
return { actor: updatedActor, result };
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Actor system for managing multiple actors.
|
|
86
|
+
*/
|
|
87
|
+
export class ActorSystem {
|
|
88
|
+
actors = new Map();
|
|
89
|
+
/**
|
|
90
|
+
* Register an actor in the system.
|
|
91
|
+
*/
|
|
92
|
+
register(actor) {
|
|
93
|
+
if (this.actors.has(actor.id)) {
|
|
94
|
+
throw new Error(`Actor with id '${actor.id}' already exists`);
|
|
95
|
+
}
|
|
96
|
+
this.actors.set(actor.id, actor);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Unregister an actor from the system.
|
|
100
|
+
*/
|
|
101
|
+
unregister(id) {
|
|
102
|
+
return this.actors.delete(id);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get an actor by ID.
|
|
106
|
+
*/
|
|
107
|
+
get(id) {
|
|
108
|
+
return this.actors.get(id);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get all actors.
|
|
112
|
+
*/
|
|
113
|
+
getAll() {
|
|
114
|
+
return Array.from(this.actors.values());
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Send an event to a specific actor.
|
|
118
|
+
*/
|
|
119
|
+
send(actorId, event) {
|
|
120
|
+
const actor = this.actors.get(actorId);
|
|
121
|
+
if (!actor) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
const { actor: updatedActor, result } = processActorEvent(actor, event);
|
|
125
|
+
this.actors.set(actorId, updatedActor);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Broadcast an event to all actors.
|
|
130
|
+
* Returns a map of actor IDs to their results.
|
|
131
|
+
*/
|
|
132
|
+
broadcast(event) {
|
|
133
|
+
const results = new Map();
|
|
134
|
+
for (const [id, actor] of this.actors) {
|
|
135
|
+
const { actor: updatedActor, result } = processActorEvent(actor, event);
|
|
136
|
+
this.actors.set(id, updatedActor);
|
|
137
|
+
results.set(id, result);
|
|
138
|
+
}
|
|
139
|
+
return results;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear all actors from the system.
|
|
143
|
+
*/
|
|
144
|
+
clear() {
|
|
145
|
+
this.actors.clear();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get the number of actors in the system.
|
|
149
|
+
*/
|
|
150
|
+
size() {
|
|
151
|
+
return this.actors.size;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Create a new actor system.
|
|
156
|
+
*/
|
|
157
|
+
export function createActorSystem() {
|
|
158
|
+
return new ActorSystem();
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=flows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flows.js","sourceRoot":"","sources":["../src/flows.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis - Practical, Provable Application Logic
|
|
3
|
+
*
|
|
4
|
+
* A typed, functional application logic engine built on strong types.
|
|
5
|
+
*
|
|
6
|
+
* Core concepts:
|
|
7
|
+
* - Facts: typed propositions about the domain
|
|
8
|
+
* - Events: temporally ordered facts meant to drive change
|
|
9
|
+
* - Rules: pure functions that derive new facts from context + events
|
|
10
|
+
* - Constraints: invariants that must always hold
|
|
11
|
+
* - Flows: orchestrated behaviors
|
|
12
|
+
* - Actors: effectful units that perform side effects
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule } from "@plures/praxis";
|
|
17
|
+
*
|
|
18
|
+
* // Define facts and events
|
|
19
|
+
* const UserLoggedIn = defineFact<"UserLoggedIn", { userId: string }>("UserLoggedIn");
|
|
20
|
+
* const Login = defineEvent<"LOGIN", { username: string }>("LOGIN");
|
|
21
|
+
*
|
|
22
|
+
* // Define rules
|
|
23
|
+
* const loginRule = defineRule({
|
|
24
|
+
* id: "auth.login",
|
|
25
|
+
* description: "Process login event",
|
|
26
|
+
* impl: (state, events) => {
|
|
27
|
+
* const loginEvent = events.find(Login.is);
|
|
28
|
+
* if (loginEvent) {
|
|
29
|
+
* return [UserLoggedIn.create({ userId: loginEvent.payload.username })];
|
|
30
|
+
* }
|
|
31
|
+
* return [];
|
|
32
|
+
* }
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Create engine
|
|
36
|
+
* const registry = new PraxisRegistry();
|
|
37
|
+
* registry.registerRule(loginRule);
|
|
38
|
+
*
|
|
39
|
+
* const engine = createPraxisEngine({
|
|
40
|
+
* initialContext: {},
|
|
41
|
+
* registry
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // Dispatch events
|
|
45
|
+
* const result = engine.step([Login.create({ username: "alice" })]);
|
|
46
|
+
* console.log(result.state.facts); // [{ tag: "UserLoggedIn", payload: { userId: "alice" } }]
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export type { PraxisFact, PraxisEvent, PraxisState, PraxisDiagnostics, PraxisStepConfig, PraxisStepResult, PraxisStepFn, } from "./core/protocol.js";
|
|
50
|
+
export { PRAXIS_PROTOCOL_VERSION } from "./core/protocol.js";
|
|
51
|
+
export type { RuleId, ConstraintId, RuleFn, ConstraintFn, RuleDescriptor, ConstraintDescriptor, PraxisModule, } from "./core/rules.js";
|
|
52
|
+
export { PraxisRegistry } from "./core/rules.js";
|
|
53
|
+
export type { PraxisEngineOptions } from "./core/engine.js";
|
|
54
|
+
export { LogicEngine, createPraxisEngine } from "./core/engine.js";
|
|
55
|
+
export type { Actor } from "./core/actors.js";
|
|
56
|
+
export { ActorManager, createTimerActor } from "./core/actors.js";
|
|
57
|
+
export type { RuleNode, ConstraintNode, GraphEdge, RegistryGraph, RuleSchema, ConstraintSchema, RegistrySchema, RegistryStats, } from "./core/introspection.js";
|
|
58
|
+
export { RegistryIntrospector, createIntrospector } from "./core/introspection.js";
|
|
59
|
+
export { defineFact, defineEvent, defineRule, defineConstraint, defineModule, filterEvents, filterFacts, findEvent, findFact, } from "./dsl/index.js";
|
|
60
|
+
export type { FactDefinition, EventDefinition, DefineRuleOptions, DefineConstraintOptions, DefineModuleOptions, } from "./dsl/index.js";
|
|
61
|
+
export type { TerminalExecutionResult, TerminalNodeState, TerminalAdapterOptions, } from "./runtime/terminal-adapter.js";
|
|
62
|
+
export { TerminalAdapter, createTerminalAdapter, runTerminalCommand, } from "./runtime/terminal-adapter.js";
|
|
63
|
+
export type { PraxisSchema, NodeDefinition, NodeBindings, TerminalNodeProps, OrchestrationDefinition, ValidationResult, ValidationError, ModelDefinition, ComponentDefinition, LogicDefinition, } from "./core/schema/types.js";
|
|
64
|
+
export { validateSchema, createSchemaTemplate } from "./core/schema/types.js";
|
|
65
|
+
export type { LoaderOptions, LoaderResult, } from "./core/schema/loader.js";
|
|
66
|
+
export { loadSchema, loadSchemaFromJson, loadSchemaFromYaml, loadSchemaFromFile, validateForGeneration, } from "./core/schema/loader.js";
|
|
67
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAGH,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAG7D,YAAY,EACV,MAAM,EACN,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGnE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGlE,YAAY,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAGvC,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9E,YAAY,EACV,aAAa,EACb,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis - Practical, Provable Application Logic
|
|
3
|
+
*
|
|
4
|
+
* A typed, functional application logic engine built on strong types.
|
|
5
|
+
*
|
|
6
|
+
* Core concepts:
|
|
7
|
+
* - Facts: typed propositions about the domain
|
|
8
|
+
* - Events: temporally ordered facts meant to drive change
|
|
9
|
+
* - Rules: pure functions that derive new facts from context + events
|
|
10
|
+
* - Constraints: invariants that must always hold
|
|
11
|
+
* - Flows: orchestrated behaviors
|
|
12
|
+
* - Actors: effectful units that perform side effects
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createPraxisEngine, PraxisRegistry, defineFact, defineEvent, defineRule } from "@plures/praxis";
|
|
17
|
+
*
|
|
18
|
+
* // Define facts and events
|
|
19
|
+
* const UserLoggedIn = defineFact<"UserLoggedIn", { userId: string }>("UserLoggedIn");
|
|
20
|
+
* const Login = defineEvent<"LOGIN", { username: string }>("LOGIN");
|
|
21
|
+
*
|
|
22
|
+
* // Define rules
|
|
23
|
+
* const loginRule = defineRule({
|
|
24
|
+
* id: "auth.login",
|
|
25
|
+
* description: "Process login event",
|
|
26
|
+
* impl: (state, events) => {
|
|
27
|
+
* const loginEvent = events.find(Login.is);
|
|
28
|
+
* if (loginEvent) {
|
|
29
|
+
* return [UserLoggedIn.create({ userId: loginEvent.payload.username })];
|
|
30
|
+
* }
|
|
31
|
+
* return [];
|
|
32
|
+
* }
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Create engine
|
|
36
|
+
* const registry = new PraxisRegistry();
|
|
37
|
+
* registry.registerRule(loginRule);
|
|
38
|
+
*
|
|
39
|
+
* const engine = createPraxisEngine({
|
|
40
|
+
* initialContext: {},
|
|
41
|
+
* registry
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* // Dispatch events
|
|
45
|
+
* const result = engine.step([Login.create({ username: "alice" })]);
|
|
46
|
+
* console.log(result.state.facts); // [{ tag: "UserLoggedIn", payload: { userId: "alice" } }]
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export { PRAXIS_PROTOCOL_VERSION } from "./core/protocol.js";
|
|
50
|
+
export { PraxisRegistry } from "./core/rules.js";
|
|
51
|
+
export { LogicEngine, createPraxisEngine } from "./core/engine.js";
|
|
52
|
+
export { ActorManager, createTimerActor } from "./core/actors.js";
|
|
53
|
+
export { RegistryIntrospector, createIntrospector } from "./core/introspection.js";
|
|
54
|
+
// DSL helpers
|
|
55
|
+
export { defineFact, defineEvent, defineRule, defineConstraint, defineModule, filterEvents, filterFacts, findEvent, findFact, } from "./dsl/index.js";
|
|
56
|
+
export { TerminalAdapter, createTerminalAdapter, runTerminalCommand, } from "./runtime/terminal-adapter.js";
|
|
57
|
+
export { validateSchema, createSchemaTemplate } from "./core/schema/types.js";
|
|
58
|
+
export { loadSchema, loadSchemaFromJson, loadSchemaFromYaml, loadSchemaFromFile, validateForGeneration, } from "./core/schema/loader.js";
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAYH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAY7D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAInE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAalE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAEnF,cAAc;AACd,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EACT,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAexB,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AAevC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAO9E,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PluresDB Integration (Placeholder)
|
|
3
|
+
*
|
|
4
|
+
* Future integration with pluresdb - reactive graph datastore and event source/sink.
|
|
5
|
+
* This module will provide adapters for:
|
|
6
|
+
* - Storing Praxis state in pluresdb
|
|
7
|
+
* - Sourcing events from pluresdb
|
|
8
|
+
* - Sinking events to pluresdb
|
|
9
|
+
* - Reactive queries and subscriptions
|
|
10
|
+
*/
|
|
11
|
+
import type { LogicEngine } from "../core/engine.js";
|
|
12
|
+
import type { PraxisEvent, PraxisFact } from "../core/protocol.js";
|
|
13
|
+
/**
|
|
14
|
+
* Placeholder for pluresdb adapter
|
|
15
|
+
*
|
|
16
|
+
* Future implementation will provide:
|
|
17
|
+
* - Event sourcing (persist events to pluresdb)
|
|
18
|
+
* - State snapshots (persist state to pluresdb)
|
|
19
|
+
* - Event replay (rebuild state from events)
|
|
20
|
+
* - Reactive queries (subscribe to state changes)
|
|
21
|
+
*/
|
|
22
|
+
export interface PluresDBAdapter<TContext = unknown> {
|
|
23
|
+
/**
|
|
24
|
+
* Persist events to pluresdb
|
|
25
|
+
*/
|
|
26
|
+
persistEvents(events: PraxisEvent[]): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Persist facts to pluresdb
|
|
29
|
+
*/
|
|
30
|
+
persistFacts(facts: PraxisFact[]): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Load events from pluresdb
|
|
33
|
+
*/
|
|
34
|
+
loadEvents(query?: unknown): Promise<PraxisEvent[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Subscribe to new events from pluresdb
|
|
37
|
+
*/
|
|
38
|
+
subscribeToEvents(callback: (events: PraxisEvent[]) => void, query?: unknown): () => void;
|
|
39
|
+
/**
|
|
40
|
+
* Attach the adapter to an engine
|
|
41
|
+
*/
|
|
42
|
+
attachEngine(engine: LogicEngine<TContext>): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create a pluresdb adapter (placeholder implementation)
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Future usage:
|
|
49
|
+
* const adapter = createPluresDBAdapter({
|
|
50
|
+
* connection: pluresdbClient,
|
|
51
|
+
* collection: "myapp-events"
|
|
52
|
+
* });
|
|
53
|
+
* adapter.attachEngine(engine);
|
|
54
|
+
*/
|
|
55
|
+
export declare function createPluresDBAdapter<TContext = unknown>(_options: unknown): PluresDBAdapter<TContext>;
|
|
56
|
+
//# sourceMappingURL=pluresdb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluresdb.d.ts","sourceRoot":"","sources":["../../src/integrations/pluresdb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD;;OAEG;IACH,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEpD;;OAEG;IACH,iBAAiB,CACf,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,EACzC,KAAK,CAAC,EAAE,OAAO,GACd,MAAM,IAAI,CAAC;IAEd;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;CACnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,GAAG,OAAO,EACtD,QAAQ,EAAE,OAAO,GAChB,eAAe,CAAC,QAAQ,CAAC,CA0B3B"}
|