@plures/praxis 1.0.3 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FRAMEWORK.md +55 -5
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- 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 +215139 -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-QRYKRIDU.js +210960 -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 +58 -23
- 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 +7 -8
- package/src/cli/index.ts +14 -10
- 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/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/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/commands/verify.d.ts +0 -10
- package/dist/src/cli/commands/verify.d.ts.map +0 -1
- package/dist/src/cli/commands/verify.js +0 -39
- package/dist/src/cli/commands/verify.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 -226
- 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/ast-analyzer/src/ast-analyzer.d.ts +0 -8
- package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
- package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
- package/dist/tools/ast-analyzer/src/ast-analyzer.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/canvas-inspector/src/server.d.ts +0 -2
- package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/server.js +0 -248
- package/dist/ui/canvas-inspector/src/server.js.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.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/src/core/schema/types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Praxis Schema System
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Declarative schema definitions for generating models, components, logic, and documentation.
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -494,7 +494,7 @@ export function validateSchema(schema: PraxisSchema): ValidationResult {
|
|
|
494
494
|
message: 'Node type is required',
|
|
495
495
|
});
|
|
496
496
|
}
|
|
497
|
-
|
|
497
|
+
|
|
498
498
|
// Validate terminal node specific props
|
|
499
499
|
if (node.type === 'terminal' && node.props) {
|
|
500
500
|
const props = node.props as Partial<TerminalNodeProps>;
|
|
@@ -527,18 +527,54 @@ function isValidIdentifier(str: string): boolean {
|
|
|
527
527
|
// JavaScript identifier must start with letter, $, or _
|
|
528
528
|
// and can contain letters, digits, $, or _
|
|
529
529
|
const identifierRegex = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;
|
|
530
|
-
|
|
530
|
+
|
|
531
531
|
// Also check that it's not a reserved keyword
|
|
532
532
|
const reservedKeywords = [
|
|
533
|
-
'break',
|
|
534
|
-
'
|
|
535
|
-
'
|
|
536
|
-
'
|
|
537
|
-
'
|
|
538
|
-
'
|
|
539
|
-
'
|
|
533
|
+
'break',
|
|
534
|
+
'case',
|
|
535
|
+
'catch',
|
|
536
|
+
'class',
|
|
537
|
+
'const',
|
|
538
|
+
'continue',
|
|
539
|
+
'debugger',
|
|
540
|
+
'default',
|
|
541
|
+
'delete',
|
|
542
|
+
'do',
|
|
543
|
+
'else',
|
|
544
|
+
'export',
|
|
545
|
+
'extends',
|
|
546
|
+
'finally',
|
|
547
|
+
'for',
|
|
548
|
+
'function',
|
|
549
|
+
'if',
|
|
550
|
+
'import',
|
|
551
|
+
'in',
|
|
552
|
+
'instanceof',
|
|
553
|
+
'new',
|
|
554
|
+
'return',
|
|
555
|
+
'super',
|
|
556
|
+
'switch',
|
|
557
|
+
'this',
|
|
558
|
+
'throw',
|
|
559
|
+
'try',
|
|
560
|
+
'typeof',
|
|
561
|
+
'var',
|
|
562
|
+
'void',
|
|
563
|
+
'while',
|
|
564
|
+
'with',
|
|
565
|
+
'yield',
|
|
566
|
+
'let',
|
|
567
|
+
'static',
|
|
568
|
+
'enum',
|
|
569
|
+
'await',
|
|
570
|
+
'implements',
|
|
571
|
+
'interface',
|
|
572
|
+
'package',
|
|
573
|
+
'private',
|
|
574
|
+
'protected',
|
|
575
|
+
'public',
|
|
540
576
|
];
|
|
541
|
-
|
|
577
|
+
|
|
542
578
|
return identifierRegex.test(str) && !reservedKeywords.includes(str);
|
|
543
579
|
}
|
|
544
580
|
|
package/src/dsl/index.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* DSL Helpers
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Ergonomic TypeScript helpers for defining facts, events, rules, constraints, and flows.
|
|
5
5
|
* These produce both strongly-typed APIs and serializable descriptors.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { PraxisEvent, PraxisFact } from
|
|
8
|
+
import type { PraxisEvent, PraxisFact } from '../core/protocol.js';
|
|
9
9
|
import type {
|
|
10
10
|
RuleDescriptor,
|
|
11
11
|
ConstraintDescriptor,
|
|
12
12
|
PraxisModule,
|
|
13
13
|
RuleFn,
|
|
14
14
|
ConstraintFn,
|
|
15
|
-
} from
|
|
15
|
+
} from '../core/rules.js';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Strongly typed fact definition
|
|
@@ -25,7 +25,7 @@ export interface FactDefinition<TTag extends string, TPayload> {
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Define a typed fact
|
|
28
|
-
*
|
|
28
|
+
*
|
|
29
29
|
* @example
|
|
30
30
|
* const UserLoggedIn = defineFact<"UserLoggedIn", { userId: string }>("UserLoggedIn");
|
|
31
31
|
* const fact = UserLoggedIn.create({ userId: "123" });
|
|
@@ -58,7 +58,7 @@ export interface EventDefinition<TTag extends string, TPayload> {
|
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* Define a typed event
|
|
61
|
-
*
|
|
61
|
+
*
|
|
62
62
|
* @example
|
|
63
63
|
* const Login = defineEvent<"LOGIN", { username: string; password: string }>("LOGIN");
|
|
64
64
|
* const event = Login.create({ username: "alice", password: "secret" });
|
|
@@ -89,7 +89,7 @@ export interface DefineRuleOptions<TContext = unknown> {
|
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
91
|
* Define a rule
|
|
92
|
-
*
|
|
92
|
+
*
|
|
93
93
|
* @example
|
|
94
94
|
* const loginRule = defineRule({
|
|
95
95
|
* id: "auth.login",
|
|
@@ -126,7 +126,7 @@ export interface DefineConstraintOptions<TContext = unknown> {
|
|
|
126
126
|
|
|
127
127
|
/**
|
|
128
128
|
* Define a constraint
|
|
129
|
-
*
|
|
129
|
+
*
|
|
130
130
|
* @example
|
|
131
131
|
* const maxCartItems = defineConstraint({
|
|
132
132
|
* id: "cart.maxItems",
|
|
@@ -159,7 +159,7 @@ export interface DefineModuleOptions<TContext = unknown> {
|
|
|
159
159
|
|
|
160
160
|
/**
|
|
161
161
|
* Define a module (bundle of rules and constraints)
|
|
162
|
-
*
|
|
162
|
+
*
|
|
163
163
|
* @example
|
|
164
164
|
* const authModule = defineModule({
|
|
165
165
|
* rules: [loginRule, logoutRule],
|
package/src/dsl.ts
CHANGED
|
@@ -9,26 +9,23 @@ import type { PraxisState, PraxisEvent, Effect } from './types.js';
|
|
|
9
9
|
/**
|
|
10
10
|
* A condition function that checks if a rule should fire.
|
|
11
11
|
*/
|
|
12
|
-
export type Condition<
|
|
13
|
-
S
|
|
14
|
-
E
|
|
15
|
-
|
|
12
|
+
export type Condition<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> = (
|
|
13
|
+
state: S,
|
|
14
|
+
event: E
|
|
15
|
+
) => boolean;
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* An action function that produces effects when a rule fires.
|
|
19
19
|
*/
|
|
20
|
-
export type Action<
|
|
21
|
-
S
|
|
22
|
-
E
|
|
23
|
-
|
|
20
|
+
export type Action<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> = (
|
|
21
|
+
state: S,
|
|
22
|
+
event: E
|
|
23
|
+
) => Effect[];
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* A rule that fires when its condition is met.
|
|
27
27
|
*/
|
|
28
|
-
export interface Rule<
|
|
29
|
-
S extends PraxisState = PraxisState,
|
|
30
|
-
E extends PraxisEvent = PraxisEvent
|
|
31
|
-
> {
|
|
28
|
+
export interface Rule<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> {
|
|
32
29
|
/** Unique identifier for the rule */
|
|
33
30
|
id: string;
|
|
34
31
|
/** Human-readable description of what the rule does */
|
|
@@ -69,10 +66,7 @@ export interface ConstraintViolation {
|
|
|
69
66
|
/**
|
|
70
67
|
* DSL builder for creating rules with a fluent interface.
|
|
71
68
|
*/
|
|
72
|
-
export class RuleBuilder<
|
|
73
|
-
S extends PraxisState = PraxisState,
|
|
74
|
-
E extends PraxisEvent = PraxisEvent
|
|
75
|
-
> {
|
|
69
|
+
export class RuleBuilder<S extends PraxisState = PraxisState, E extends PraxisEvent = PraxisEvent> {
|
|
76
70
|
private rule: Partial<Rule<S, E>> = {};
|
|
77
71
|
|
|
78
72
|
/**
|
|
@@ -201,7 +195,7 @@ export class ConstraintBuilder<S extends PraxisState = PraxisState> {
|
|
|
201
195
|
*/
|
|
202
196
|
export function rule<
|
|
203
197
|
S extends PraxisState = PraxisState,
|
|
204
|
-
E extends PraxisEvent = PraxisEvent
|
|
198
|
+
E extends PraxisEvent = PraxisEvent,
|
|
205
199
|
>(): RuleBuilder<S, E> {
|
|
206
200
|
return new RuleBuilder<S, E>();
|
|
207
201
|
}
|
|
@@ -5,6 +5,7 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
### Core Functionality
|
|
8
|
+
|
|
8
9
|
- ✅ Add, complete, and remove todos
|
|
9
10
|
- ✅ Filter by all, active, or completed
|
|
10
11
|
- ✅ Complete all todos at once
|
|
@@ -12,6 +13,7 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
|
|
|
12
13
|
- ✅ Real-time statistics
|
|
13
14
|
|
|
14
15
|
### Advanced Features
|
|
16
|
+
|
|
15
17
|
- 🔄 **Undo/Redo**: Full history tracking with keyboard shortcuts
|
|
16
18
|
- 🕰️ **Time-Travel Debugging**: Navigate through state snapshots
|
|
17
19
|
- ⚡ **Svelte 5 Runes**: Modern reactive API
|
|
@@ -21,12 +23,14 @@ A comprehensive example demonstrating Praxis's Svelte 5 integration with history
|
|
|
21
23
|
## Architecture
|
|
22
24
|
|
|
23
25
|
### State Management
|
|
26
|
+
|
|
24
27
|
- **Engine**: Praxis logic engine managing todo state
|
|
25
28
|
- **Rules**: Pure functions handling events
|
|
26
29
|
- **Facts**: Immutable history of what happened
|
|
27
30
|
- **Context**: Current application state
|
|
28
31
|
|
|
29
32
|
### Svelte Integration
|
|
33
|
+
|
|
30
34
|
- **usePraxisEngine**: Main composable with history support
|
|
31
35
|
- **Reactive Derivations**: Computed values with `$:` syntax
|
|
32
36
|
- **Event Dispatching**: Type-safe event handling
|
|
@@ -71,7 +75,7 @@ export function createTodoEngine() {
|
|
|
71
75
|
const registry = new PraxisRegistry<TodoContext>();
|
|
72
76
|
registry.registerRule(addTodoRule);
|
|
73
77
|
// ... register more rules
|
|
74
|
-
|
|
78
|
+
|
|
75
79
|
return createPraxisEngine({
|
|
76
80
|
initialContext: { todos: [], filter: 'all', nextId: 1 },
|
|
77
81
|
registry,
|
|
@@ -127,6 +131,7 @@ node dist/examples/advanced-todo/index.js
|
|
|
127
131
|
```
|
|
128
132
|
|
|
129
133
|
Output:
|
|
134
|
+
|
|
130
135
|
```
|
|
131
136
|
=== Advanced Todo Example ===
|
|
132
137
|
|
|
@@ -157,11 +162,13 @@ Output:
|
|
|
157
162
|
To use the Svelte component in your app:
|
|
158
163
|
|
|
159
164
|
1. Install dependencies:
|
|
165
|
+
|
|
160
166
|
```bash
|
|
161
167
|
npm install @plures/praxis svelte@^5.0.0
|
|
162
168
|
```
|
|
163
169
|
|
|
164
170
|
2. Import and use the component:
|
|
171
|
+
|
|
165
172
|
```svelte
|
|
166
173
|
<script>
|
|
167
174
|
import TodoApp from '@plures/praxis/examples/advanced-todo/App.svelte';
|
|
@@ -179,7 +186,7 @@ Or create your own component using the engine:
|
|
|
179
186
|
|
|
180
187
|
const engine = createTodoEngine();
|
|
181
188
|
const { context, dispatch } = usePraxisEngine(engine);
|
|
182
|
-
|
|
189
|
+
|
|
183
190
|
let text = '';
|
|
184
191
|
</script>
|
|
185
192
|
|
|
@@ -226,9 +233,15 @@ const addTodoRule = defineRule({
|
|
|
226
233
|
// - Testable
|
|
227
234
|
const event = findEvent(events, AddTodo);
|
|
228
235
|
if (!event) return [];
|
|
229
|
-
|
|
230
|
-
state.context.todos.push({
|
|
231
|
-
|
|
236
|
+
|
|
237
|
+
state.context.todos.push({
|
|
238
|
+
/* ... */
|
|
239
|
+
});
|
|
240
|
+
return [
|
|
241
|
+
TodoAdded.create({
|
|
242
|
+
/* ... */
|
|
243
|
+
}),
|
|
244
|
+
];
|
|
232
245
|
},
|
|
233
246
|
});
|
|
234
247
|
```
|
|
@@ -240,8 +253,8 @@ const addTodoRule = defineRule({
|
|
|
240
253
|
const facts = engine.getFacts();
|
|
241
254
|
|
|
242
255
|
// Find specific facts
|
|
243
|
-
const added = facts.filter(f => f.tag === 'TodoAdded');
|
|
244
|
-
const toggled = facts.filter(f => f.tag === 'TodoToggled');
|
|
256
|
+
const added = facts.filter((f) => f.tag === 'TodoAdded');
|
|
257
|
+
const toggled = facts.filter((f) => f.tag === 'TodoToggled');
|
|
245
258
|
|
|
246
259
|
// Facts enable:
|
|
247
260
|
// - Audit trails
|
|
@@ -270,10 +283,10 @@ const { undo, redo, snapshots, goToSnapshot } = usePraxisEngine(engine, {
|
|
|
270
283
|
});
|
|
271
284
|
|
|
272
285
|
// Navigate history
|
|
273
|
-
undo();
|
|
274
|
-
redo();
|
|
275
|
-
goToSnapshot(5);
|
|
276
|
-
console.log(snapshots);
|
|
286
|
+
undo(); // Go back
|
|
287
|
+
redo(); // Go forward
|
|
288
|
+
goToSnapshot(5); // Jump to specific snapshot
|
|
289
|
+
console.log(snapshots); // View all snapshots
|
|
277
290
|
```
|
|
278
291
|
|
|
279
292
|
## Testing
|
|
@@ -287,7 +300,7 @@ describe('Todo Engine', () => {
|
|
|
287
300
|
it('should add todos', () => {
|
|
288
301
|
const engine = createTodoEngine();
|
|
289
302
|
engine.step([AddTodo.create({ text: 'Test todo' })]);
|
|
290
|
-
|
|
303
|
+
|
|
291
304
|
const context = engine.getContext();
|
|
292
305
|
expect(context.todos.length).toBe(1);
|
|
293
306
|
expect(context.todos[0].text).toBe('Test todo');
|
|
@@ -296,10 +309,10 @@ describe('Todo Engine', () => {
|
|
|
296
309
|
it('should toggle todos', () => {
|
|
297
310
|
const engine = createTodoEngine();
|
|
298
311
|
engine.step([AddTodo.create({ text: 'Test' })]);
|
|
299
|
-
|
|
312
|
+
|
|
300
313
|
const context = engine.getContext();
|
|
301
314
|
const todoId = context.todos[0].id;
|
|
302
|
-
|
|
315
|
+
|
|
303
316
|
engine.step([ToggleTodo.create({ id: todoId })]);
|
|
304
317
|
expect(engine.getContext().todos[0].completed).toBe(true);
|
|
305
318
|
});
|
|
@@ -309,55 +322,60 @@ describe('Todo Engine', () => {
|
|
|
309
322
|
## Performance Tips
|
|
310
323
|
|
|
311
324
|
1. **Batch Events**: Dispatch multiple events at once
|
|
325
|
+
|
|
312
326
|
```typescript
|
|
313
|
-
dispatch(
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
327
|
+
dispatch(
|
|
328
|
+
[
|
|
329
|
+
AddTodo.create({ text: 'Todo 1' }),
|
|
330
|
+
AddTodo.create({ text: 'Todo 2' }),
|
|
331
|
+
AddTodo.create({ text: 'Todo 3' }),
|
|
332
|
+
],
|
|
333
|
+
'Batch Add'
|
|
334
|
+
);
|
|
318
335
|
```
|
|
319
336
|
|
|
320
337
|
2. **Limit History**: Adjust history size based on needs
|
|
338
|
+
|
|
321
339
|
```typescript
|
|
322
340
|
usePraxisEngine(engine, { maxHistorySize: 20 });
|
|
323
341
|
```
|
|
324
342
|
|
|
325
343
|
3. **Selective Subscriptions**: Use derived stores for specific values
|
|
326
344
|
```typescript
|
|
327
|
-
const count = createDerivedStore(engine, ctx => ctx.todos.length);
|
|
345
|
+
const count = createDerivedStore(engine, (ctx) => ctx.todos.length);
|
|
328
346
|
```
|
|
329
347
|
|
|
330
348
|
## Comparison with Other Libraries
|
|
331
349
|
|
|
332
350
|
### vs. Redux + Redux Toolkit
|
|
333
351
|
|
|
334
|
-
| Feature
|
|
335
|
-
|
|
336
|
-
| State Updates
|
|
337
|
-
| Side Effects
|
|
338
|
-
| Time-Travel
|
|
339
|
-
| TypeScript
|
|
340
|
-
| Learning Curve | Medium
|
|
352
|
+
| Feature | Redux + RTK | Praxis |
|
|
353
|
+
| -------------- | ------------ | --------- |
|
|
354
|
+
| State Updates | Reducers | Rules |
|
|
355
|
+
| Side Effects | Thunks/Sagas | Actors |
|
|
356
|
+
| Time-Travel | DevTools | Built-in |
|
|
357
|
+
| TypeScript | Good | Excellent |
|
|
358
|
+
| Learning Curve | Medium | Low |
|
|
341
359
|
|
|
342
360
|
### vs. XState
|
|
343
361
|
|
|
344
|
-
| Feature
|
|
345
|
-
|
|
346
|
-
| State Machines
|
|
362
|
+
| Feature | XState | Praxis |
|
|
363
|
+
| ------------------ | -------------- | --------------------- |
|
|
364
|
+
| State Machines | Native | Engine-based |
|
|
347
365
|
| Svelte Integration | @xstate/svelte | @plures/praxis/svelte |
|
|
348
|
-
| History States
|
|
349
|
-
| Visual Tools
|
|
350
|
-
| Learning Curve
|
|
366
|
+
| History States | Built-in | Pattern-based |
|
|
367
|
+
| Visual Tools | Stately | State-Docs (planned) |
|
|
368
|
+
| Learning Curve | High | Medium |
|
|
351
369
|
|
|
352
370
|
### vs. Svelte Stores
|
|
353
371
|
|
|
354
|
-
| Feature
|
|
355
|
-
|
|
356
|
-
| Simplicity
|
|
357
|
-
| Structure
|
|
358
|
-
| Time-Travel | Manual
|
|
359
|
-
| Rules/Logic | Manual
|
|
360
|
-
| TypeScript
|
|
372
|
+
| Feature | Svelte Stores | Praxis |
|
|
373
|
+
| ----------- | ------------- | --------- |
|
|
374
|
+
| Simplicity | Very High | High |
|
|
375
|
+
| Structure | Manual | Built-in |
|
|
376
|
+
| Time-Travel | Manual | Built-in |
|
|
377
|
+
| Rules/Logic | Manual | Built-in |
|
|
378
|
+
| TypeScript | Good | Excellent |
|
|
361
379
|
|
|
362
380
|
## Next Steps
|
|
363
381
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Advanced Svelte 5 Integration Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Demonstrates the new Svelte 5 runes support with history state pattern.
|
|
5
5
|
* This example shows a todo app with undo/redo and time-travel debugging.
|
|
6
6
|
*/
|
|
@@ -254,8 +254,8 @@ function runExample() {
|
|
|
254
254
|
|
|
255
255
|
// Change filter
|
|
256
256
|
console.log('3. Filtering to active todos:');
|
|
257
|
-
engine.step([SetFilter.create({ filter: 'active' })])
|
|
258
|
-
|
|
257
|
+
engine.step([SetFilter.create({ filter: 'active' })]);
|
|
258
|
+
|
|
259
259
|
const context3 = engine.getContext();
|
|
260
260
|
const filtered = getFilteredTodos(context3.todos, context3.filter);
|
|
261
261
|
console.log(` Filter: ${context3.filter}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auth Basic Example
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Demonstrates basic authentication logic with login/logout using Praxis.
|
|
5
5
|
* Shows how to define facts, events, rules, and constraints.
|
|
6
6
|
*/
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
defineConstraint,
|
|
15
15
|
findEvent,
|
|
16
16
|
filterFacts,
|
|
17
|
-
} from
|
|
17
|
+
} from '../../index.js';
|
|
18
18
|
|
|
19
19
|
// Define the context type
|
|
20
20
|
interface AuthContext {
|
|
@@ -23,21 +23,21 @@ interface AuthContext {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
// Define facts
|
|
26
|
-
const UserLoggedIn = defineFact<
|
|
27
|
-
|
|
26
|
+
const UserLoggedIn = defineFact<'UserLoggedIn', { userId: string; timestamp: number }>(
|
|
27
|
+
'UserLoggedIn'
|
|
28
28
|
);
|
|
29
|
-
const UserLoggedOut = defineFact<
|
|
30
|
-
|
|
29
|
+
const UserLoggedOut = defineFact<'UserLoggedOut', { userId: string; timestamp: number }>(
|
|
30
|
+
'UserLoggedOut'
|
|
31
31
|
);
|
|
32
32
|
|
|
33
33
|
// Define events
|
|
34
|
-
const Login = defineEvent<
|
|
35
|
-
const Logout = defineEvent<
|
|
34
|
+
const Login = defineEvent<'LOGIN', { username: string; password: string }>('LOGIN');
|
|
35
|
+
const Logout = defineEvent<'LOGOUT', {}>('LOGOUT');
|
|
36
36
|
|
|
37
37
|
// Define rules
|
|
38
38
|
const loginRule = defineRule<AuthContext>({
|
|
39
|
-
id:
|
|
40
|
-
description:
|
|
39
|
+
id: 'auth.login',
|
|
40
|
+
description: 'Process login event and create UserLoggedIn fact',
|
|
41
41
|
impl: (_state, events) => {
|
|
42
42
|
const loginEvent = findEvent(events, Login);
|
|
43
43
|
if (!loginEvent) {
|
|
@@ -51,8 +51,8 @@ const loginRule = defineRule<AuthContext>({
|
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
const logoutRule = defineRule<AuthContext>({
|
|
54
|
-
id:
|
|
55
|
-
description:
|
|
54
|
+
id: 'auth.logout',
|
|
55
|
+
description: 'Process logout event and create UserLoggedOut fact',
|
|
56
56
|
impl: (state, events) => {
|
|
57
57
|
const logoutEvent = findEvent(events, Logout);
|
|
58
58
|
if (!logoutEvent || !state.context.currentUser) {
|
|
@@ -69,8 +69,8 @@ const logoutRule = defineRule<AuthContext>({
|
|
|
69
69
|
});
|
|
70
70
|
|
|
71
71
|
const updateContextRule = defineRule<AuthContext>({
|
|
72
|
-
id:
|
|
73
|
-
description:
|
|
72
|
+
id: 'auth.updateContext',
|
|
73
|
+
description: 'Update context based on login/logout facts',
|
|
74
74
|
impl: (state, _events) => {
|
|
75
75
|
// This rule updates context based on facts (side effect on context)
|
|
76
76
|
const loginFacts = filterFacts(state.facts, UserLoggedIn);
|
|
@@ -95,8 +95,8 @@ const updateContextRule = defineRule<AuthContext>({
|
|
|
95
95
|
|
|
96
96
|
// Define constraints
|
|
97
97
|
const singleSessionConstraint = defineConstraint<AuthContext>({
|
|
98
|
-
id:
|
|
99
|
-
description:
|
|
98
|
+
id: 'auth.singleSession',
|
|
99
|
+
description: 'Only one user can be logged in at a time',
|
|
100
100
|
impl: (state) => {
|
|
101
101
|
const loginFacts = filterFacts(state.facts, UserLoggedIn);
|
|
102
102
|
const logoutFacts = filterFacts(state.facts, UserLoggedOut);
|
|
@@ -127,31 +127,31 @@ function createAuthEngine() {
|
|
|
127
127
|
|
|
128
128
|
// Example usage
|
|
129
129
|
function runExample() {
|
|
130
|
-
console.log(
|
|
130
|
+
console.log('=== Auth Basic Example ===\n');
|
|
131
131
|
|
|
132
132
|
const engine = createAuthEngine();
|
|
133
133
|
|
|
134
134
|
// Login
|
|
135
|
-
console.log(
|
|
136
|
-
let result = engine.step([Login.create({ username:
|
|
137
|
-
console.log(
|
|
138
|
-
console.log(
|
|
139
|
-
console.log(
|
|
135
|
+
console.log('1. User logs in:');
|
|
136
|
+
let result = engine.step([Login.create({ username: 'alice', password: 'secret123' })]);
|
|
137
|
+
console.log(' Context:', engine.getContext());
|
|
138
|
+
console.log(' Facts:', result.state.facts);
|
|
139
|
+
console.log(' Diagnostics:', result.diagnostics);
|
|
140
140
|
console.log();
|
|
141
141
|
|
|
142
142
|
// Try to login again (should violate constraint)
|
|
143
|
-
console.log(
|
|
144
|
-
result = engine.step([Login.create({ username:
|
|
145
|
-
console.log(
|
|
146
|
-
console.log(
|
|
143
|
+
console.log('2. Another user tries to log in:');
|
|
144
|
+
result = engine.step([Login.create({ username: 'bob', password: 'secret456' })]);
|
|
145
|
+
console.log(' Context:', engine.getContext());
|
|
146
|
+
console.log(' Diagnostics:', result.diagnostics);
|
|
147
147
|
console.log();
|
|
148
148
|
|
|
149
149
|
// Logout
|
|
150
|
-
console.log(
|
|
150
|
+
console.log('3. User logs out:');
|
|
151
151
|
result = engine.step([Logout.create({})]);
|
|
152
|
-
console.log(
|
|
153
|
-
console.log(
|
|
154
|
-
console.log(
|
|
152
|
+
console.log(' Context:', engine.getContext());
|
|
153
|
+
console.log(' Facts (last 3):', result.state.facts.slice(-3));
|
|
154
|
+
console.log(' Diagnostics:', result.diagnostics);
|
|
155
155
|
console.log();
|
|
156
156
|
}
|
|
157
157
|
|