@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
|
@@ -7,6 +7,7 @@ Praxis is a **schema-driven application framework** that unifies data modeling,
|
|
|
7
7
|
### 1. Schema as Single Source of Truth
|
|
8
8
|
|
|
9
9
|
In Praxis, everything starts with a schema. The **Praxis Schema Format (PSF)** defines your:
|
|
10
|
+
|
|
10
11
|
- Data models and relationships
|
|
11
12
|
- Business logic (facts, events, rules, constraints)
|
|
12
13
|
- UI components and their behavior
|
|
@@ -14,6 +15,7 @@ In Praxis, everything starts with a schema. The **Praxis Schema Format (PSF)** d
|
|
|
14
15
|
- Documentation and diagrams
|
|
15
16
|
|
|
16
17
|
From this single schema, Praxis generates:
|
|
18
|
+
|
|
17
19
|
- TypeScript types and interfaces
|
|
18
20
|
- Svelte UI components
|
|
19
21
|
- Database schemas for PluresDB
|
|
@@ -23,12 +25,14 @@ From this single schema, Praxis generates:
|
|
|
23
25
|
### 2. Pure, Functional Logic
|
|
24
26
|
|
|
25
27
|
The Praxis logic engine is built on pure functions:
|
|
28
|
+
|
|
26
29
|
- **Facts**: Typed propositions about your domain ("User is logged in", "Cart contains 3 items")
|
|
27
30
|
- **Events**: Things that happen ("User clicked login", "Item added to cart")
|
|
28
31
|
- **Rules**: Pure functions that derive facts from events
|
|
29
32
|
- **Constraints**: Invariants that must always hold
|
|
30
33
|
|
|
31
34
|
This makes your application logic:
|
|
35
|
+
|
|
32
36
|
- Predictable and testable
|
|
33
37
|
- Serializable (JSON-friendly for cross-language support)
|
|
34
38
|
- Easy to reason about and debug
|
|
@@ -36,6 +40,7 @@ This makes your application logic:
|
|
|
36
40
|
### 3. Local-First by Default
|
|
37
41
|
|
|
38
42
|
Praxis applications work offline first:
|
|
43
|
+
|
|
39
44
|
- Data stored locally in PluresDB
|
|
40
45
|
- Changes sync when connected
|
|
41
46
|
- Conflict resolution built-in
|
|
@@ -44,6 +49,7 @@ Praxis applications work offline first:
|
|
|
44
49
|
### 4. Visual and Code Workflows
|
|
45
50
|
|
|
46
51
|
Praxis supports both visual and code-based development:
|
|
52
|
+
|
|
47
53
|
- **CodeCanvas**: Visual schema and logic editor
|
|
48
54
|
- **Code-first**: Write TypeScript schemas directly
|
|
49
55
|
- **Bidirectional sync**: Changes in either flow back to the other
|
|
@@ -55,36 +61,36 @@ flowchart LR
|
|
|
55
61
|
subgraph Define["1. Define Schema"]
|
|
56
62
|
PSF[schema.psf.json]
|
|
57
63
|
end
|
|
58
|
-
|
|
64
|
+
|
|
59
65
|
subgraph Generate["2. Generate Code"]
|
|
60
66
|
Types[Types]
|
|
61
67
|
Components[Components]
|
|
62
68
|
Logic[Logic]
|
|
63
69
|
Docs[Docs]
|
|
64
70
|
end
|
|
65
|
-
|
|
71
|
+
|
|
66
72
|
subgraph Build["3. Build App"]
|
|
67
73
|
UI[UI Layer]
|
|
68
74
|
Engine[Logic Engine]
|
|
69
75
|
Data[Data Layer]
|
|
70
76
|
end
|
|
71
|
-
|
|
77
|
+
|
|
72
78
|
subgraph Deploy["4. Deploy"]
|
|
73
79
|
Web[Web]
|
|
74
80
|
Desktop[Desktop]
|
|
75
81
|
Mobile[Mobile]
|
|
76
82
|
end
|
|
77
|
-
|
|
83
|
+
|
|
78
84
|
PSF --> Types
|
|
79
85
|
PSF --> Components
|
|
80
86
|
PSF --> Logic
|
|
81
87
|
PSF --> Docs
|
|
82
|
-
|
|
88
|
+
|
|
83
89
|
Types --> UI
|
|
84
90
|
Components --> UI
|
|
85
91
|
Logic --> Engine
|
|
86
92
|
Types --> Data
|
|
87
|
-
|
|
93
|
+
|
|
88
94
|
UI --> Web
|
|
89
95
|
UI --> Desktop
|
|
90
96
|
UI --> Mobile
|
|
@@ -162,6 +168,7 @@ console.log(engine.getContext()); // { count: 1 }
|
|
|
162
168
|
### Praxis Schema Format (PSF)
|
|
163
169
|
|
|
164
170
|
The JSON/AST format that defines your application:
|
|
171
|
+
|
|
165
172
|
- Version-controlled and diff-friendly
|
|
166
173
|
- Human-readable and machine-parseable
|
|
167
174
|
- Supports composition and inheritance
|
|
@@ -170,6 +177,7 @@ The JSON/AST format that defines your application:
|
|
|
170
177
|
### Logic Engine
|
|
171
178
|
|
|
172
179
|
The pure functional core:
|
|
180
|
+
|
|
173
181
|
- Processes events to produce facts
|
|
174
182
|
- Maintains immutable state
|
|
175
183
|
- Supports undo/redo and time-travel
|
|
@@ -178,6 +186,7 @@ The pure functional core:
|
|
|
178
186
|
### Component Factory
|
|
179
187
|
|
|
180
188
|
Generates Svelte components:
|
|
189
|
+
|
|
181
190
|
- Form components with validation
|
|
182
191
|
- List and display components
|
|
183
192
|
- Navigation components
|
|
@@ -186,6 +195,7 @@ Generates Svelte components:
|
|
|
186
195
|
### PluresDB Integration
|
|
187
196
|
|
|
188
197
|
Local-first data layer:
|
|
198
|
+
|
|
189
199
|
- Reactive queries and subscriptions
|
|
190
200
|
- Automatic sync with conflict resolution
|
|
191
201
|
- Event sourcing support
|
|
@@ -194,6 +204,7 @@ Local-first data layer:
|
|
|
194
204
|
### CodeCanvas
|
|
195
205
|
|
|
196
206
|
Visual development environment:
|
|
207
|
+
|
|
197
208
|
- Drag-and-drop schema design
|
|
198
209
|
- Logic flow visualization
|
|
199
210
|
- Live component preview
|
|
@@ -202,35 +213,41 @@ Visual development environment:
|
|
|
202
213
|
## Use Cases
|
|
203
214
|
|
|
204
215
|
### Web Applications
|
|
216
|
+
|
|
205
217
|
Build modern single-page applications with reactive data and offline support.
|
|
206
218
|
|
|
207
219
|
### Desktop Applications
|
|
220
|
+
|
|
208
221
|
Use Tauri to create cross-platform desktop apps from the same codebase.
|
|
209
222
|
|
|
210
223
|
### Mobile Applications
|
|
224
|
+
|
|
211
225
|
Deploy to mobile with Svelte Native or Tauri Mobile.
|
|
212
226
|
|
|
213
227
|
### Distributed Systems
|
|
228
|
+
|
|
214
229
|
Coordinate multiple nodes with built-in DSC/MCP orchestration.
|
|
215
230
|
|
|
216
231
|
### Knowledge Management
|
|
232
|
+
|
|
217
233
|
Create interconnected data systems with PluresDB relationships.
|
|
218
234
|
|
|
219
235
|
## Comparison
|
|
220
236
|
|
|
221
|
-
| Feature
|
|
222
|
-
|
|
223
|
-
| Schema-driven
|
|
224
|
-
| Logic engine
|
|
225
|
-
| UI generation
|
|
226
|
-
| Local-first
|
|
227
|
-
| Visual editor
|
|
228
|
-
| Cross-language | ✅
|
|
229
|
-
| Auto-docs
|
|
237
|
+
| Feature | Praxis | Traditional MVC | Redux | XState |
|
|
238
|
+
| -------------- | ------ | --------------- | ----- | ------ |
|
|
239
|
+
| Schema-driven | ✅ | ❌ | ❌ | ❌ |
|
|
240
|
+
| Logic engine | ✅ | ❌ | ✅ | ✅ |
|
|
241
|
+
| UI generation | ✅ | ❌ | ❌ | ❌ |
|
|
242
|
+
| Local-first | ✅ | ❌ | ❌ | ❌ |
|
|
243
|
+
| Visual editor | ✅ | ❌ | ❌ | ✅ |
|
|
244
|
+
| Cross-language | ✅ | ❌ | ❌ | ❌ |
|
|
245
|
+
| Auto-docs | ✅ | ❌ | ❌ | ❌ |
|
|
230
246
|
|
|
231
247
|
## Getting Started
|
|
232
248
|
|
|
233
249
|
Ready to build with Praxis? Check out:
|
|
250
|
+
|
|
234
251
|
- [Getting Started Guide](../guides/getting-started.md)
|
|
235
252
|
- [Schema Model](./schema-model.md)
|
|
236
253
|
- [Example Applications](../../examples/)
|
package/docs/guides/canvas.md
CHANGED
|
@@ -5,6 +5,7 @@ CodeCanvas is the visual IDE for the Praxis framework. It provides a graphical i
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
7
|
CodeCanvas enables:
|
|
8
|
+
|
|
8
9
|
- **Visual Schema Design**: Drag-and-drop model and component design
|
|
9
10
|
- **Logic Flow Editor**: Build rules and state machines visually
|
|
10
11
|
- **Component Preview**: See generated components in real-time
|
|
@@ -36,6 +37,7 @@ praxis canvas --new
|
|
|
36
37
|
### 1. Schema Editor
|
|
37
38
|
|
|
38
39
|
**Model Designer**:
|
|
40
|
+
|
|
39
41
|
- Drag models onto canvas
|
|
40
42
|
- Define fields with visual editor
|
|
41
43
|
- Set relationships between models
|
|
@@ -43,6 +45,7 @@ praxis canvas --new
|
|
|
43
45
|
- Preview generated PluresDB schema
|
|
44
46
|
|
|
45
47
|
**Component Designer**:
|
|
48
|
+
|
|
46
49
|
- Create components from templates
|
|
47
50
|
- Bind components to models
|
|
48
51
|
- Configure props and events
|
|
@@ -52,6 +55,7 @@ praxis canvas --new
|
|
|
52
55
|
### 2. Logic Flow Editor
|
|
53
56
|
|
|
54
57
|
**Flow Canvas**:
|
|
58
|
+
|
|
55
59
|
- Visual state machine designer
|
|
56
60
|
- Connect facts, events, and rules
|
|
57
61
|
- Define transitions with conditions
|
|
@@ -59,6 +63,7 @@ praxis canvas --new
|
|
|
59
63
|
- Export to Praxis logic code
|
|
60
64
|
|
|
61
65
|
**Rule Builder**:
|
|
66
|
+
|
|
62
67
|
- Visual rule editor
|
|
63
68
|
- Condition builder with drag-and-drop
|
|
64
69
|
- Action designer
|
|
@@ -68,6 +73,7 @@ praxis canvas --new
|
|
|
68
73
|
### 3. Component Preview
|
|
69
74
|
|
|
70
75
|
**Live Preview**:
|
|
76
|
+
|
|
71
77
|
- Real-time component rendering
|
|
72
78
|
- Interactive component testing
|
|
73
79
|
- Props editor
|
|
@@ -75,6 +81,7 @@ praxis canvas --new
|
|
|
75
81
|
- Responsive preview modes
|
|
76
82
|
|
|
77
83
|
**Code Sync**:
|
|
84
|
+
|
|
78
85
|
- Two-way sync with files
|
|
79
86
|
- Live reload on changes
|
|
80
87
|
- Conflict resolution
|
|
@@ -83,6 +90,7 @@ praxis canvas --new
|
|
|
83
90
|
### 4. Orchestration View
|
|
84
91
|
|
|
85
92
|
**System Topology**:
|
|
93
|
+
|
|
86
94
|
- Node visualization
|
|
87
95
|
- Connection mapping
|
|
88
96
|
- State distribution view
|
|
@@ -90,6 +98,7 @@ praxis canvas --new
|
|
|
90
98
|
- Performance metrics
|
|
91
99
|
|
|
92
100
|
**DSC Designer**:
|
|
101
|
+
|
|
93
102
|
- Visual DSC configuration
|
|
94
103
|
- Node role assignment
|
|
95
104
|
- State sync configuration
|
|
@@ -98,6 +107,7 @@ praxis canvas --new
|
|
|
98
107
|
### 5. Documentation Browser
|
|
99
108
|
|
|
100
109
|
**Interactive Docs**:
|
|
110
|
+
|
|
101
111
|
- Schema documentation
|
|
102
112
|
- API reference
|
|
103
113
|
- Component catalog
|
|
@@ -143,11 +153,11 @@ export const config: CanvasConfig = {
|
|
|
143
153
|
// Server settings
|
|
144
154
|
port: 3000,
|
|
145
155
|
host: 'localhost',
|
|
146
|
-
|
|
156
|
+
|
|
147
157
|
// Editor settings
|
|
148
158
|
mode: 'edit', // 'edit' | 'view' | 'present'
|
|
149
159
|
theme: 'dark', // 'light' | 'dark' | 'auto'
|
|
150
|
-
|
|
160
|
+
|
|
151
161
|
// Features
|
|
152
162
|
features: {
|
|
153
163
|
collaboration: true,
|
|
@@ -155,21 +165,21 @@ export const config: CanvasConfig = {
|
|
|
155
165
|
versionHistory: true,
|
|
156
166
|
aiAssist: false,
|
|
157
167
|
},
|
|
158
|
-
|
|
168
|
+
|
|
159
169
|
// Preview settings
|
|
160
170
|
preview: {
|
|
161
171
|
autoRefresh: true,
|
|
162
172
|
refreshInterval: 1000,
|
|
163
173
|
iframe: true,
|
|
164
174
|
},
|
|
165
|
-
|
|
175
|
+
|
|
166
176
|
// Code sync
|
|
167
177
|
sync: {
|
|
168
178
|
enabled: true,
|
|
169
179
|
watchFiles: true,
|
|
170
180
|
conflictResolution: 'ask', // 'ask' | 'canvas' | 'code'
|
|
171
181
|
},
|
|
172
|
-
|
|
182
|
+
|
|
173
183
|
// Export settings
|
|
174
184
|
export: {
|
|
175
185
|
format: 'typescript',
|
|
@@ -263,6 +273,7 @@ code --install-extension plures.praxis-canvas
|
|
|
263
273
|
```
|
|
264
274
|
|
|
265
275
|
Features:
|
|
276
|
+
|
|
266
277
|
- Open Canvas from editor
|
|
267
278
|
- Inline previews
|
|
268
279
|
- Quick navigation
|
|
@@ -273,6 +284,7 @@ Features:
|
|
|
273
284
|
### Canvas won't start
|
|
274
285
|
|
|
275
286
|
Check:
|
|
287
|
+
|
|
276
288
|
- Port 3000 is available
|
|
277
289
|
- Schema file path is correct
|
|
278
290
|
- Dependencies are installed
|
|
@@ -280,6 +292,7 @@ Check:
|
|
|
280
292
|
### Changes not syncing
|
|
281
293
|
|
|
282
294
|
Solutions:
|
|
295
|
+
|
|
283
296
|
- Enable sync in config
|
|
284
297
|
- Check file permissions
|
|
285
298
|
- Restart Canvas with `--force-sync`
|
|
@@ -287,6 +300,7 @@ Solutions:
|
|
|
287
300
|
### Preview not updating
|
|
288
301
|
|
|
289
302
|
Try:
|
|
303
|
+
|
|
290
304
|
- Clear browser cache
|
|
291
305
|
- Disable ad blockers
|
|
292
306
|
- Check preview refresh settings
|
|
@@ -336,6 +350,7 @@ features: {
|
|
|
336
350
|
```
|
|
337
351
|
|
|
338
352
|
AI can:
|
|
353
|
+
|
|
339
354
|
- Suggest models from descriptions
|
|
340
355
|
- Generate rules from natural language
|
|
341
356
|
- Optimize logic flows
|
|
@@ -358,6 +373,7 @@ praxis export --source canvas --format typescript
|
|
|
358
373
|
### Export Diagrams
|
|
359
374
|
|
|
360
375
|
Export visual diagrams:
|
|
376
|
+
|
|
361
377
|
- PNG/SVG for documentation
|
|
362
378
|
- Mermaid for markdown
|
|
363
379
|
- DOT for Graphviz
|
|
@@ -5,6 +5,7 @@ Welcome to Praxis, the full-stack application framework for the Plures ecosystem
|
|
|
5
5
|
## What is Praxis?
|
|
6
6
|
|
|
7
7
|
Praxis is a **schema-driven framework** that unifies:
|
|
8
|
+
|
|
8
9
|
- **Logic Engine**: Facts, events, rules, and constraints for business logic
|
|
9
10
|
- **Component Generation**: Auto-generate UI from schemas
|
|
10
11
|
- **Local-First Data**: PluresDB for reactive, offline-capable storage
|
|
@@ -28,6 +29,7 @@ npm install -g @plures/praxis
|
|
|
28
29
|
```
|
|
29
30
|
|
|
30
31
|
Verify installation:
|
|
32
|
+
|
|
31
33
|
```bash
|
|
32
34
|
praxis --version
|
|
33
35
|
```
|
|
@@ -43,6 +45,7 @@ npm install
|
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
This creates a basic Praxis app with:
|
|
48
|
+
|
|
46
49
|
- Schema setup
|
|
47
50
|
- Logic engine configuration
|
|
48
51
|
- Svelte UI scaffolding
|
|
@@ -76,7 +79,7 @@ export const appSchema: PraxisSchema = {
|
|
|
76
79
|
version: '1.0.0',
|
|
77
80
|
name: 'MyFirstApp',
|
|
78
81
|
description: 'My first Praxis application',
|
|
79
|
-
|
|
82
|
+
|
|
80
83
|
// Define data models
|
|
81
84
|
models: [
|
|
82
85
|
{
|
|
@@ -88,12 +91,10 @@ export const appSchema: PraxisSchema = {
|
|
|
88
91
|
{ name: 'completed', type: 'boolean', default: false },
|
|
89
92
|
{ name: 'createdAt', type: 'date' },
|
|
90
93
|
],
|
|
91
|
-
indexes: [
|
|
92
|
-
{ name: 'by_created', fields: ['createdAt'] },
|
|
93
|
-
],
|
|
94
|
+
indexes: [{ name: 'by_created', fields: ['createdAt'] }],
|
|
94
95
|
},
|
|
95
96
|
],
|
|
96
|
-
|
|
97
|
+
|
|
97
98
|
// Define UI components
|
|
98
99
|
components: [
|
|
99
100
|
{
|
|
@@ -109,7 +110,7 @@ export const appSchema: PraxisSchema = {
|
|
|
109
110
|
description: 'List of all tasks',
|
|
110
111
|
},
|
|
111
112
|
],
|
|
112
|
-
|
|
113
|
+
|
|
113
114
|
// Define business logic
|
|
114
115
|
logic: [
|
|
115
116
|
{
|
|
@@ -168,6 +169,7 @@ praxis generate --schema src/schemas/app.schema.ts
|
|
|
168
169
|
```
|
|
169
170
|
|
|
170
171
|
This generates:
|
|
172
|
+
|
|
171
173
|
- `src/components/TaskForm.svelte` - Form component
|
|
172
174
|
- `src/components/TaskList.svelte` - List component
|
|
173
175
|
- `src/logic/facts.ts` - Fact definitions
|
|
@@ -213,7 +215,7 @@ Edit `src/App.svelte`:
|
|
|
213
215
|
import { engine } from './logic/engine';
|
|
214
216
|
import TaskForm from './components/TaskForm.svelte';
|
|
215
217
|
import TaskList from './components/TaskList.svelte';
|
|
216
|
-
|
|
218
|
+
|
|
217
219
|
const store = createPraxisStore(engine);
|
|
218
220
|
</script>
|
|
219
221
|
|
|
@@ -245,6 +247,7 @@ Open http://localhost:5173 to see your app!
|
|
|
245
247
|
### Schemas
|
|
246
248
|
|
|
247
249
|
Schemas are the single source of truth. They define:
|
|
250
|
+
|
|
248
251
|
- **Models**: Data structures and relationships
|
|
249
252
|
- **Components**: UI elements and their behavior
|
|
250
253
|
- **Logic**: Facts, events, rules, and constraints
|
|
@@ -253,6 +256,7 @@ Schemas are the single source of truth. They define:
|
|
|
253
256
|
### Logic Engine
|
|
254
257
|
|
|
255
258
|
The Praxis logic engine processes:
|
|
259
|
+
|
|
256
260
|
- **Events**: Things that happen (user actions, external triggers)
|
|
257
261
|
- **Facts**: Derived information about the domain
|
|
258
262
|
- **Rules**: Pure functions that transform events into facts
|
|
@@ -261,6 +265,7 @@ The Praxis logic engine processes:
|
|
|
261
265
|
### Component Generation
|
|
262
266
|
|
|
263
267
|
Components are generated from schemas but can be customized:
|
|
268
|
+
|
|
264
269
|
- Generated components provide scaffolding
|
|
265
270
|
- Extend with custom behavior and styling
|
|
266
271
|
- Regenerate safely (customizations preserved in separate files)
|
|
@@ -268,6 +273,7 @@ Components are generated from schemas but can be customized:
|
|
|
268
273
|
### Local-First Data
|
|
269
274
|
|
|
270
275
|
PluresDB provides:
|
|
276
|
+
|
|
271
277
|
- Reactive data storage
|
|
272
278
|
- Offline operation
|
|
273
279
|
- Automatic sync when connected
|
|
@@ -63,7 +63,9 @@ interface AppContext {
|
|
|
63
63
|
page: string;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
const engine = createPraxisEngine<AppContext>({
|
|
66
|
+
const engine = createPraxisEngine<AppContext>({
|
|
67
|
+
/* ... */
|
|
68
|
+
});
|
|
67
69
|
const history = new HistoryStateManager<AppContext>(100);
|
|
68
70
|
|
|
69
71
|
// Record initial state
|
|
@@ -174,12 +176,12 @@ Praxis provides first-class Svelte 5 support with runes:
|
|
|
174
176
|
import { createMyEngine, Login, Logout } from './my-engine';
|
|
175
177
|
|
|
176
178
|
const engine = createMyEngine();
|
|
177
|
-
const {
|
|
178
|
-
context,
|
|
179
|
-
dispatch,
|
|
180
|
-
undo,
|
|
181
|
-
redo,
|
|
182
|
-
canUndo,
|
|
179
|
+
const {
|
|
180
|
+
context,
|
|
181
|
+
dispatch,
|
|
182
|
+
undo,
|
|
183
|
+
redo,
|
|
184
|
+
canUndo,
|
|
183
185
|
canRedo,
|
|
184
186
|
snapshots,
|
|
185
187
|
historyIndex
|
|
@@ -226,13 +228,13 @@ Praxis provides first-class Svelte 5 support with runes:
|
|
|
226
228
|
import { createMyEngine } from './my-engine';
|
|
227
229
|
|
|
228
230
|
const engine = createMyEngine();
|
|
229
|
-
const { context, snapshots, goToSnapshot, historyIndex } =
|
|
231
|
+
const { context, snapshots, goToSnapshot, historyIndex } =
|
|
230
232
|
usePraxisEngine(engine, { enableHistory: true });
|
|
231
233
|
</script>
|
|
232
234
|
|
|
233
235
|
<div class="debugger">
|
|
234
236
|
<h2>Time-Travel Debugger</h2>
|
|
235
|
-
|
|
237
|
+
|
|
236
238
|
<div class="timeline">
|
|
237
239
|
{#each snapshots as snapshot, index}
|
|
238
240
|
<button
|
|
@@ -277,27 +279,39 @@ interface AuthContext {
|
|
|
277
279
|
}
|
|
278
280
|
|
|
279
281
|
// Define facts
|
|
280
|
-
const UserAuthenticated = defineFact<
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
const UserAuthenticated = defineFact<
|
|
283
|
+
'UserAuthenticated',
|
|
284
|
+
{
|
|
285
|
+
userId: string;
|
|
286
|
+
name: string;
|
|
287
|
+
}
|
|
288
|
+
>('UserAuthenticated');
|
|
284
289
|
|
|
285
|
-
const NavigatedToPage = defineFact<
|
|
286
|
-
|
|
287
|
-
|
|
290
|
+
const NavigatedToPage = defineFact<
|
|
291
|
+
'NavigatedToPage',
|
|
292
|
+
{
|
|
293
|
+
page: string;
|
|
294
|
+
}
|
|
295
|
+
>('NavigatedToPage');
|
|
288
296
|
|
|
289
297
|
// Define events
|
|
290
|
-
const Login = defineEvent<
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
298
|
+
const Login = defineEvent<
|
|
299
|
+
'LOGIN',
|
|
300
|
+
{
|
|
301
|
+
username: string;
|
|
302
|
+
password: string;
|
|
303
|
+
}
|
|
304
|
+
>('LOGIN');
|
|
294
305
|
|
|
295
306
|
const Logout = defineEvent<'LOGOUT', {}>('LOGOUT');
|
|
296
307
|
|
|
297
|
-
const NavigateTo = defineEvent<
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
308
|
+
const NavigateTo = defineEvent<
|
|
309
|
+
'NAVIGATE_TO',
|
|
310
|
+
{
|
|
311
|
+
page: string;
|
|
312
|
+
requiresAuth?: boolean;
|
|
313
|
+
}
|
|
314
|
+
>('NAVIGATE_TO');
|
|
301
315
|
|
|
302
316
|
// Define rules
|
|
303
317
|
const loginRule = defineRule<AuthContext>({
|
|
@@ -317,9 +331,7 @@ const loginRule = defineRule<AuthContext>({
|
|
|
317
331
|
state.context.attemptedSecurePage = null;
|
|
318
332
|
}
|
|
319
333
|
|
|
320
|
-
return [
|
|
321
|
-
UserAuthenticated.create({ userId: username, name: username })
|
|
322
|
-
];
|
|
334
|
+
return [UserAuthenticated.create({ userId: username, name: username })];
|
|
323
335
|
},
|
|
324
336
|
});
|
|
325
337
|
|
|
@@ -394,9 +406,9 @@ export { Login, Logout, NavigateTo };
|
|
|
394
406
|
});
|
|
395
407
|
|
|
396
408
|
function login() {
|
|
397
|
-
dispatch([Login.create({
|
|
398
|
-
username: 'alice',
|
|
399
|
-
password: 'secret123'
|
|
409
|
+
dispatch([Login.create({
|
|
410
|
+
username: 'alice',
|
|
411
|
+
password: 'secret123'
|
|
400
412
|
})], 'User Login');
|
|
401
413
|
}
|
|
402
414
|
|
|
@@ -405,16 +417,16 @@ export { Login, Logout, NavigateTo };
|
|
|
405
417
|
}
|
|
406
418
|
|
|
407
419
|
function goToProfile() {
|
|
408
|
-
dispatch([NavigateTo.create({
|
|
409
|
-
page: 'profile',
|
|
410
|
-
requiresAuth: true
|
|
420
|
+
dispatch([NavigateTo.create({
|
|
421
|
+
page: 'profile',
|
|
422
|
+
requiresAuth: true
|
|
411
423
|
})], 'Navigate to Profile');
|
|
412
424
|
}
|
|
413
425
|
|
|
414
426
|
function returnToPrevious() {
|
|
415
427
|
if (context.previousPage) {
|
|
416
|
-
dispatch([NavigateTo.create({
|
|
417
|
-
page: context.previousPage
|
|
428
|
+
dispatch([NavigateTo.create({
|
|
429
|
+
page: context.previousPage
|
|
418
430
|
})], 'Return to Previous Page');
|
|
419
431
|
} else if (canUndo) {
|
|
420
432
|
undo();
|
|
@@ -506,7 +518,7 @@ function handleLogout() {
|
|
|
506
518
|
// Clear when starting new workflow
|
|
507
519
|
function startNewProject() {
|
|
508
520
|
historyEngine.clearHistory();
|
|
509
|
-
historyEngine.dispatch([CreateProject.create({})],'New Project');
|
|
521
|
+
historyEngine.dispatch([CreateProject.create({})], 'New Project');
|
|
510
522
|
}
|
|
511
523
|
```
|
|
512
524
|
|
|
@@ -516,10 +528,10 @@ function startNewProject() {
|
|
|
516
528
|
interface AppContext {
|
|
517
529
|
// Application state
|
|
518
530
|
user: User | null;
|
|
519
|
-
|
|
531
|
+
|
|
520
532
|
// Built-in history tracking in context
|
|
521
533
|
navigationHistory: string[];
|
|
522
|
-
|
|
534
|
+
|
|
523
535
|
// Previous state for quick back
|
|
524
536
|
previousView: string | null;
|
|
525
537
|
}
|
|
@@ -530,11 +542,11 @@ const navigationRule = defineRule<AppContext>({
|
|
|
530
542
|
impl: (state, events) => {
|
|
531
543
|
const nav = findEvent(events, Navigate);
|
|
532
544
|
if (!nav) return [];
|
|
533
|
-
|
|
545
|
+
|
|
534
546
|
state.context.previousView = state.context.currentView;
|
|
535
547
|
state.context.navigationHistory.push(nav.payload.page);
|
|
536
548
|
state.context.currentView = nav.payload.page;
|
|
537
|
-
|
|
549
|
+
|
|
538
550
|
return [];
|
|
539
551
|
},
|
|
540
552
|
});
|
|
@@ -571,13 +583,13 @@ const errorRecoveryRule = defineRule<AppContext>({
|
|
|
571
583
|
impl: (state, events) => {
|
|
572
584
|
const error = findEvent(events, ErrorOccurred);
|
|
573
585
|
if (!error) return [];
|
|
574
|
-
|
|
586
|
+
|
|
575
587
|
// Log error with context
|
|
576
588
|
console.error('Error at state:', state.context);
|
|
577
|
-
|
|
589
|
+
|
|
578
590
|
// You can use history to diagnose or recover
|
|
579
591
|
// historyEngine.undo() to revert to last good state
|
|
580
|
-
|
|
592
|
+
|
|
581
593
|
return [ErrorLogged.create({ error: error.payload })];
|
|
582
594
|
},
|
|
583
595
|
});
|
|
@@ -585,14 +597,14 @@ const errorRecoveryRule = defineRule<AppContext>({
|
|
|
585
597
|
|
|
586
598
|
## Comparison with XState
|
|
587
599
|
|
|
588
|
-
| Feature
|
|
589
|
-
|
|
590
|
-
| **Built-in History States** | ✅ Native support
|
|
591
|
-
| **History Types**
|
|
592
|
-
| **Time-Travel**
|
|
593
|
-
| **Undo/Redo**
|
|
594
|
-
| **Snapshot Support**
|
|
595
|
-
| **History Size Limits**
|
|
600
|
+
| Feature | XState | Praxis |
|
|
601
|
+
| --------------------------- | --------------------- | ------------------------------------ |
|
|
602
|
+
| **Built-in History States** | ✅ Native support | ✅ Pattern-based implementation |
|
|
603
|
+
| **History Types** | Shallow/Deep | Configurable via HistoryStateManager |
|
|
604
|
+
| **Time-Travel** | Via DevTools | ✅ Built into usePraxisEngine |
|
|
605
|
+
| **Undo/Redo** | Custom implementation | ✅ Built-in with createHistoryEngine |
|
|
606
|
+
| **Snapshot Support** | ✅ Via snapshot() | ✅ Via usePraxisEngine snapshots |
|
|
607
|
+
| **History Size Limits** | Manual | ✅ Automatic with maxHistorySize |
|
|
596
608
|
|
|
597
609
|
## Summary
|
|
598
610
|
|
|
@@ -606,6 +618,7 @@ The history state pattern in Praxis provides:
|
|
|
606
618
|
- ✅ **Auth Flow Support**: Return to previous states after authentication
|
|
607
619
|
|
|
608
620
|
The pattern is designed to be:
|
|
621
|
+
|
|
609
622
|
- **Simple**: Easy to understand and use
|
|
610
623
|
- **Flexible**: Works with any Praxis engine
|
|
611
624
|
- **Performant**: Configurable history limits
|
|
@@ -613,6 +626,7 @@ The pattern is designed to be:
|
|
|
613
626
|
- **Framework-Agnostic**: Use with or without Svelte
|
|
614
627
|
|
|
615
628
|
For more examples, see:
|
|
629
|
+
|
|
616
630
|
- [Svelte Counter Example](/src/examples/svelte-counter/index.ts)
|
|
617
631
|
- [Auth Basic Example](/src/examples/auth-basic/index.ts)
|
|
618
632
|
- [Svelte Integration Tests](/src/__tests__/svelte-integration.test.ts)
|