@plures/praxis 1.0.2 → 1.1.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 +55 -5
- package/LICENSE +21 -21
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- package/core/codegen/ts-generator.ts +15 -15
- package/core/db-adapter/index.ts +2 -2
- package/core/db-adapter/sync-engine.ts +17 -6
- package/core/logic-engine/engine.ts +1 -1
- package/core/logic-engine/index.ts +2 -2
- package/core/logic-engine/protocol.ts +1 -1
- package/core/logic-engine/psf-adapter.ts +8 -4
- package/core/logic-engine/rules.ts +1 -1
- package/core/schema-engine/compiler.ts +53 -11
- package/core/schema-engine/generator.ts +17 -7
- package/core/schema-engine/index.ts +2 -2
- package/core/schema-engine/psf.ts +12 -3
- package/core/schema-engine/types.ts +3 -11
- package/core/schema-engine/validator.ts +112 -22
- package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
- package/dist/browser/index.d.ts +3004 -0
- package/dist/browser/index.js +2892 -0
- package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
- package/dist/browser/integrations/svelte.js +298 -0
- package/dist/node/auth-STARLY7I.js +207 -0
- package/dist/node/build-Y7OT5VBF.js +144 -0
- package/dist/node/canvas-UERZHJYW.js +362 -0
- package/dist/node/chunk-DSDC2JWZ.js +256 -0
- package/dist/node/chunk-FXQZXAWF.js +175 -0
- package/dist/node/chunk-N5Y37EUV.js +202 -0
- package/dist/node/chunk-QGM4M3NI.js +37 -0
- package/dist/node/chunk-RJMWCNHR.js +175 -0
- package/dist/node/chunk-SRM3OPPM.js +404 -0
- package/dist/node/chunk-UATVJBNV.js +175 -0
- package/dist/node/chunk-UY7YEBE2.js +159 -0
- package/dist/node/chunk-XCY2VIFX.js +143 -0
- package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
- package/dist/node/cli/index.cjs +217418 -0
- package/dist/node/cli/index.d.cts +1 -0
- package/dist/node/cli/index.d.ts +1 -0
- package/dist/node/cli/index.js +690 -0
- package/dist/node/cloud/index.cjs +1043 -0
- package/dist/node/cloud/index.d.cts +864 -0
- package/dist/node/cloud/index.d.ts +864 -0
- package/dist/node/cloud/index.js +456 -0
- package/dist/node/cloud-AXOK4PSN.js +212 -0
- package/dist/node/component.cjs +374 -0
- package/dist/node/component.d.cts +125 -0
- package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
- package/dist/node/component.js +9 -0
- package/dist/node/components/index.cjs +216 -0
- package/dist/node/components/index.d.cts +43 -0
- package/dist/{src → node}/components/index.d.ts +8 -8
- package/dist/node/components/index.js +7 -0
- package/dist/node/create-TRLSVCNQ.js +584 -0
- package/dist/node/dev-PMJZUYGE.js +65 -0
- package/dist/node/engine-1iqLe6_P.d.ts +214 -0
- package/dist/node/engine-CVJobhHm.d.cts +214 -0
- package/dist/node/index.cjs +3247 -0
- package/dist/node/index.d.cts +2579 -0
- package/dist/node/index.d.ts +2579 -0
- package/dist/node/index.js +2098 -0
- package/dist/node/integrations/svelte.cjs +330 -0
- package/dist/node/integrations/svelte.d.cts +309 -0
- package/dist/node/integrations/svelte.d.ts +309 -0
- package/dist/node/integrations/svelte.js +300 -0
- package/dist/node/orchestrate-737TCL5H.js +127 -0
- package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
- package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
- package/dist/node/schema.cjs +200 -0
- package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
- package/dist/node/schema.d.ts +371 -0
- package/dist/node/schema.js +9 -0
- package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
- package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
- package/dist/node/verify-YBZ7W24H.js +213239 -0
- package/docs/MONETIZATION.md +21 -16
- package/docs/REACTIVE_REDESIGN.md +132 -0
- package/docs/README.md +47 -36
- package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
- package/docs/TERMINAL_NODE.md +27 -24
- package/docs/core/building-extensions.md +58 -61
- package/docs/core/cli-usage.md +59 -59
- package/docs/core/code-canvas-sync.md +28 -16
- package/docs/core/logic-engine.md +77 -82
- package/docs/core/pluresdb-integration.md +29 -39
- package/docs/core/schema-model.md +66 -52
- package/docs/core/ui-generation.md +57 -49
- package/docs/core/what-is-praxis.md +32 -15
- package/docs/guides/canvas.md +21 -5
- package/docs/guides/getting-started.md +13 -7
- package/docs/guides/history-state-pattern.md +65 -51
- package/docs/guides/orchestration.md +46 -32
- package/docs/guides/parallel-state-pattern.md +56 -72
- package/docs/guides/svelte-integration.md +45 -53
- package/docs/tutorials/README.md +16 -0
- package/docs/tutorials/ecommerce-cart.md +177 -95
- package/docs/tutorials/first-app.md +26 -41
- package/docs/tutorials/form-builder.md +191 -138
- package/docs/tutorials/todo-pluresdb.md +71 -69
- package/package.json +132 -96
- package/src/__tests__/actors.test.ts +68 -68
- package/src/__tests__/billing.test.ts +32 -32
- package/src/__tests__/canvas-components.test.ts +94 -73
- package/src/__tests__/cli-create.test.ts +28 -28
- package/src/__tests__/cloud.test.ts +36 -36
- package/src/__tests__/code-canvas-integration.test.ts +132 -141
- package/src/__tests__/docs-generator.test.ts +3 -9
- package/src/__tests__/dsl.test.ts +58 -64
- package/src/__tests__/edge-cases.test.ts +106 -108
- package/src/__tests__/engine.test.ts +51 -25
- package/src/__tests__/generators.test.ts +42 -44
- package/src/__tests__/introspection.test.ts +104 -114
- package/src/__tests__/pluresdb.test.ts +189 -187
- package/src/__tests__/protocol.test.ts +15 -15
- package/src/__tests__/provisioning.test.ts +61 -61
- package/src/__tests__/schema.test.ts +7 -11
- package/src/__tests__/state-docs-integration.test.ts +162 -145
- package/src/__tests__/svelte-integration.test.ts +16 -19
- package/src/__tests__/tauri-integration.test.ts +149 -147
- package/src/__tests__/terminal-node.test.ts +12 -7
- package/src/__tests__/unum-integration.test.ts +68 -68
- package/src/adapters/cli.ts +21 -15
- package/src/cli/commands/auth.ts +82 -78
- package/src/cli/commands/build.ts +29 -27
- package/src/cli/commands/canvas.ts +338 -127
- package/src/cli/commands/cloud.ts +47 -47
- package/src/cli/commands/create.ts +59 -47
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/generate.ts +29 -40
- package/src/cli/commands/orchestrate.ts +24 -24
- package/src/cli/commands/verify.ts +49 -0
- package/src/cli/index.ts +21 -2
- package/src/cloud/README.md +28 -15
- package/src/cloud/auth.ts +55 -70
- package/src/cloud/billing.ts +59 -58
- package/src/cloud/client.ts +29 -35
- package/src/cloud/index.ts +19 -40
- package/src/cloud/marketplace.ts +69 -78
- package/src/cloud/provisioning.ts +42 -51
- package/src/cloud/relay/endpoints.ts +30 -34
- package/src/cloud/relay/health/index.ts +1 -1
- package/src/cloud/relay/stats/index.ts +1 -1
- package/src/cloud/relay/sync/index.ts +1 -1
- package/src/cloud/relay/usage/index.ts +1 -1
- package/src/cloud/sponsors.ts +31 -34
- package/src/cloud/types.ts +4 -4
- package/src/components/README.md +1 -0
- package/src/components/TerminalNode.svelte +457 -457
- package/src/components/index.ts +3 -4
- package/src/core/actors.ts +7 -7
- package/src/core/component/generator.ts +10 -28
- package/src/core/engine.ts +51 -24
- package/src/core/introspection.ts +37 -35
- package/src/core/logic/generator.ts +62 -62
- package/src/core/pluresdb/adapter.ts +8 -8
- package/src/core/pluresdb/generator.ts +39 -35
- package/src/core/pluresdb/index.ts +9 -12
- package/src/core/pluresdb/schema-registry.ts +22 -25
- package/src/core/pluresdb/store.ts +57 -57
- package/src/core/protocol.ts +14 -14
- package/src/core/reactive-engine.svelte.ts +65 -0
- package/src/core/reactive-engine.ts +67 -0
- package/src/core/rules.ts +4 -4
- package/src/core/schema/loader.common.ts +150 -0
- package/src/core/schema/loader.ts +19 -149
- package/src/core/schema/normalize.ts +34 -51
- package/src/core/schema/types.ts +47 -11
- package/src/dsl/index.ts +8 -8
- package/src/dsl.ts +11 -17
- package/src/examples/advanced-todo/App.svelte +506 -506
- package/src/examples/advanced-todo/README.md +58 -40
- package/src/examples/advanced-todo/index.ts +3 -3
- package/src/examples/auth-basic/index.ts +30 -30
- package/src/examples/cart/index.ts +50 -50
- package/src/examples/hero-ecommerce/index.ts +130 -157
- package/src/examples/svelte-counter/index.ts +22 -26
- package/src/flows.ts +6 -17
- package/src/index.browser.ts +204 -0
- package/src/index.ts +37 -42
- package/src/integrations/code-canvas.ts +237 -193
- package/src/integrations/pluresdb.ts +55 -35
- package/src/integrations/state-docs.ts +104 -104
- package/src/integrations/svelte.ts +35 -35
- package/src/integrations/tauri.ts +75 -73
- package/src/integrations/unum.ts +68 -61
- package/src/registry.ts +7 -14
- package/src/runtime/terminal-adapter.ts +31 -26
- package/src/step.ts +10 -16
- package/src/types.ts +1 -1
- package/templates/basic-app/README.md +6 -9
- package/templates/fullstack-app/README.md +10 -0
- package/dist/core/codegen/docs-generator.d.ts +0 -123
- package/dist/core/codegen/docs-generator.d.ts.map +0 -1
- package/dist/core/codegen/docs-generator.js +0 -674
- package/dist/core/codegen/docs-generator.js.map +0 -1
- package/dist/core/codegen/index.d.ts +0 -11
- package/dist/core/codegen/index.d.ts.map +0 -1
- package/dist/core/codegen/index.js +0 -13
- package/dist/core/codegen/index.js.map +0 -1
- package/dist/core/codegen/ts-generator.d.ts +0 -8
- package/dist/core/codegen/ts-generator.d.ts.map +0 -1
- package/dist/core/codegen/ts-generator.js +0 -8
- package/dist/core/codegen/ts-generator.js.map +0 -1
- package/dist/core/db-adapter/index.d.ts +0 -18
- package/dist/core/db-adapter/index.d.ts.map +0 -1
- package/dist/core/db-adapter/index.js +0 -23
- package/dist/core/db-adapter/index.js.map +0 -1
- package/dist/core/db-adapter/sync-engine.d.ts +0 -180
- package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
- package/dist/core/db-adapter/sync-engine.js +0 -342
- package/dist/core/db-adapter/sync-engine.js.map +0 -1
- package/dist/core/logic-engine/engine.d.ts +0 -8
- package/dist/core/logic-engine/engine.d.ts.map +0 -1
- package/dist/core/logic-engine/engine.js +0 -8
- package/dist/core/logic-engine/engine.js.map +0 -1
- package/dist/core/logic-engine/index.d.ts +0 -16
- package/dist/core/logic-engine/index.d.ts.map +0 -1
- package/dist/core/logic-engine/index.js +0 -16
- package/dist/core/logic-engine/index.js.map +0 -1
- package/dist/core/logic-engine/protocol.d.ts +0 -7
- package/dist/core/logic-engine/protocol.d.ts.map +0 -1
- package/dist/core/logic-engine/protocol.js +0 -7
- package/dist/core/logic-engine/protocol.js.map +0 -1
- package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
- package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
- package/dist/core/logic-engine/psf-adapter.js +0 -207
- package/dist/core/logic-engine/psf-adapter.js.map +0 -1
- package/dist/core/logic-engine/rules.d.ts +0 -7
- package/dist/core/logic-engine/rules.d.ts.map +0 -1
- package/dist/core/logic-engine/rules.js +0 -7
- package/dist/core/logic-engine/rules.js.map +0 -1
- package/dist/core/schema-engine/compiler.d.ts +0 -198
- package/dist/core/schema-engine/compiler.d.ts.map +0 -1
- package/dist/core/schema-engine/compiler.js +0 -262
- package/dist/core/schema-engine/compiler.js.map +0 -1
- package/dist/core/schema-engine/generator.d.ts +0 -115
- package/dist/core/schema-engine/generator.d.ts.map +0 -1
- package/dist/core/schema-engine/generator.js +0 -506
- package/dist/core/schema-engine/generator.js.map +0 -1
- package/dist/core/schema-engine/index.d.ts +0 -18
- package/dist/core/schema-engine/index.d.ts.map +0 -1
- package/dist/core/schema-engine/index.js +0 -18
- package/dist/core/schema-engine/index.js.map +0 -1
- package/dist/core/schema-engine/psf.d.ts +0 -612
- package/dist/core/schema-engine/psf.d.ts.map +0 -1
- package/dist/core/schema-engine/psf.js +0 -45
- package/dist/core/schema-engine/psf.js.map +0 -1
- package/dist/core/schema-engine/types.d.ts +0 -10
- package/dist/core/schema-engine/types.d.ts.map +0 -1
- package/dist/core/schema-engine/types.js +0 -7
- package/dist/core/schema-engine/types.js.map +0 -1
- package/dist/core/schema-engine/validator.d.ts +0 -140
- package/dist/core/schema-engine/validator.d.ts.map +0 -1
- package/dist/core/schema-engine/validator.js +0 -407
- package/dist/core/schema-engine/validator.js.map +0 -1
- package/dist/src/adapters/cli.d.ts +0 -43
- package/dist/src/adapters/cli.d.ts.map +0 -1
- package/dist/src/adapters/cli.js +0 -126
- package/dist/src/adapters/cli.js.map +0 -1
- package/dist/src/cli/commands/auth.d.ts +0 -26
- package/dist/src/cli/commands/auth.d.ts.map +0 -1
- package/dist/src/cli/commands/auth.js +0 -233
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/build.d.ts +0 -23
- package/dist/src/cli/commands/build.d.ts.map +0 -1
- package/dist/src/cli/commands/build.js +0 -162
- package/dist/src/cli/commands/build.js.map +0 -1
- package/dist/src/cli/commands/canvas.d.ts +0 -23
- package/dist/src/cli/commands/canvas.d.ts.map +0 -1
- package/dist/src/cli/commands/canvas.js +0 -215
- package/dist/src/cli/commands/canvas.js.map +0 -1
- package/dist/src/cli/commands/cloud.d.ts +0 -27
- package/dist/src/cli/commands/cloud.d.ts.map +0 -1
- package/dist/src/cli/commands/cloud.js +0 -232
- package/dist/src/cli/commands/cloud.js.map +0 -1
- package/dist/src/cli/commands/create.d.ts +0 -21
- package/dist/src/cli/commands/create.d.ts.map +0 -1
- package/dist/src/cli/commands/create.js +0 -621
- package/dist/src/cli/commands/create.js.map +0 -1
- package/dist/src/cli/commands/dev.d.ts +0 -21
- package/dist/src/cli/commands/dev.d.ts.map +0 -1
- package/dist/src/cli/commands/dev.js +0 -71
- package/dist/src/cli/commands/dev.js.map +0 -1
- package/dist/src/cli/commands/generate.d.ts +0 -25
- package/dist/src/cli/commands/generate.d.ts.map +0 -1
- package/dist/src/cli/commands/generate.js +0 -168
- package/dist/src/cli/commands/generate.js.map +0 -1
- package/dist/src/cli/commands/orchestrate.d.ts +0 -44
- package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/src/cli/commands/orchestrate.js +0 -150
- package/dist/src/cli/commands/orchestrate.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -211
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cloud/auth.d.ts +0 -51
- package/dist/src/cloud/auth.d.ts.map +0 -1
- package/dist/src/cloud/auth.js +0 -194
- package/dist/src/cloud/auth.js.map +0 -1
- package/dist/src/cloud/billing.d.ts +0 -184
- package/dist/src/cloud/billing.d.ts.map +0 -1
- package/dist/src/cloud/billing.js +0 -179
- package/dist/src/cloud/billing.js.map +0 -1
- package/dist/src/cloud/client.d.ts +0 -39
- package/dist/src/cloud/client.d.ts.map +0 -1
- package/dist/src/cloud/client.js +0 -176
- package/dist/src/cloud/client.js.map +0 -1
- package/dist/src/cloud/index.d.ts +0 -44
- package/dist/src/cloud/index.d.ts.map +0 -1
- package/dist/src/cloud/index.js +0 -44
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/cloud/marketplace.d.ts +0 -166
- package/dist/src/cloud/marketplace.d.ts.map +0 -1
- package/dist/src/cloud/marketplace.js +0 -159
- package/dist/src/cloud/marketplace.js.map +0 -1
- package/dist/src/cloud/provisioning.d.ts +0 -110
- package/dist/src/cloud/provisioning.d.ts.map +0 -1
- package/dist/src/cloud/provisioning.js +0 -148
- package/dist/src/cloud/provisioning.js.map +0 -1
- package/dist/src/cloud/relay/endpoints.d.ts +0 -62
- package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/src/cloud/relay/endpoints.js +0 -217
- package/dist/src/cloud/relay/endpoints.js.map +0 -1
- package/dist/src/cloud/relay/health/index.d.ts +0 -5
- package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/health/index.js +0 -9
- package/dist/src/cloud/relay/health/index.js.map +0 -1
- package/dist/src/cloud/relay/stats/index.d.ts +0 -5
- package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/stats/index.js +0 -9
- package/dist/src/cloud/relay/stats/index.js.map +0 -1
- package/dist/src/cloud/relay/sync/index.d.ts +0 -5
- package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/sync/index.js +0 -9
- package/dist/src/cloud/relay/sync/index.js.map +0 -1
- package/dist/src/cloud/relay/usage/index.d.ts +0 -5
- package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/usage/index.js +0 -9
- package/dist/src/cloud/relay/usage/index.js.map +0 -1
- package/dist/src/cloud/sponsors.d.ts +0 -81
- package/dist/src/cloud/sponsors.d.ts.map +0 -1
- package/dist/src/cloud/sponsors.js +0 -130
- package/dist/src/cloud/sponsors.js.map +0 -1
- package/dist/src/cloud/types.d.ts +0 -169
- package/dist/src/cloud/types.d.ts.map +0 -1
- package/dist/src/cloud/types.js +0 -7
- package/dist/src/cloud/types.js.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/index.js +0 -17
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/core/actors.d.ts +0 -95
- package/dist/src/core/actors.d.ts.map +0 -1
- package/dist/src/core/actors.js +0 -158
- package/dist/src/core/actors.js.map +0 -1
- package/dist/src/core/component/generator.d.ts.map +0 -1
- package/dist/src/core/component/generator.js +0 -349
- package/dist/src/core/component/generator.js.map +0 -1
- package/dist/src/core/engine.d.ts +0 -92
- package/dist/src/core/engine.d.ts.map +0 -1
- package/dist/src/core/engine.js +0 -199
- package/dist/src/core/engine.js.map +0 -1
- package/dist/src/core/introspection.d.ts +0 -141
- package/dist/src/core/introspection.d.ts.map +0 -1
- package/dist/src/core/introspection.js +0 -208
- package/dist/src/core/introspection.js.map +0 -1
- package/dist/src/core/logic/generator.d.ts +0 -76
- package/dist/src/core/logic/generator.d.ts.map +0 -1
- package/dist/src/core/logic/generator.js +0 -370
- package/dist/src/core/logic/generator.js.map +0 -1
- package/dist/src/core/pluresdb/adapter.d.ts +0 -72
- package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
- package/dist/src/core/pluresdb/adapter.js +0 -73
- package/dist/src/core/pluresdb/adapter.js.map +0 -1
- package/dist/src/core/pluresdb/generator.d.ts +0 -58
- package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/src/core/pluresdb/generator.js +0 -191
- package/dist/src/core/pluresdb/generator.js.map +0 -1
- package/dist/src/core/pluresdb/index.d.ts +0 -15
- package/dist/src/core/pluresdb/index.d.ts.map +0 -1
- package/dist/src/core/pluresdb/index.js +0 -11
- package/dist/src/core/pluresdb/index.js.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.js +0 -130
- package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
- package/dist/src/core/pluresdb/store.d.ts +0 -199
- package/dist/src/core/pluresdb/store.d.ts.map +0 -1
- package/dist/src/core/pluresdb/store.js +0 -344
- package/dist/src/core/pluresdb/store.js.map +0 -1
- package/dist/src/core/protocol.d.ts.map +0 -1
- package/dist/src/core/protocol.js +0 -46
- package/dist/src/core/protocol.js.map +0 -1
- package/dist/src/core/rules.d.ts +0 -120
- package/dist/src/core/rules.d.ts.map +0 -1
- package/dist/src/core/rules.js +0 -81
- package/dist/src/core/rules.js.map +0 -1
- package/dist/src/core/schema/loader.d.ts +0 -47
- package/dist/src/core/schema/loader.d.ts.map +0 -1
- package/dist/src/core/schema/loader.js +0 -189
- package/dist/src/core/schema/loader.js.map +0 -1
- package/dist/src/core/schema/normalize.d.ts +0 -72
- package/dist/src/core/schema/normalize.d.ts.map +0 -1
- package/dist/src/core/schema/normalize.js +0 -190
- package/dist/src/core/schema/normalize.js.map +0 -1
- package/dist/src/core/schema/types.d.ts.map +0 -1
- package/dist/src/core/schema/types.js +0 -161
- package/dist/src/core/schema/types.js.map +0 -1
- package/dist/src/dsl/index.d.ts +0 -152
- package/dist/src/dsl/index.d.ts.map +0 -1
- package/dist/src/dsl/index.js +0 -132
- package/dist/src/dsl/index.js.map +0 -1
- package/dist/src/dsl.d.ts +0 -124
- package/dist/src/dsl.d.ts.map +0 -1
- package/dist/src/dsl.js +0 -130
- package/dist/src/dsl.js.map +0 -1
- package/dist/src/examples/advanced-todo/index.d.ts +0 -55
- package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/src/examples/advanced-todo/index.js +0 -222
- package/dist/src/examples/advanced-todo/index.js.map +0 -1
- package/dist/src/examples/auth-basic/index.d.ts +0 -17
- package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/src/examples/auth-basic/index.js +0 -122
- package/dist/src/examples/auth-basic/index.js.map +0 -1
- package/dist/src/examples/cart/index.d.ts +0 -19
- package/dist/src/examples/cart/index.d.ts.map +0 -1
- package/dist/src/examples/cart/index.js +0 -202
- package/dist/src/examples/cart/index.js.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.js +0 -506
- package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/src/examples/svelte-counter/index.d.ts +0 -31
- package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/src/examples/svelte-counter/index.js +0 -123
- package/dist/src/examples/svelte-counter/index.js.map +0 -1
- package/dist/src/flows.d.ts +0 -125
- package/dist/src/flows.d.ts.map +0 -1
- package/dist/src/flows.js +0 -160
- package/dist/src/flows.js.map +0 -1
- package/dist/src/index.d.ts +0 -77
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -64
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/code-canvas.d.ts +0 -265
- package/dist/src/integrations/code-canvas.d.ts.map +0 -1
- package/dist/src/integrations/code-canvas.js +0 -451
- package/dist/src/integrations/code-canvas.js.map +0 -1
- package/dist/src/integrations/pluresdb.d.ts +0 -117
- package/dist/src/integrations/pluresdb.d.ts.map +0 -1
- package/dist/src/integrations/pluresdb.js +0 -117
- package/dist/src/integrations/pluresdb.js.map +0 -1
- package/dist/src/integrations/state-docs.d.ts +0 -191
- package/dist/src/integrations/state-docs.d.ts.map +0 -1
- package/dist/src/integrations/state-docs.js +0 -515
- package/dist/src/integrations/state-docs.js.map +0 -1
- package/dist/src/integrations/svelte.d.ts.map +0 -1
- package/dist/src/integrations/svelte.js +0 -447
- package/dist/src/integrations/svelte.js.map +0 -1
- package/dist/src/integrations/tauri.d.ts +0 -360
- package/dist/src/integrations/tauri.d.ts.map +0 -1
- package/dist/src/integrations/tauri.js +0 -278
- package/dist/src/integrations/tauri.js.map +0 -1
- package/dist/src/integrations/unum.d.ts +0 -159
- package/dist/src/integrations/unum.d.ts.map +0 -1
- package/dist/src/integrations/unum.js +0 -240
- package/dist/src/integrations/unum.js.map +0 -1
- package/dist/src/registry.d.ts +0 -94
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -181
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/src/runtime/terminal-adapter.js +0 -239
- package/dist/src/runtime/terminal-adapter.js.map +0 -1
- package/dist/src/step.d.ts +0 -34
- package/dist/src/step.d.ts.map +0 -1
- package/dist/src/step.js +0 -111
- package/dist/src/step.js.map +0 -1
- package/dist/src/types.d.ts +0 -63
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -6
- package/dist/src/types.js.map +0 -1
- package/dist/tools/cli/commands/index.d.ts +0 -7
- package/dist/tools/cli/commands/index.d.ts.map +0 -1
- package/dist/tools/cli/commands/index.js +0 -7
- package/dist/tools/cli/commands/index.js.map +0 -1
- package/dist/tools/cli/index.d.ts +0 -8
- package/dist/tools/cli/index.d.ts.map +0 -1
- package/dist/tools/cli/index.js +0 -9
- package/dist/tools/cli/index.js.map +0 -1
- package/dist/tools/watcher/index.d.ts +0 -105
- package/dist/tools/watcher/index.d.ts.map +0 -1
- package/dist/tools/watcher/index.js +0 -213
- package/dist/tools/watcher/index.js.map +0 -1
- package/dist/ui/canvas/canvas-projection.d.ts +0 -78
- package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-projection.js +0 -416
- package/dist/ui/canvas/canvas-projection.js.map +0 -1
- package/dist/ui/canvas/canvas-state.d.ts +0 -200
- package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-state.js +0 -464
- package/dist/ui/canvas/canvas-state.js.map +0 -1
- package/dist/ui/canvas/components/index.d.ts +0 -95
- package/dist/ui/canvas/components/index.d.ts.map +0 -1
- package/dist/ui/canvas/components/index.js +0 -19
- package/dist/ui/canvas/components/index.js.map +0 -1
- package/dist/ui/canvas/index.d.ts +0 -32
- package/dist/ui/canvas/index.d.ts.map +0 -1
- package/dist/ui/canvas/index.js +0 -32
- package/dist/ui/canvas/index.js.map +0 -1
- package/dist/ui/svelte-generator/index.d.ts +0 -9
- package/dist/ui/svelte-generator/index.d.ts.map +0 -1
- package/dist/ui/svelte-generator/index.js +0 -11
- package/dist/ui/svelte-generator/index.js.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.js +0 -506
- package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,398 +1,158 @@
|
|
|
1
|
-
|
|
1
|
+
dotnet build
|
|
2
|
+
dotnet test
|
|
3
|
+
# Praxis 1.1.0
|
|
4
|
+
|
|
5
|
+
**Typed, visual-first application logic for Svelte, Node, and the browser.**
|
|
2
6
|
|
|
3
|
-
[](https://github.com/plures/praxis/actions/workflows/ci.yml)
|
|
4
|
-
[](https://github.com/plures/praxis/actions/workflows/codeql.yml)
|
|
5
|
-
[](https://opensource.org/licenses/MIT)
|
|
6
7
|
[](https://www.npmjs.com/package/@plures/praxis)
|
|
7
|
-
[](https://www.nuget.org/packages/Plures.Praxis/)
|
|
8
8
|
[](https://jsr.io/@plures/praxis)
|
|
9
|
-
[](LICENSE)
|
|
10
|
+
[](https://nodejs.org/)
|
|
10
11
|
[](https://deno.land/)
|
|
11
12
|
|
|
12
|
-
**
|
|
13
|
+
Praxis is a schema-driven, rule-based engine with first-class Svelte 5 integration, component generation, and optional cloud sync. Version **1.1.0** delivers a unified ESM/CJS build, curated subpath exports, Svelte runes support, and a slimmer, publish-ready package for npm and JSR.
|
|
13
14
|
|
|
14
15
|
---
|
|
15
16
|
|
|
16
|
-
##
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
- 📋 [Changelog](./CHANGELOG.md) | [Roadmap](https://github.com/plures/praxis/issues?q=is%3Aissue+is%3Aopen+label%3Aroadmap)
|
|
23
|
-
- 🔄 [Cross-Language Sync](./CROSS_LANGUAGE_SYNC.md) | [C# Documentation](./csharp/Praxis/README.md)
|
|
24
|
-
|
|
25
|
-
### Project Status
|
|
26
|
-
|
|
27
|
-
| Category | Status |
|
|
28
|
-
|----------|--------|
|
|
29
|
-
| **CI/CD** | ✅ Automated testing & builds |
|
|
30
|
-
| **Version** | 1.0.2 (Stable) |
|
|
31
|
-
| **Runtime Support** | Node.js 18+, Deno (experimental), .NET 8+ |
|
|
32
|
-
| **Package Registries** | npm ✅ / NuGet ✅ / JSR ✅ |
|
|
33
|
-
| **Test Coverage** | 327 TypeScript + 95 C# tests passing |
|
|
34
|
-
| **Documentation** | 📚 Comprehensive guides available |
|
|
35
|
-
|
|
36
|
-
### Language Support
|
|
37
|
-
|
|
38
|
-
| Language | Package | Registry | Status |
|
|
39
|
-
|----------|---------|----------|--------|
|
|
40
|
-
| **TypeScript** | @plures/praxis | npm | ✅ Available |
|
|
41
|
-
| **C#** | Plures.Praxis | NuGet | ✅ Available |
|
|
42
|
-
| **PowerShell** | Praxis.psm1 | GitHub | ✅ Available |
|
|
43
|
-
|
|
44
|
-
### Integration Status
|
|
45
|
-
|
|
46
|
-
| Integration | Status | Notes |
|
|
47
|
-
|------------|--------|-------|
|
|
48
|
-
| **Praxis Cloud** | ✅ Available | Azure-hosted relay for sync & monetization |
|
|
49
|
-
| **PluresDB** | ✅ Available | Local-first reactive datastore with 32 tests |
|
|
50
|
-
| **Unum** | ✅ Available | Identity & channels integration |
|
|
51
|
-
| **Svelte 5** | ✅ Full Support | Runes API, stores, history, time-travel |
|
|
52
|
-
| **Tauri** | ✅ Available | Cross-platform desktop runtime |
|
|
53
|
-
| **CodeCanvas** | ✅ Available | Visual schema editor & FSM enforcement |
|
|
54
|
-
| **State-Docs** | ✅ Available | Documentation generation from schemas |
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Overview
|
|
59
|
-
|
|
60
|
-
Praxis is not just a logic engine—it's a **complete framework** for building modern, local-first, distributed applications. It provides:
|
|
61
|
-
|
|
62
|
-
- **Declarative Schemas**: Define your data models, logic, and components in a unified schema format (PSF)
|
|
63
|
-
- **Logic/State Machines**: Pure, functional application logic with facts, events, rules, and constraints
|
|
64
|
-
- **Component Generation**: Automatically generate Svelte components from schemas
|
|
65
|
-
- **Local-First Data**: Integrated PluresDB for reactive, offline-capable data storage
|
|
66
|
-
- **Documentation Generation**: Automatic documentation generation from schemas with Mermaid diagrams
|
|
67
|
-
- **Visual Design**: CodeCanvas integration for visual schema and logic editing
|
|
68
|
-
- **Real-Time Code ↔ Canvas Sync**: Bidirectional synchronization between code and visual editor
|
|
69
|
-
- **Orchestration**: DSC/MCP support for distributed system coordination
|
|
70
|
-
- **Cross-Platform Runtime**: Web, desktop, and mobile via Svelte + Tauri
|
|
71
|
-
|
|
72
|
-
## 🚀 Praxis 1.0 Architecture
|
|
17
|
+
## What’s new in 1.1.0
|
|
18
|
+
- **Unified builds & exports**: `./`, `./svelte`, `./schema`, `./component`, `./cloud`, `./components`, and CLI all ship with ESM, CJS, and type definitions.
|
|
19
|
+
- **Svelte 5 runes native**: Runes-friendly stores and helpers; server+client builds for integrations.
|
|
20
|
+
- **Logic engine refinements**: Typed registry, step diagnostics, and trace-friendly rule execution.
|
|
21
|
+
- **Cloud relay & local-first**: Polished cloud connector alongside PluresDB-first workflows.
|
|
22
|
+
- **Publish-ready**: npm public access + JSR exports aligned to source.
|
|
73
23
|
|
|
74
|
-
|
|
24
|
+
## Capabilities at a glance
|
|
25
|
+
- **Logic Engine**: Facts, events, rules, constraints, registry, introspection, and reactive engine variant.
|
|
26
|
+
- **Schema & Codegen**: PSF-style schema types plus component generator for Svelte UIs.
|
|
27
|
+
- **Svelte Integration**: Typed helpers, runes-ready builds, and Svelte component typings.
|
|
28
|
+
- **Local-First Data**: PluresDB integrations for offline-first, reactive state.
|
|
29
|
+
- **Cloud Relay**: Optional sync layer (GitHub-auth friendly) for distributed teams.
|
|
30
|
+
- **CLI**: Scaffolding, generation, canvas helpers, and cloud commands.
|
|
75
31
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
PSF is the canonical JSON/AST format that defines your entire application:
|
|
79
|
-
|
|
80
|
-
```json
|
|
81
|
-
{
|
|
82
|
-
"$version": "latest",
|
|
83
|
-
"id": "my-app",
|
|
84
|
-
"name": "My Application",
|
|
85
|
-
"facts": [...],
|
|
86
|
-
"events": [...],
|
|
87
|
-
"rules": [...],
|
|
88
|
-
"constraints": [...],
|
|
89
|
-
"models": [...],
|
|
90
|
-
"components": [...],
|
|
91
|
-
"flows": [...]
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
From this schema, Praxis generates:
|
|
96
|
-
- **TypeScript types** for facts, events, rules
|
|
97
|
-
- **Svelte components** for UI
|
|
98
|
-
- **Markdown documentation** with Mermaid diagrams
|
|
99
|
-
- **Database schemas** for PluresDB
|
|
100
|
-
- **Canvas visualization** for visual editing
|
|
101
|
-
|
|
102
|
-
### Modular Folder Structure
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
/praxis
|
|
106
|
-
├── core/ # Core framework modules
|
|
107
|
-
│ ├── schema-engine/ # PSF types, compiler, generator, validator
|
|
108
|
-
│ ├── logic-engine/ # Rules, constraints, engine, PSF adapter
|
|
109
|
-
│ ├── db-adapter/ # PluresDB sync engine
|
|
110
|
-
│ └── codegen/ # Documentation and code generators
|
|
111
|
-
├── ui/ # UI modules
|
|
112
|
-
│ ├── svelte-generator/ # PSF-aware Svelte component generation
|
|
113
|
-
│ └── canvas/ # Visual canvas state and projection
|
|
114
|
-
├── tools/ # Developer tools
|
|
115
|
-
│ ├── cli/ # Command-line interface
|
|
116
|
-
│ └── watcher/ # File watching and live sync
|
|
117
|
-
├── extensions/ # Optional integrations
|
|
118
|
-
│ ├── dsc/ # DSC/MCP orchestration
|
|
119
|
-
│ ├── azure/ # Azure integration
|
|
120
|
-
│ └── devtools/ # Developer tools
|
|
121
|
-
└── examples/ # Example applications
|
|
122
|
-
├── hero-shop/ # Full e-commerce example
|
|
123
|
-
└── todo/ # Minimal todo example
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### Framework Philosophy
|
|
127
|
-
|
|
128
|
-
### Core Framework Components
|
|
129
|
-
|
|
130
|
-
Praxis provides these integrated capabilities:
|
|
131
|
-
|
|
132
|
-
- **Schema Engine** – PSF parser, compiler, generator, and validator
|
|
133
|
-
- **Logic Engine** – Typed facts, events, rules, and constraints for application logic
|
|
134
|
-
- **Component Factory** – Generate Svelte components from schemas with data bindings
|
|
135
|
-
- **Data Layer** – PluresDB integration for reactive, local-first data storage
|
|
136
|
-
- **State Machines** – Flows and scenarios for orchestrated behaviors
|
|
137
|
-
- **Actors** – Effectful units for side effects and external system integration
|
|
138
|
-
- **Terminal Nodes** – Execute commands and scripts within the Praxis framework
|
|
139
|
-
- **Documentation** – Automatic documentation generation from schemas with Mermaid diagrams
|
|
140
|
-
- **Visual IDE** – CodeCanvas integration for schema and logic editing
|
|
141
|
-
- **Orchestration** – DSC/MCP support for distributed coordination
|
|
142
|
-
- **CLI Tools** – Command-line interface for scaffolding and generation
|
|
143
|
-
|
|
144
|
-
### Design Philosophy
|
|
145
|
-
|
|
146
|
-
1. **Schema-Driven Development**
|
|
147
|
-
- Define once, generate everywhere (models, components, docs, orchestration)
|
|
148
|
-
- Single source of truth for your application structure
|
|
149
|
-
- Type-safe by default across all layers
|
|
150
|
-
|
|
151
|
-
2. **Local-First Architecture**
|
|
152
|
-
- Offline-capable by default with PluresDB
|
|
153
|
-
- Sync when connected, work always
|
|
154
|
-
- Data ownership and privacy built-in
|
|
155
|
-
|
|
156
|
-
3. **Strong typing and functional programming**
|
|
157
|
-
- Core abstractions are strongly typed: `Fact<Tag, Payload>`, `Event<Tag, Payload>`, `Rule<Context, InFact, OutFact>`
|
|
158
|
-
- Pure functions for testability and reasoning
|
|
159
|
-
- Immutable state updates
|
|
160
|
-
|
|
161
|
-
4. **Visual and Code Workflows**
|
|
162
|
-
- CodeCanvas for visual schema and logic editing
|
|
163
|
-
- Full code-level control when needed
|
|
164
|
-
- Seamless transitions between visual and code
|
|
165
|
-
|
|
166
|
-
5. **Cross-Platform and Cross-Language**
|
|
167
|
-
- TypeScript-first with C# and PowerShell support
|
|
168
|
-
- Web, desktop, mobile via Svelte + Tauri
|
|
169
|
-
- Language-agnostic core protocol for maximum portability
|
|
170
|
-
|
|
171
|
-
## Framework Features
|
|
172
|
-
|
|
173
|
-
### 🏗️ Full Application Framework
|
|
174
|
-
- **Schema-Driven**: Define data models, logic, and UI in unified schemas
|
|
175
|
-
- **Component Generation**: Auto-generate Svelte components from schemas
|
|
176
|
-
- **CLI Tools**: `praxis create`, `praxis generate`, `praxis canvas` commands
|
|
177
|
-
- **Templates**: Pre-built app templates (basic, fullstack, distributed)
|
|
178
|
-
- **Integrated Stack**: PluresDB + Unum + ADP + State-Docs + Canvas
|
|
179
|
-
|
|
180
|
-
### 🎨 Visual Development
|
|
181
|
-
- **CodeCanvas Integration**: Visual schema and logic editor
|
|
182
|
-
- **Component Preview**: See generated components in real-time
|
|
183
|
-
- **Flow Visualization**: Visualize state machines and orchestration
|
|
184
|
-
- **Interactive Docs**: Navigate documentation with State-Docs
|
|
185
|
-
|
|
186
|
-
### 🔌 Ecosystem Integration
|
|
187
|
-
- **PluresDB**: Local-first reactive data storage
|
|
188
|
-
- **Unum**: Identity and channels for distributed systems
|
|
189
|
-
- **ADP**: Architectural guardrails and decision tracking
|
|
190
|
-
- **State-Docs**: Living documentation generation
|
|
191
|
-
- **Svelte 5**: Full runes support with history and time-travel
|
|
192
|
-
- **Tauri**: Cross-platform runtime (web/desktop/mobile)
|
|
193
|
-
|
|
194
|
-
### ⚡ Svelte 5 Integration
|
|
195
|
-
- **Runes API**: Modern `$state`, `$derived`, `$effect` support
|
|
196
|
-
- **History States**: Built-in undo/redo and time-travel debugging
|
|
197
|
-
- **Store API**: Backward-compatible stores for Svelte 4/5
|
|
198
|
-
- **Type Safety**: Full TypeScript support with composables
|
|
199
|
-
- **Zero Config**: Works out of the box with Svelte 5
|
|
200
|
-
|
|
201
|
-
## Logic Engine Features
|
|
202
|
-
|
|
203
|
-
- 🎯 **Logic-First Design**: Build applications around facts, events, rules, and constraints
|
|
204
|
-
- 🔄 **Pure Functional Core**: State transitions via pure `step` functions
|
|
205
|
-
- 📝 **Fluent DSL**: Intuitive API for defining rules and constraints
|
|
206
|
-
- 🗂️ **Registry System**: Centralized management of rules and constraints
|
|
207
|
-
- 🌊 **Flows & Actors**: Orchestrate complex state transitions
|
|
208
|
-
- 📦 **JSON-Friendly**: All types are serializable for cross-platform use
|
|
209
|
-
- 🔒 **Type-Safe**: Full TypeScript support with strict typing
|
|
210
|
-
- 🔍 **Introspection**: Generate schemas, graphs, and visualizations of your logic
|
|
211
|
-
- 🌐 **Cross-Language**: C#, PowerShell, and TypeScript implementations with protocol versioning
|
|
212
|
-
- 📊 **Comprehensive Testing**: 327 TypeScript and 95 C# tests covering all features
|
|
213
|
-
- 🎭 **Hero Example**: Full e-commerce demo with auth, cart, features, and actors
|
|
214
|
-
|
|
215
|
-
## Installation
|
|
216
|
-
|
|
217
|
-
### npm (Node.js)
|
|
32
|
+
## Install
|
|
33
|
+
Node 18+ recommended.
|
|
218
34
|
|
|
219
35
|
```bash
|
|
36
|
+
# npm
|
|
220
37
|
npm install @plures/praxis
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
### NuGet (.NET / C#)
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
dotnet add package Plures.Praxis
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
Or add to your `.csproj`:
|
|
230
38
|
|
|
231
|
-
|
|
232
|
-
|
|
39
|
+
# pnpm
|
|
40
|
+
pnpm add @plures/praxis
|
|
233
41
|
```
|
|
234
42
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
### JSR (Deno)
|
|
238
|
-
|
|
43
|
+
JSR (Deno):
|
|
239
44
|
```bash
|
|
240
|
-
|
|
241
|
-
|
|
45
|
+
const result = engine.step([Login.create({ username: 'alice' })]);
|
|
46
|
+
# or via import map pointing to npm:
|
|
47
|
+
# {
|
|
48
|
+
# "imports": { "@plures/praxis": "npm:@plures/praxis@^1.1.0" }
|
|
49
|
+
# }
|
|
242
50
|
```
|
|
243
51
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
```
|
|
52
|
+
## Quick start (logic engine)
|
|
53
|
+
```ts
|
|
54
|
+
import {
|
|
55
|
+
createPraxisEngine,
|
|
56
|
+
PraxisRegistry,
|
|
57
|
+
defineFact,
|
|
58
|
+
defineEvent,
|
|
59
|
+
defineRule,
|
|
60
|
+
} from '@plures/praxis';
|
|
254
61
|
|
|
255
|
-
|
|
62
|
+
const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string }>('UserLoggedIn');
|
|
63
|
+
const Login = defineEvent<'LOGIN', { username: string }>('LOGIN');
|
|
256
64
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
65
|
+
const loginRule = defineRule<{ currentUser: string | null }>({
|
|
66
|
+
id: 'auth.login',
|
|
67
|
+
description: 'Authenticate and emit fact',
|
|
68
|
+
impl: (state, events) => {
|
|
69
|
+
const evt = events.find(Login.is);
|
|
70
|
+
if (!evt) return [];
|
|
71
|
+
state.context.currentUser = evt.payload.username;
|
|
72
|
+
return [UserLoggedIn.create({ userId: evt.payload.username })];
|
|
73
|
+
},
|
|
74
|
+
});
|
|
261
75
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
npm run build
|
|
265
|
-
npm test
|
|
76
|
+
const registry = new PraxisRegistry();
|
|
77
|
+
registry.registerRule(loginRule);
|
|
266
78
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
dotnet build
|
|
270
|
-
dotnet test
|
|
79
|
+
const engine = createPraxisEngine({ initialContext: { currentUser: null }, registry });
|
|
80
|
+
engine.step([Login.create({ username: 'alex' })]);
|
|
271
81
|
```
|
|
272
82
|
|
|
273
|
-
##
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
83
|
+
## Svelte integration (runes-ready)
|
|
84
|
+
```svelte
|
|
85
|
+
<script lang="ts">
|
|
86
|
+
import { createReactiveEngine, defineEvent, defineRule, PraxisRegistry } from '@plures/praxis/svelte';
|
|
87
|
+
|
|
88
|
+
const Increment = defineEvent<'INCREMENT', { amount: number }>('INCREMENT');
|
|
89
|
+
const counterRule = defineRule<{ count: number }>({
|
|
90
|
+
id: 'counter.increment',
|
|
91
|
+
description: 'Add to count',
|
|
92
|
+
impl: (state, events) => {
|
|
93
|
+
const evt = events.find(Increment.is);
|
|
94
|
+
if (evt) state.context.count += evt.payload.amount;
|
|
95
|
+
return [];
|
|
96
|
+
},
|
|
97
|
+
});
|
|
287
98
|
|
|
288
|
-
|
|
289
|
-
|
|
99
|
+
const registry = new PraxisRegistry();
|
|
100
|
+
registry.registerRule(counterRule);
|
|
290
101
|
|
|
291
|
-
|
|
292
|
-
|
|
102
|
+
const engine = createReactiveEngine({ initialContext: { count: 0 }, registry });
|
|
103
|
+
const count = engine.$derived((s) => s.context.count);
|
|
293
104
|
|
|
294
|
-
|
|
295
|
-
|
|
105
|
+
function addOne() {
|
|
106
|
+
engine.step([Increment.create({ amount: 1 })]);
|
|
107
|
+
}
|
|
108
|
+
</script>
|
|
296
109
|
|
|
297
|
-
|
|
298
|
-
npm run build
|
|
110
|
+
<button on:click={addOne}>Count is {$count}</button>
|
|
299
111
|
```
|
|
300
112
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
- `praxis whoami` - Show current authenticated user
|
|
305
|
-
- `praxis create app [name]` - Create new application
|
|
306
|
-
- `praxis create component [name]` - Create new component
|
|
307
|
-
- `praxis generate` - Generate code from schemas
|
|
308
|
-
- `praxis canvas [schema]` - Open visual editor
|
|
309
|
-
- `praxis orchestrate` - Manage distributed systems
|
|
310
|
-
- `praxis cloud init` - Connect to Praxis Cloud
|
|
311
|
-
- `praxis cloud status` - Check cloud connection
|
|
312
|
-
- `praxis cloud sync` - Manually sync to cloud
|
|
313
|
-
- `praxis cloud usage` - View cloud usage metrics
|
|
314
|
-
- `praxis dev` - Start development server
|
|
315
|
-
- `praxis build` - Build for production
|
|
316
|
-
|
|
317
|
-
See [docs/guides/getting-started.md](./docs/guides/getting-started.md) for detailed instructions.
|
|
113
|
+
## Cloud relay (optional)
|
|
114
|
+
```ts
|
|
115
|
+
import { connectRelay } from '@plures/praxis/cloud';
|
|
318
116
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
Connect your application to Praxis Cloud for automatic synchronization with GitHub-native authentication and billing:
|
|
322
|
-
|
|
323
|
-
```bash
|
|
324
|
-
# Authenticate with GitHub
|
|
325
|
-
npx praxis login
|
|
326
|
-
|
|
327
|
-
# Initialize cloud connection
|
|
328
|
-
npx praxis cloud init
|
|
329
|
-
|
|
330
|
-
# In your code
|
|
331
|
-
import { connectRelay } from "@plures/praxis/cloud";
|
|
332
|
-
|
|
333
|
-
const relay = await connectRelay("https://praxis-relay.azurewebsites.net", {
|
|
334
|
-
appId: "my-app",
|
|
117
|
+
const relay = await connectRelay('https://my-relay.example.com', {
|
|
118
|
+
appId: 'my-app',
|
|
335
119
|
authToken: process.env.GITHUB_TOKEN,
|
|
336
|
-
autoSync: true
|
|
120
|
+
autoSync: true,
|
|
337
121
|
});
|
|
338
122
|
|
|
339
|
-
// Sync automatically handles CRDT merge
|
|
340
123
|
await relay.sync({
|
|
341
|
-
type:
|
|
342
|
-
appId:
|
|
124
|
+
type: 'delta',
|
|
125
|
+
appId: 'my-app',
|
|
343
126
|
clock: {},
|
|
344
|
-
facts: [
|
|
345
|
-
timestamp: Date.now()
|
|
127
|
+
facts: [],
|
|
128
|
+
timestamp: Date.now(),
|
|
346
129
|
});
|
|
347
130
|
```
|
|
348
131
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
// Define rules
|
|
372
|
-
const loginRule = defineRule<AuthContext>({
|
|
373
|
-
id: "auth.login",
|
|
374
|
-
description: "Process login event",
|
|
375
|
-
impl: (state, events) => {
|
|
376
|
-
const loginEvent = events.find(Login.is);
|
|
377
|
-
if (loginEvent) {
|
|
378
|
-
state.context.currentUser = loginEvent.payload.username;
|
|
379
|
-
return [UserLoggedIn.create({ userId: loginEvent.payload.username })];
|
|
380
|
-
}
|
|
381
|
-
return [];
|
|
382
|
-
},
|
|
383
|
-
});
|
|
384
|
-
|
|
385
|
-
// Create engine
|
|
386
|
-
const registry = new PraxisRegistry<AuthContext>();
|
|
387
|
-
registry.registerRule(loginRule);
|
|
388
|
-
|
|
389
|
-
const engine = createPraxisEngine({
|
|
390
|
-
initialContext: { currentUser: null },
|
|
391
|
-
registry,
|
|
392
|
-
});
|
|
132
|
+
## CLI (npx-friendly)
|
|
133
|
+
```bash
|
|
134
|
+
npx praxis --help
|
|
135
|
+
npx praxis create app my-app
|
|
136
|
+
npx praxis generate --schema src/schemas/app.schema.ts
|
|
137
|
+
npx praxis canvas src/schemas/app.schema.ts
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Exports map
|
|
141
|
+
- `@plures/praxis` → main engine (ESM/CJS/types)
|
|
142
|
+
- `@plures/praxis/svelte` → Svelte 5 integrations
|
|
143
|
+
- `@plures/praxis/schema` → Schema types
|
|
144
|
+
- `@plures/praxis/component` → Component generator
|
|
145
|
+
- `@plures/praxis/cloud` → Cloud relay APIs
|
|
146
|
+
- `@plures/praxis/components` → TS props for Svelte components (e.g., TerminalNode)
|
|
147
|
+
- `praxis` (bin) → CLI entrypoint
|
|
148
|
+
|
|
149
|
+
## Documentation
|
|
150
|
+
- [Getting Started](./GETTING_STARTED.md)
|
|
151
|
+
- [Framework Guide](./FRAMEWORK.md)
|
|
152
|
+
- [Examples](./examples/)
|
|
393
153
|
|
|
394
|
-
|
|
395
|
-
|
|
154
|
+
## Contributing
|
|
155
|
+
PRs and discussions welcome. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) and [SECURITY.md](./SECURITY.md).
|
|
396
156
|
console.log(result.state.facts); // [{ tag: "UserLoggedIn", payload: { userId: "alice" } }]
|
|
397
157
|
console.log(engine.getContext()); // { currentUser: "alice" }
|
|
398
158
|
```
|
|
@@ -400,13 +160,13 @@ console.log(engine.getContext()); // { currentUser: "alice" }
|
|
|
400
160
|
### With Constraints
|
|
401
161
|
|
|
402
162
|
```typescript
|
|
403
|
-
import { defineConstraint } from
|
|
163
|
+
import { defineConstraint } from '@plures/praxis';
|
|
404
164
|
|
|
405
165
|
const maxSessionsConstraint = defineConstraint<AuthContext>({
|
|
406
|
-
id:
|
|
407
|
-
description:
|
|
166
|
+
id: 'auth.maxSessions',
|
|
167
|
+
description: 'Only one user can be logged in at a time',
|
|
408
168
|
impl: (state) => {
|
|
409
|
-
return state.context.currentUser === null ||
|
|
169
|
+
return state.context.currentUser === null || 'User already logged in';
|
|
410
170
|
},
|
|
411
171
|
});
|
|
412
172
|
|
|
@@ -418,7 +178,7 @@ registry.registerConstraint(maxSessionsConstraint);
|
|
|
418
178
|
#### Store API (Svelte 4/5 Compatible)
|
|
419
179
|
|
|
420
180
|
```typescript
|
|
421
|
-
import { createPraxisStore, createDerivedStore } from
|
|
181
|
+
import { createPraxisStore, createDerivedStore } from '@plures/praxis/svelte';
|
|
422
182
|
|
|
423
183
|
const stateStore = createPraxisStore(engine);
|
|
424
184
|
const userStore = createDerivedStore(engine, (ctx) => ctx.currentUser);
|
|
@@ -438,7 +198,7 @@ const userStore = createDerivedStore(engine, (ctx) => ctx.currentUser);
|
|
|
438
198
|
import { createMyEngine, Login } from './my-engine';
|
|
439
199
|
|
|
440
200
|
const engine = createMyEngine();
|
|
441
|
-
const {
|
|
201
|
+
const {
|
|
442
202
|
context, // Reactive context
|
|
443
203
|
dispatch, // Dispatch events
|
|
444
204
|
undo, // Undo last action
|
|
@@ -453,15 +213,15 @@ const userStore = createDerivedStore(engine, (ctx) => ctx.currentUser);
|
|
|
453
213
|
|
|
454
214
|
<div>
|
|
455
215
|
<p>User: {context.currentUser || 'Guest'}</p>
|
|
456
|
-
|
|
216
|
+
|
|
457
217
|
<button onclick={() => dispatch([Login.create({ username: 'alice' })])}>
|
|
458
218
|
Login
|
|
459
219
|
</button>
|
|
460
|
-
|
|
220
|
+
|
|
461
221
|
<button onclick={undo} disabled={!canUndo}>
|
|
462
222
|
⟲ Undo
|
|
463
223
|
</button>
|
|
464
|
-
|
|
224
|
+
|
|
465
225
|
<button onclick={redo} disabled={!canRedo}>
|
|
466
226
|
⟳ Redo
|
|
467
227
|
</button>
|
|
@@ -469,12 +229,14 @@ const userStore = createDerivedStore(engine, (ctx) => ctx.currentUser);
|
|
|
469
229
|
```
|
|
470
230
|
|
|
471
231
|
See the [Advanced Todo Example](src/examples/advanced-todo/) for a complete demo with:
|
|
232
|
+
|
|
472
233
|
- Undo/redo functionality
|
|
473
234
|
- Time-travel debugging
|
|
474
235
|
- Keyboard shortcuts
|
|
475
236
|
- Beautiful UI
|
|
476
237
|
|
|
477
238
|
For comprehensive guides:
|
|
239
|
+
|
|
478
240
|
- [Svelte Integration Guide](docs/guides/svelte-integration.md)
|
|
479
241
|
- [History State Pattern](docs/guides/history-state-pattern.md)
|
|
480
242
|
- [Parallel State Pattern](docs/guides/parallel-state-pattern.md)
|
|
@@ -511,6 +273,7 @@ type PraxisStepFn = (
|
|
|
511
273
|
```
|
|
512
274
|
|
|
513
275
|
This protocol is:
|
|
276
|
+
|
|
514
277
|
- Pure and deterministic (data in → data out)
|
|
515
278
|
- No side effects, no global state
|
|
516
279
|
- JSON-friendly for cross-language compatibility
|
|
@@ -586,7 +349,9 @@ See [FRAMEWORK.md](./FRAMEWORK.md) for complete architecture documentation.
|
|
|
586
349
|
The repository includes multiple complete examples:
|
|
587
350
|
|
|
588
351
|
### 1. Hero E-Commerce (`src/examples/hero-ecommerce`)
|
|
352
|
+
|
|
589
353
|
Comprehensive example demonstrating all Praxis features in a single application:
|
|
354
|
+
|
|
590
355
|
- Authentication with session management
|
|
591
356
|
- Shopping cart with discount rules
|
|
592
357
|
- Feature flags for A/B testing
|
|
@@ -600,7 +365,9 @@ node dist/examples/hero-ecommerce/index.js
|
|
|
600
365
|
```
|
|
601
366
|
|
|
602
367
|
### 2. Offline-First Chat (`examples/offline-chat`)
|
|
368
|
+
|
|
603
369
|
Demonstrates local-first architecture with PluresDB:
|
|
370
|
+
|
|
604
371
|
- Offline message composition and storage
|
|
605
372
|
- Automatic sync when connected
|
|
606
373
|
- Message queue for offline messages
|
|
@@ -610,7 +377,9 @@ Demonstrates local-first architecture with PluresDB:
|
|
|
610
377
|
See [examples/offline-chat/README.md](./examples/offline-chat/README.md)
|
|
611
378
|
|
|
612
379
|
### 3. Knowledge Canvas (`examples/knowledge-canvas`)
|
|
380
|
+
|
|
613
381
|
Showcases CodeCanvas integration for visual knowledge management:
|
|
382
|
+
|
|
614
383
|
- Visual knowledge graph editing
|
|
615
384
|
- Schema-driven content types
|
|
616
385
|
- Generated UI components
|
|
@@ -620,7 +389,9 @@ Showcases CodeCanvas integration for visual knowledge management:
|
|
|
620
389
|
See [examples/knowledge-canvas/README.md](./examples/knowledge-canvas/README.md)
|
|
621
390
|
|
|
622
391
|
### 4. Self-Orchestrating Node (`examples/distributed-node`)
|
|
392
|
+
|
|
623
393
|
Demonstrates distributed orchestration with DSC/MCP:
|
|
394
|
+
|
|
624
395
|
- Automatic node discovery
|
|
625
396
|
- Self-healing behavior
|
|
626
397
|
- State synchronization across nodes
|
|
@@ -630,7 +401,9 @@ Demonstrates distributed orchestration with DSC/MCP:
|
|
|
630
401
|
See [examples/distributed-node/README.md](./examples/distributed-node/README.md)
|
|
631
402
|
|
|
632
403
|
### 5. Terminal Node (`examples/terminal-node`)
|
|
404
|
+
|
|
633
405
|
Demonstrates the terminal node feature for command execution:
|
|
406
|
+
|
|
634
407
|
- Terminal adapter creation and configuration
|
|
635
408
|
- Command execution and history tracking
|
|
636
409
|
- YAML schema loading with terminal nodes
|
|
@@ -645,6 +418,7 @@ node examples/terminal-node/index.js
|
|
|
645
418
|
See [examples/terminal-node/README.md](./examples/terminal-node/README.md) and [docs/TERMINAL_NODE.md](./docs/TERMINAL_NODE.md)
|
|
646
419
|
|
|
647
420
|
### 6. Auth Basic (`src/examples/auth-basic`)
|
|
421
|
+
|
|
648
422
|
Login/logout with facts, rules, and constraints.
|
|
649
423
|
|
|
650
424
|
```bash
|
|
@@ -653,6 +427,7 @@ node dist/examples/auth-basic/index.js
|
|
|
653
427
|
```
|
|
654
428
|
|
|
655
429
|
### 7. Cart (`src/examples/cart`)
|
|
430
|
+
|
|
656
431
|
Shopping cart with multiple rules, constraints, and complex state management.
|
|
657
432
|
|
|
658
433
|
```bash
|
|
@@ -661,6 +436,7 @@ node dist/examples/cart/index.js
|
|
|
661
436
|
```
|
|
662
437
|
|
|
663
438
|
### 8. Svelte Counter (`src/examples/svelte-counter`)
|
|
439
|
+
|
|
664
440
|
Counter example showing Svelte v5 integration with reactive stores.
|
|
665
441
|
|
|
666
442
|
```bash
|
|
@@ -669,21 +445,25 @@ node dist/examples/svelte-counter/index.js
|
|
|
669
445
|
```
|
|
670
446
|
|
|
671
447
|
### 9. Terminal Canvas (`examples/terminal-canvas`)
|
|
448
|
+
|
|
672
449
|
Combines terminal nodes with visual canvas features in a Svelte app.
|
|
673
450
|
|
|
674
451
|
See [examples/terminal-canvas/README.md](./examples/terminal-canvas/README.md)
|
|
675
452
|
|
|
676
453
|
### 10. GitHub Monetization (`examples/github-monetization`)
|
|
454
|
+
|
|
677
455
|
Example of GitHub-based monetization integration with Praxis Cloud.
|
|
678
456
|
|
|
679
457
|
See [examples/github-monetization/README.md](./examples/github-monetization/README.md)
|
|
680
458
|
|
|
681
459
|
### 11. Simple App (`examples/simple-app`)
|
|
460
|
+
|
|
682
461
|
A minimal example demonstrating basic Praxis schema usage.
|
|
683
462
|
|
|
684
463
|
See [examples/simple-app/README.md](./examples/simple-app/README.md)
|
|
685
464
|
|
|
686
465
|
### 12. Cloud Sync (`examples/cloud-sync`)
|
|
466
|
+
|
|
687
467
|
Demonstrates real-time synchronization with Praxis Cloud relay service.
|
|
688
468
|
|
|
689
469
|
See [examples/cloud-sync/README.md](./examples/cloud-sync/README.md)
|
|
@@ -718,7 +498,7 @@ See [examples/cloud-sync/README.md](./examples/cloud-sync/README.md)
|
|
|
718
498
|
Tools for examining and visualizing your Praxis logic:
|
|
719
499
|
|
|
720
500
|
```typescript
|
|
721
|
-
import { createIntrospector, PRAXIS_PROTOCOL_VERSION } from
|
|
501
|
+
import { createIntrospector, PRAXIS_PROTOCOL_VERSION } from '@plures/praxis';
|
|
722
502
|
|
|
723
503
|
const introspector = createIntrospector(registry);
|
|
724
504
|
|
|
@@ -745,6 +525,7 @@ const maxConstraints = introspector.searchConstraints('max');
|
|
|
745
525
|
```
|
|
746
526
|
|
|
747
527
|
**Available methods:**
|
|
528
|
+
|
|
748
529
|
- `getStats()` - Get registry statistics
|
|
749
530
|
- `generateSchema(protocolVersion)` - Generate JSON schema
|
|
750
531
|
- `generateGraph()` - Generate graph representation
|
|
@@ -764,11 +545,11 @@ Praxis integrates with the full Plures ecosystem:
|
|
|
764
545
|
Local-first reactive datastore for offline-capable applications. **Now fully implemented** with 32 tests covering all features.
|
|
765
546
|
|
|
766
547
|
```typescript
|
|
767
|
-
import {
|
|
768
|
-
createInMemoryDB,
|
|
769
|
-
createPraxisDBStore,
|
|
548
|
+
import {
|
|
549
|
+
createInMemoryDB,
|
|
550
|
+
createPraxisDBStore,
|
|
770
551
|
createPluresDBAdapter,
|
|
771
|
-
attachToEngine
|
|
552
|
+
attachToEngine,
|
|
772
553
|
} from '@plures/praxis/pluresdb';
|
|
773
554
|
|
|
774
555
|
// Create an in-memory database
|
|
@@ -778,26 +559,27 @@ const db = createInMemoryDB();
|
|
|
778
559
|
const store = createPraxisDBStore({ db });
|
|
779
560
|
|
|
780
561
|
// Or create an adapter to attach to an engine
|
|
781
|
-
const adapter = createPluresDBAdapter({
|
|
782
|
-
db,
|
|
562
|
+
const adapter = createPluresDBAdapter({
|
|
563
|
+
db,
|
|
783
564
|
registry,
|
|
784
|
-
initialContext: {}
|
|
565
|
+
initialContext: {},
|
|
785
566
|
});
|
|
786
567
|
|
|
787
568
|
// Attach adapter to engine for automatic persistence
|
|
788
569
|
adapter.attachEngine(engine);
|
|
789
570
|
|
|
790
571
|
// Persist facts and events
|
|
791
|
-
await adapter.persistFacts([{ tag:
|
|
792
|
-
await adapter.persistEvents([{ tag:
|
|
572
|
+
await adapter.persistFacts([{ tag: 'UserLoggedIn', payload: { userId: 'alice' } }]);
|
|
573
|
+
await adapter.persistEvents([{ tag: 'LOGIN', payload: { username: 'alice' } }]);
|
|
793
574
|
|
|
794
575
|
// Subscribe to changes
|
|
795
576
|
adapter.subscribeToEvents((events) => {
|
|
796
|
-
console.log(
|
|
577
|
+
console.log('New events:', events);
|
|
797
578
|
});
|
|
798
579
|
```
|
|
799
580
|
|
|
800
581
|
**Features:**
|
|
582
|
+
|
|
801
583
|
- **In-memory adapter**: Ready-to-use implementation for development and testing
|
|
802
584
|
- **Reactive store**: Watch for changes with callbacks
|
|
803
585
|
- **Schema registry**: Store and retrieve schemas in PluresDB
|
|
@@ -1011,6 +793,7 @@ See [csharp/Praxis/README.md](./csharp/Praxis/README.md) for complete documentat
|
|
|
1011
793
|
## Roadmap
|
|
1012
794
|
|
|
1013
795
|
### Current Focus
|
|
796
|
+
|
|
1014
797
|
- Full CodeCanvas integration
|
|
1015
798
|
- Enhanced Unum identity support
|
|
1016
799
|
- Advanced State-Docs generation
|
|
@@ -1018,6 +801,7 @@ See [csharp/Praxis/README.md](./csharp/Praxis/README.md) for complete documentat
|
|
|
1018
801
|
- Real PluresDB sync with CRDT/offline-first capabilities
|
|
1019
802
|
|
|
1020
803
|
### Long Term
|
|
804
|
+
|
|
1021
805
|
- Mobile templates (iOS, Android)
|
|
1022
806
|
- Enterprise features
|
|
1023
807
|
- Advanced orchestration
|
|
@@ -1029,8 +813,9 @@ See [csharp/Praxis/README.md](./csharp/Praxis/README.md) for complete documentat
|
|
|
1029
813
|
The core protocol is implemented across multiple languages:
|
|
1030
814
|
|
|
1031
815
|
**TypeScript** (Primary, npm: `@plures/praxis`)
|
|
816
|
+
|
|
1032
817
|
```typescript
|
|
1033
|
-
import { createPraxisEngine, PraxisRegistry } from
|
|
818
|
+
import { createPraxisEngine, PraxisRegistry } from '@plures/praxis';
|
|
1034
819
|
|
|
1035
820
|
const engine = createPraxisEngine({
|
|
1036
821
|
initialContext: {},
|
|
@@ -1040,6 +825,7 @@ const result = engine.step(events);
|
|
|
1040
825
|
```
|
|
1041
826
|
|
|
1042
827
|
**C#** (.NET 8+, NuGet: `Plures.Praxis`)
|
|
828
|
+
|
|
1043
829
|
```csharp
|
|
1044
830
|
var engine = PraxisEngine.Create(new PraxisEngineOptions<TContext> { ... });
|
|
1045
831
|
var result = engine.Step(events);
|
|
@@ -1048,6 +834,7 @@ var result = engine.Step(events);
|
|
|
1048
834
|
See [csharp/Praxis/README.md](./csharp/Praxis/README.md) for full documentation.
|
|
1049
835
|
|
|
1050
836
|
**PowerShell** (GitHub: `Praxis.psm1`)
|
|
837
|
+
|
|
1051
838
|
```powershell
|
|
1052
839
|
$newState = Invoke-PraxisStep -State $state -Events $events
|
|
1053
840
|
```
|