@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
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Canvas Components Tests
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Tests for the Praxis Canvas Svelte components infrastructure.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { describe, it, expect } from 'vitest';
|
|
8
|
-
import {
|
|
9
|
-
CanvasStateManager,
|
|
8
|
+
import {
|
|
9
|
+
CanvasStateManager,
|
|
10
10
|
createCanvasStateManager,
|
|
11
11
|
type CanvasState,
|
|
12
12
|
type CanvasNodeState,
|
|
13
13
|
} from '../../ui/canvas/canvas-state.js';
|
|
14
|
-
import {
|
|
15
|
-
CanvasProjection,
|
|
14
|
+
import {
|
|
15
|
+
CanvasProjection,
|
|
16
16
|
createCanvasProjection,
|
|
17
17
|
type LayoutResult,
|
|
18
18
|
} from '../../ui/canvas/canvas-projection.js';
|
|
@@ -35,15 +35,26 @@ describe('Canvas State Manager', () => {
|
|
|
35
35
|
{ id: 'event2', tag: 'AddToCart', description: 'Add to cart event', payloadSchema: {} },
|
|
36
36
|
],
|
|
37
37
|
rules: [
|
|
38
|
-
{
|
|
38
|
+
{
|
|
39
|
+
id: 'rule1',
|
|
40
|
+
name: 'Login Rule',
|
|
41
|
+
description: 'Handle login',
|
|
42
|
+
triggers: ['Login'],
|
|
43
|
+
actions: [],
|
|
44
|
+
},
|
|
39
45
|
],
|
|
40
46
|
constraints: [
|
|
41
|
-
{
|
|
47
|
+
{
|
|
48
|
+
id: 'constraint1',
|
|
49
|
+
name: 'Auth Required',
|
|
50
|
+
description: 'User must be authenticated',
|
|
51
|
+
expression: 'true',
|
|
52
|
+
},
|
|
42
53
|
],
|
|
43
54
|
models: [
|
|
44
|
-
{
|
|
45
|
-
id: 'model1',
|
|
46
|
-
name: 'User',
|
|
55
|
+
{
|
|
56
|
+
id: 'model1',
|
|
57
|
+
name: 'User',
|
|
47
58
|
description: 'User model',
|
|
48
59
|
fields: [
|
|
49
60
|
{ name: 'id', type: 'string', required: true },
|
|
@@ -52,7 +63,13 @@ describe('Canvas State Manager', () => {
|
|
|
52
63
|
},
|
|
53
64
|
],
|
|
54
65
|
components: [
|
|
55
|
-
{
|
|
66
|
+
{
|
|
67
|
+
id: 'comp1',
|
|
68
|
+
name: 'UserCard',
|
|
69
|
+
type: 'display',
|
|
70
|
+
model: 'User',
|
|
71
|
+
description: 'User card component',
|
|
72
|
+
},
|
|
56
73
|
],
|
|
57
74
|
flows: [],
|
|
58
75
|
};
|
|
@@ -65,7 +82,7 @@ describe('Canvas State Manager', () => {
|
|
|
65
82
|
it('should have initial state', () => {
|
|
66
83
|
const manager = createCanvasStateManager();
|
|
67
84
|
const state = manager.getState();
|
|
68
|
-
|
|
85
|
+
|
|
69
86
|
expect(state).toBeDefined();
|
|
70
87
|
expect(state.nodes).toBeInstanceOf(Map);
|
|
71
88
|
expect(state.edges).toBeInstanceOf(Map);
|
|
@@ -79,7 +96,7 @@ describe('Canvas State Manager', () => {
|
|
|
79
96
|
const manager = createCanvasStateManager();
|
|
80
97
|
manager.loadFromSchema(testSchema);
|
|
81
98
|
const state = manager.getState();
|
|
82
|
-
|
|
99
|
+
|
|
83
100
|
expect(state.loading).toBe(false);
|
|
84
101
|
// 2 facts + 2 events + 1 rule + 1 constraint + 1 model + 1 component = 8 nodes
|
|
85
102
|
expect(state.nodes.size).toBe(8);
|
|
@@ -89,7 +106,7 @@ describe('Canvas State Manager', () => {
|
|
|
89
106
|
const manager = createCanvasStateManager();
|
|
90
107
|
manager.loadFromSchema(testSchema);
|
|
91
108
|
const state = manager.getState();
|
|
92
|
-
|
|
109
|
+
|
|
93
110
|
const fact1 = state.nodes.get('fact1');
|
|
94
111
|
expect(fact1).toBeDefined();
|
|
95
112
|
expect(fact1?.type).toBe('fact');
|
|
@@ -100,7 +117,7 @@ describe('Canvas State Manager', () => {
|
|
|
100
117
|
const manager = createCanvasStateManager();
|
|
101
118
|
manager.loadFromSchema(testSchema);
|
|
102
119
|
const state = manager.getState();
|
|
103
|
-
|
|
120
|
+
|
|
104
121
|
const event1 = state.nodes.get('event1');
|
|
105
122
|
expect(event1).toBeDefined();
|
|
106
123
|
expect(event1?.type).toBe('event');
|
|
@@ -111,15 +128,15 @@ describe('Canvas State Manager', () => {
|
|
|
111
128
|
const manager = createCanvasStateManager();
|
|
112
129
|
manager.loadFromSchema(testSchema);
|
|
113
130
|
const state = manager.getState();
|
|
114
|
-
|
|
131
|
+
|
|
115
132
|
const rule1 = state.nodes.get('rule1');
|
|
116
133
|
expect(rule1).toBeDefined();
|
|
117
134
|
expect(rule1?.type).toBe('rule');
|
|
118
135
|
expect(rule1?.label).toBe('Login Rule');
|
|
119
|
-
|
|
136
|
+
|
|
120
137
|
// Check for trigger edge from event to rule
|
|
121
138
|
const edges = Array.from(state.edges.values());
|
|
122
|
-
const triggerEdge = edges.find(e => e.source === 'event1' && e.target === 'rule1');
|
|
139
|
+
const triggerEdge = edges.find((e) => e.source === 'event1' && e.target === 'rule1');
|
|
123
140
|
expect(triggerEdge).toBeDefined();
|
|
124
141
|
expect(triggerEdge?.type).toBe('event');
|
|
125
142
|
expect(triggerEdge?.label).toBe('triggers');
|
|
@@ -128,10 +145,10 @@ describe('Canvas State Manager', () => {
|
|
|
128
145
|
it('should select a node', () => {
|
|
129
146
|
const manager = createCanvasStateManager();
|
|
130
147
|
manager.loadFromSchema(testSchema);
|
|
131
|
-
|
|
148
|
+
|
|
132
149
|
manager.selectNode('fact1');
|
|
133
150
|
const state = manager.getState();
|
|
134
|
-
|
|
151
|
+
|
|
135
152
|
expect(state.selection.nodes.has('fact1')).toBe(true);
|
|
136
153
|
expect(state.nodes.get('fact1')?.selected).toBe(true);
|
|
137
154
|
});
|
|
@@ -139,11 +156,11 @@ describe('Canvas State Manager', () => {
|
|
|
139
156
|
it('should support multi-selection with addToSelection', () => {
|
|
140
157
|
const manager = createCanvasStateManager();
|
|
141
158
|
manager.loadFromSchema(testSchema);
|
|
142
|
-
|
|
159
|
+
|
|
143
160
|
manager.selectNode('fact1');
|
|
144
161
|
manager.selectNode('fact2', true);
|
|
145
162
|
const state = manager.getState();
|
|
146
|
-
|
|
163
|
+
|
|
147
164
|
expect(state.selection.nodes.has('fact1')).toBe(true);
|
|
148
165
|
expect(state.selection.nodes.has('fact2')).toBe(true);
|
|
149
166
|
});
|
|
@@ -151,10 +168,10 @@ describe('Canvas State Manager', () => {
|
|
|
151
168
|
it('should move a node', () => {
|
|
152
169
|
const manager = createCanvasStateManager();
|
|
153
170
|
manager.loadFromSchema(testSchema);
|
|
154
|
-
|
|
171
|
+
|
|
155
172
|
manager.moveNode('fact1', { x: 100, y: 200 });
|
|
156
173
|
const state = manager.getState();
|
|
157
|
-
|
|
174
|
+
|
|
158
175
|
const node = state.nodes.get('fact1');
|
|
159
176
|
expect(node?.position.x).toBe(100);
|
|
160
177
|
expect(node?.position.y).toBe(200);
|
|
@@ -163,11 +180,11 @@ describe('Canvas State Manager', () => {
|
|
|
163
180
|
it('should snap to grid when moving', () => {
|
|
164
181
|
const manager = createCanvasStateManager();
|
|
165
182
|
manager.loadFromSchema(testSchema);
|
|
166
|
-
|
|
183
|
+
|
|
167
184
|
// Grid snap is enabled by default with size 20
|
|
168
185
|
manager.moveNode('fact1', { x: 105, y: 215 });
|
|
169
186
|
const state = manager.getState();
|
|
170
|
-
|
|
187
|
+
|
|
171
188
|
const node = state.nodes.get('fact1');
|
|
172
189
|
// With grid snap, 105 rounds to 100 (nearest multiple of 20)
|
|
173
190
|
// and 215 rounds to 220
|
|
@@ -178,11 +195,11 @@ describe('Canvas State Manager', () => {
|
|
|
178
195
|
it('should clear selection', () => {
|
|
179
196
|
const manager = createCanvasStateManager();
|
|
180
197
|
manager.loadFromSchema(testSchema);
|
|
181
|
-
|
|
198
|
+
|
|
182
199
|
manager.selectNode('fact1');
|
|
183
200
|
manager.selectNode('fact2', true);
|
|
184
201
|
manager.clearSelection();
|
|
185
|
-
|
|
202
|
+
|
|
186
203
|
const state = manager.getState();
|
|
187
204
|
expect(state.selection.nodes.size).toBe(0);
|
|
188
205
|
expect(state.nodes.get('fact1')?.selected).toBe(false);
|
|
@@ -191,10 +208,10 @@ describe('Canvas State Manager', () => {
|
|
|
191
208
|
|
|
192
209
|
it('should set viewport', () => {
|
|
193
210
|
const manager = createCanvasStateManager();
|
|
194
|
-
|
|
211
|
+
|
|
195
212
|
manager.setViewport({ x: 50, y: 100, zoom: 1.5 });
|
|
196
213
|
const state = manager.getState();
|
|
197
|
-
|
|
214
|
+
|
|
198
215
|
expect(state.viewport.x).toBe(50);
|
|
199
216
|
expect(state.viewport.y).toBe(100);
|
|
200
217
|
expect(state.viewport.zoom).toBe(1.5);
|
|
@@ -202,10 +219,10 @@ describe('Canvas State Manager', () => {
|
|
|
202
219
|
|
|
203
220
|
it('should set mode', () => {
|
|
204
221
|
const manager = createCanvasStateManager();
|
|
205
|
-
|
|
222
|
+
|
|
206
223
|
manager.setMode('pan');
|
|
207
224
|
expect(manager.getState().mode).toBe('pan');
|
|
208
|
-
|
|
225
|
+
|
|
209
226
|
manager.setMode('connect');
|
|
210
227
|
expect(manager.getState().mode).toBe('connect');
|
|
211
228
|
});
|
|
@@ -213,10 +230,10 @@ describe('Canvas State Manager', () => {
|
|
|
213
230
|
it('should toggle grid visibility', () => {
|
|
214
231
|
const manager = createCanvasStateManager();
|
|
215
232
|
const initialVisibility = manager.getState().grid.visible;
|
|
216
|
-
|
|
233
|
+
|
|
217
234
|
manager.toggleGrid();
|
|
218
235
|
expect(manager.getState().grid.visible).toBe(!initialVisibility);
|
|
219
|
-
|
|
236
|
+
|
|
220
237
|
manager.toggleGrid();
|
|
221
238
|
expect(manager.getState().grid.visible).toBe(initialVisibility);
|
|
222
239
|
});
|
|
@@ -224,14 +241,14 @@ describe('Canvas State Manager', () => {
|
|
|
224
241
|
it('should support undo/redo', () => {
|
|
225
242
|
const manager = createCanvasStateManager();
|
|
226
243
|
manager.loadFromSchema(testSchema);
|
|
227
|
-
|
|
244
|
+
|
|
228
245
|
// Make a change with undo support
|
|
229
246
|
manager.selectNode('fact1');
|
|
230
|
-
|
|
247
|
+
|
|
231
248
|
// Undo should work
|
|
232
249
|
const undoResult = manager.undo();
|
|
233
250
|
expect(undoResult).toBe(true);
|
|
234
|
-
|
|
251
|
+
|
|
235
252
|
// Redo should work
|
|
236
253
|
const redoResult = manager.redo();
|
|
237
254
|
expect(redoResult).toBe(true);
|
|
@@ -241,21 +258,21 @@ describe('Canvas State Manager', () => {
|
|
|
241
258
|
const manager = createCanvasStateManager();
|
|
242
259
|
let callCount = 0;
|
|
243
260
|
let lastState: CanvasState | null = null;
|
|
244
|
-
|
|
261
|
+
|
|
245
262
|
const unsubscribe = manager.subscribe((state) => {
|
|
246
263
|
callCount++;
|
|
247
264
|
lastState = state;
|
|
248
265
|
});
|
|
249
|
-
|
|
266
|
+
|
|
250
267
|
// Initial call happens immediately
|
|
251
268
|
expect(callCount).toBe(1);
|
|
252
269
|
expect(lastState).not.toBeNull();
|
|
253
|
-
|
|
270
|
+
|
|
254
271
|
// Changes trigger subscriber
|
|
255
272
|
manager.setMode('pan');
|
|
256
273
|
expect(callCount).toBe(2);
|
|
257
274
|
expect(lastState?.mode).toBe('pan');
|
|
258
|
-
|
|
275
|
+
|
|
259
276
|
// Unsubscribe works
|
|
260
277
|
unsubscribe();
|
|
261
278
|
manager.setMode('select');
|
|
@@ -265,17 +282,17 @@ describe('Canvas State Manager', () => {
|
|
|
265
282
|
it('should export canvas state to schema', () => {
|
|
266
283
|
const manager = createCanvasStateManager();
|
|
267
284
|
manager.loadFromSchema(testSchema);
|
|
268
|
-
|
|
285
|
+
|
|
269
286
|
// Move a node
|
|
270
287
|
manager.moveNode('fact1', { x: 150, y: 300 });
|
|
271
|
-
|
|
288
|
+
|
|
272
289
|
// Export back to schema
|
|
273
290
|
const updatedSchema = manager.exportToSchema(testSchema);
|
|
274
|
-
|
|
291
|
+
|
|
275
292
|
expect(updatedSchema.modifiedAt).toBeDefined();
|
|
276
|
-
|
|
293
|
+
|
|
277
294
|
// Check that position was updated (snapped to grid size of 20)
|
|
278
|
-
const updatedFact = updatedSchema.facts.find(f => f.id === 'fact1');
|
|
295
|
+
const updatedFact = updatedSchema.facts.find((f) => f.id === 'fact1');
|
|
279
296
|
// 150 rounded to nearest 20 = 160, 300 is already on grid
|
|
280
297
|
expect(updatedFact?.position).toEqual({ x: 160, y: 300 });
|
|
281
298
|
});
|
|
@@ -293,9 +310,7 @@ describe('Canvas Projection', () => {
|
|
|
293
310
|
{ id: 'fact1', tag: 'Fact1', description: 'Test fact', payloadSchema: {} },
|
|
294
311
|
{ id: 'fact2', tag: 'Fact2', description: 'Test fact 2', payloadSchema: {} },
|
|
295
312
|
],
|
|
296
|
-
events: [
|
|
297
|
-
{ id: 'event1', tag: 'Event1', description: 'Test event', payloadSchema: {} },
|
|
298
|
-
],
|
|
313
|
+
events: [{ id: 'event1', tag: 'Event1', description: 'Test event', payloadSchema: {} }],
|
|
299
314
|
rules: [
|
|
300
315
|
{ id: 'rule1', name: 'Rule1', description: 'Test rule', triggers: ['Event1'], actions: [] },
|
|
301
316
|
],
|
|
@@ -313,7 +328,7 @@ describe('Canvas Projection', () => {
|
|
|
313
328
|
it('should project schema to layout', () => {
|
|
314
329
|
const projection = createCanvasProjection();
|
|
315
330
|
const result = projection.projectSchema(testSchema);
|
|
316
|
-
|
|
331
|
+
|
|
317
332
|
expect(result).toBeDefined();
|
|
318
333
|
expect(result.positions).toBeInstanceOf(Map);
|
|
319
334
|
expect(result.viewport).toBeDefined();
|
|
@@ -323,10 +338,10 @@ describe('Canvas Projection', () => {
|
|
|
323
338
|
it('should generate positions for all nodes', () => {
|
|
324
339
|
const projection = createCanvasProjection();
|
|
325
340
|
const result = projection.projectSchema(testSchema);
|
|
326
|
-
|
|
341
|
+
|
|
327
342
|
// 2 facts + 1 event + 1 rule = 4 nodes
|
|
328
343
|
expect(result.positions.size).toBe(4);
|
|
329
|
-
|
|
344
|
+
|
|
330
345
|
expect(result.positions.has('fact1')).toBe(true);
|
|
331
346
|
expect(result.positions.has('fact2')).toBe(true);
|
|
332
347
|
expect(result.positions.has('event1')).toBe(true);
|
|
@@ -337,22 +352,28 @@ describe('Canvas Projection', () => {
|
|
|
337
352
|
const schemaWithPositions: PSFSchema = {
|
|
338
353
|
...testSchema,
|
|
339
354
|
facts: [
|
|
340
|
-
{
|
|
355
|
+
{
|
|
356
|
+
id: 'fact1',
|
|
357
|
+
tag: 'Fact1',
|
|
358
|
+
description: 'Test',
|
|
359
|
+
payloadSchema: {},
|
|
360
|
+
position: { x: 500, y: 500 },
|
|
361
|
+
},
|
|
341
362
|
],
|
|
342
363
|
events: [],
|
|
343
364
|
rules: [],
|
|
344
365
|
};
|
|
345
|
-
|
|
366
|
+
|
|
346
367
|
const projection = createCanvasProjection({ respectExisting: true });
|
|
347
368
|
const result = projection.projectSchema(schemaWithPositions);
|
|
348
|
-
|
|
369
|
+
|
|
349
370
|
expect(result.positions.get('fact1')).toEqual({ x: 500, y: 500 });
|
|
350
371
|
});
|
|
351
372
|
|
|
352
373
|
it('should use hierarchical layout', () => {
|
|
353
374
|
const projection = createCanvasProjection({ algorithm: 'hierarchical' });
|
|
354
375
|
const result = projection.projectSchema(testSchema);
|
|
355
|
-
|
|
376
|
+
|
|
356
377
|
expect(result.positions.size).toBe(4);
|
|
357
378
|
// Each node should have a valid position
|
|
358
379
|
for (const pos of result.positions.values()) {
|
|
@@ -364,12 +385,12 @@ describe('Canvas Projection', () => {
|
|
|
364
385
|
it('should use grid layout', () => {
|
|
365
386
|
const projection = createCanvasProjection({ algorithm: 'grid' });
|
|
366
387
|
const result = projection.projectSchema(testSchema);
|
|
367
|
-
|
|
388
|
+
|
|
368
389
|
expect(result.positions.size).toBe(4);
|
|
369
390
|
// Grid layout should have evenly spaced positions
|
|
370
391
|
const positions = Array.from(result.positions.values());
|
|
371
392
|
// All positions should be defined
|
|
372
|
-
positions.forEach(pos => {
|
|
393
|
+
positions.forEach((pos) => {
|
|
373
394
|
expect(pos).toBeDefined();
|
|
374
395
|
expect(typeof pos.x).toBe('number');
|
|
375
396
|
expect(typeof pos.y).toBe('number');
|
|
@@ -379,12 +400,12 @@ describe('Canvas Projection', () => {
|
|
|
379
400
|
it('should use circular layout', () => {
|
|
380
401
|
const projection = createCanvasProjection({ algorithm: 'circular' });
|
|
381
402
|
const result = projection.projectSchema(testSchema);
|
|
382
|
-
|
|
403
|
+
|
|
383
404
|
expect(result.positions.size).toBe(4);
|
|
384
405
|
// Circular layout positions should be centered around origin
|
|
385
406
|
const positions = Array.from(result.positions.values());
|
|
386
407
|
// Check that positions exist and are numbers
|
|
387
|
-
positions.forEach(pos => {
|
|
408
|
+
positions.forEach((pos) => {
|
|
388
409
|
expect(typeof pos.x).toBe('number');
|
|
389
410
|
expect(typeof pos.y).toBe('number');
|
|
390
411
|
});
|
|
@@ -393,11 +414,11 @@ describe('Canvas Projection', () => {
|
|
|
393
414
|
it('should use force-directed layout', () => {
|
|
394
415
|
const projection = createCanvasProjection({ algorithm: 'force' });
|
|
395
416
|
const result = projection.projectSchema(testSchema);
|
|
396
|
-
|
|
417
|
+
|
|
397
418
|
expect(result.positions.size).toBe(4);
|
|
398
419
|
// Force layout should spread nodes apart
|
|
399
420
|
const positions = Array.from(result.positions.values());
|
|
400
|
-
positions.forEach(pos => {
|
|
421
|
+
positions.forEach((pos) => {
|
|
401
422
|
expect(typeof pos.x).toBe('number');
|
|
402
423
|
expect(typeof pos.y).toBe('number');
|
|
403
424
|
});
|
|
@@ -406,7 +427,7 @@ describe('Canvas Projection', () => {
|
|
|
406
427
|
it('should calculate bounds correctly', () => {
|
|
407
428
|
const projection = createCanvasProjection({ algorithm: 'grid' });
|
|
408
429
|
const result = projection.projectSchema(testSchema);
|
|
409
|
-
|
|
430
|
+
|
|
410
431
|
expect(result.bounds.minX).toBeDefined();
|
|
411
432
|
expect(result.bounds.minY).toBeDefined();
|
|
412
433
|
expect(result.bounds.maxX).toBeDefined();
|
|
@@ -416,21 +437,22 @@ describe('Canvas Projection', () => {
|
|
|
416
437
|
});
|
|
417
438
|
|
|
418
439
|
it('should center layout when requested', () => {
|
|
419
|
-
const projection = createCanvasProjection({
|
|
420
|
-
algorithm: 'grid',
|
|
440
|
+
const projection = createCanvasProjection({
|
|
441
|
+
algorithm: 'grid',
|
|
421
442
|
center: true,
|
|
422
443
|
});
|
|
423
444
|
const result = projection.projectSchema(testSchema);
|
|
424
|
-
|
|
445
|
+
|
|
425
446
|
// With centering, the average position should be near (0, 0)
|
|
426
|
-
let sumX = 0,
|
|
447
|
+
let sumX = 0,
|
|
448
|
+
sumY = 0;
|
|
427
449
|
for (const pos of result.positions.values()) {
|
|
428
450
|
sumX += pos.x;
|
|
429
451
|
sumY += pos.y;
|
|
430
452
|
}
|
|
431
453
|
const avgX = sumX / result.positions.size;
|
|
432
454
|
const avgY = sumY / result.positions.size;
|
|
433
|
-
|
|
455
|
+
|
|
434
456
|
// Average should be close to 0 (allowing for rounding)
|
|
435
457
|
expect(Math.abs(avgX)).toBeLessThan(100);
|
|
436
458
|
expect(Math.abs(avgY)).toBeLessThan(100);
|
|
@@ -439,11 +461,10 @@ describe('Canvas Projection', () => {
|
|
|
439
461
|
|
|
440
462
|
describe('Canvas Component Props', () => {
|
|
441
463
|
it('should export component prop types', async () => {
|
|
442
|
-
const {
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
464
|
+
const { createCanvasStateManager, createCanvasProjection } = await import(
|
|
465
|
+
'../../ui/canvas/components/index.js'
|
|
466
|
+
);
|
|
467
|
+
|
|
447
468
|
expect(createCanvasStateManager).toBeDefined();
|
|
448
469
|
expect(createCanvasProjection).toBeDefined();
|
|
449
470
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Create Command Tests
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Tests for the praxis create command.
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -19,7 +19,7 @@ describe('CLI Create Command', () => {
|
|
|
19
19
|
await mkdir(TEST_DIR, { recursive: true });
|
|
20
20
|
process.chdir(TEST_DIR);
|
|
21
21
|
});
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
afterEach(async () => {
|
|
24
24
|
// Clean up test directory
|
|
25
25
|
try {
|
|
@@ -28,19 +28,19 @@ describe('CLI Create Command', () => {
|
|
|
28
28
|
// Ignore cleanup errors
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
describe('create app', () => {
|
|
33
33
|
test('should create a new app with basic template', async () => {
|
|
34
34
|
const appName = 'my-test-app';
|
|
35
35
|
const options: CreateOptions = { template: 'basic' };
|
|
36
|
-
|
|
36
|
+
|
|
37
37
|
// Mock console.log to suppress output
|
|
38
38
|
const originalLog = console.log;
|
|
39
39
|
console.log = () => {};
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
try {
|
|
42
42
|
await create('app', appName, options);
|
|
43
|
-
|
|
43
|
+
|
|
44
44
|
// Verify directory structure
|
|
45
45
|
const appDir = join(TEST_DIR, appName);
|
|
46
46
|
expect(existsSync(appDir)).toBe(true);
|
|
@@ -50,7 +50,7 @@ describe('CLI Create Command', () => {
|
|
|
50
50
|
expect(existsSync(join(appDir, 'src', 'App.svelte'))).toBe(true);
|
|
51
51
|
expect(existsSync(join(appDir, 'src', 'main.ts'))).toBe(true);
|
|
52
52
|
expect(existsSync(join(appDir, 'src', 'schemas', 'app.schema.js'))).toBe(true);
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
// Verify package.json content
|
|
55
55
|
const packageJson = JSON.parse(await readFile(join(appDir, 'package.json'), 'utf-8'));
|
|
56
56
|
expect(packageJson.name).toBe(appName);
|
|
@@ -61,21 +61,21 @@ describe('CLI Create Command', () => {
|
|
|
61
61
|
console.log = originalLog;
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
test('should fail for app with invalid name', async () => {
|
|
66
66
|
const originalLog = console.log;
|
|
67
67
|
const originalError = console.error;
|
|
68
68
|
const originalExit = process.exit;
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
console.log = () => {};
|
|
71
71
|
console.error = () => {};
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
let exitCode: number | undefined;
|
|
74
74
|
process.exit = ((code?: number) => {
|
|
75
75
|
exitCode = code;
|
|
76
76
|
throw new Error('process.exit called');
|
|
77
77
|
}) as never;
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
try {
|
|
80
80
|
await create('app', '123invalid', {});
|
|
81
81
|
} catch (e) {
|
|
@@ -85,32 +85,32 @@ describe('CLI Create Command', () => {
|
|
|
85
85
|
console.error = originalError;
|
|
86
86
|
process.exit = originalExit;
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
expect(exitCode).toBe(1);
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
|
-
|
|
92
|
+
|
|
93
93
|
describe('create component', () => {
|
|
94
94
|
test('should create a new component', async () => {
|
|
95
95
|
const componentName = 'MyButton';
|
|
96
96
|
const componentDir = join(TEST_DIR, 'components');
|
|
97
97
|
await mkdir(componentDir, { recursive: true });
|
|
98
|
-
|
|
98
|
+
|
|
99
99
|
const options: CreateOptions = { directory: componentDir };
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
// Mock console.log to suppress output
|
|
102
102
|
const originalLog = console.log;
|
|
103
103
|
console.log = () => {};
|
|
104
|
-
|
|
104
|
+
|
|
105
105
|
try {
|
|
106
106
|
await create('component', componentName, options);
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
// Verify component files
|
|
109
109
|
const outputDir = join(componentDir, componentName);
|
|
110
110
|
expect(existsSync(join(outputDir, `${componentName}.svelte`))).toBe(true);
|
|
111
111
|
expect(existsSync(join(outputDir, `${componentName}.schema.js`))).toBe(true);
|
|
112
112
|
expect(existsSync(join(outputDir, 'index.ts'))).toBe(true);
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
// Verify index.ts content
|
|
115
115
|
const indexContent = await readFile(join(outputDir, 'index.ts'), 'utf-8');
|
|
116
116
|
expect(indexContent).toContain(`export { default as ${componentName} }`);
|
|
@@ -118,21 +118,21 @@ describe('CLI Create Command', () => {
|
|
|
118
118
|
console.log = originalLog;
|
|
119
119
|
}
|
|
120
120
|
});
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
test('should fail without a name', async () => {
|
|
123
123
|
const originalLog = console.log;
|
|
124
124
|
const originalError = console.error;
|
|
125
125
|
const originalExit = process.exit;
|
|
126
|
-
|
|
126
|
+
|
|
127
127
|
console.log = () => {};
|
|
128
128
|
console.error = () => {};
|
|
129
|
-
|
|
129
|
+
|
|
130
130
|
let exitCode: number | undefined;
|
|
131
131
|
process.exit = ((code?: number) => {
|
|
132
132
|
exitCode = code;
|
|
133
133
|
throw new Error('process.exit called');
|
|
134
134
|
}) as never;
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
try {
|
|
137
137
|
await create('component', undefined, {});
|
|
138
138
|
} catch (e) {
|
|
@@ -142,26 +142,26 @@ describe('CLI Create Command', () => {
|
|
|
142
142
|
console.error = originalError;
|
|
143
143
|
process.exit = originalExit;
|
|
144
144
|
}
|
|
145
|
-
|
|
145
|
+
|
|
146
146
|
expect(exitCode).toBe(1);
|
|
147
147
|
});
|
|
148
148
|
});
|
|
149
|
-
|
|
149
|
+
|
|
150
150
|
describe('unknown type', () => {
|
|
151
151
|
test('should fail for unknown type', async () => {
|
|
152
152
|
const originalLog = console.log;
|
|
153
153
|
const originalError = console.error;
|
|
154
154
|
const originalExit = process.exit;
|
|
155
|
-
|
|
155
|
+
|
|
156
156
|
console.log = () => {};
|
|
157
157
|
console.error = () => {};
|
|
158
|
-
|
|
158
|
+
|
|
159
159
|
let exitCode: number | undefined;
|
|
160
160
|
process.exit = ((code?: number) => {
|
|
161
161
|
exitCode = code;
|
|
162
162
|
throw new Error('process.exit called');
|
|
163
163
|
}) as never;
|
|
164
|
-
|
|
164
|
+
|
|
165
165
|
try {
|
|
166
166
|
await create('unknown', 'test', {});
|
|
167
167
|
} catch (e) {
|
|
@@ -171,7 +171,7 @@ describe('CLI Create Command', () => {
|
|
|
171
171
|
console.error = originalError;
|
|
172
172
|
process.exit = originalExit;
|
|
173
173
|
}
|
|
174
|
-
|
|
174
|
+
|
|
175
175
|
expect(exitCode).toBe(1);
|
|
176
176
|
});
|
|
177
177
|
});
|