@plures/praxis 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FRAMEWORK.md +55 -5
- package/LICENSE +21 -21
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- package/core/codegen/ts-generator.ts +15 -15
- package/core/db-adapter/index.ts +2 -2
- package/core/db-adapter/sync-engine.ts +17 -6
- package/core/logic-engine/engine.ts +1 -1
- package/core/logic-engine/index.ts +2 -2
- package/core/logic-engine/protocol.ts +1 -1
- package/core/logic-engine/psf-adapter.ts +8 -4
- package/core/logic-engine/rules.ts +1 -1
- package/core/schema-engine/compiler.ts +53 -11
- package/core/schema-engine/generator.ts +17 -7
- package/core/schema-engine/index.ts +2 -2
- package/core/schema-engine/psf.ts +12 -3
- package/core/schema-engine/types.ts +3 -11
- package/core/schema-engine/validator.ts +112 -22
- package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
- package/dist/browser/index.d.ts +3004 -0
- package/dist/browser/index.js +2892 -0
- package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
- package/dist/browser/integrations/svelte.js +298 -0
- package/dist/node/auth-STARLY7I.js +207 -0
- package/dist/node/build-Y7OT5VBF.js +144 -0
- package/dist/node/canvas-UERZHJYW.js +362 -0
- package/dist/node/chunk-DSDC2JWZ.js +256 -0
- package/dist/node/chunk-FXQZXAWF.js +175 -0
- package/dist/node/chunk-N5Y37EUV.js +202 -0
- package/dist/node/chunk-QGM4M3NI.js +37 -0
- package/dist/node/chunk-RJMWCNHR.js +175 -0
- package/dist/node/chunk-SRM3OPPM.js +404 -0
- package/dist/node/chunk-UATVJBNV.js +175 -0
- package/dist/node/chunk-UY7YEBE2.js +159 -0
- package/dist/node/chunk-XCY2VIFX.js +143 -0
- package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
- package/dist/node/cli/index.cjs +217418 -0
- package/dist/node/cli/index.d.cts +1 -0
- package/dist/node/cli/index.d.ts +1 -0
- package/dist/node/cli/index.js +690 -0
- package/dist/node/cloud/index.cjs +1043 -0
- package/dist/node/cloud/index.d.cts +864 -0
- package/dist/node/cloud/index.d.ts +864 -0
- package/dist/node/cloud/index.js +456 -0
- package/dist/node/cloud-AXOK4PSN.js +212 -0
- package/dist/node/component.cjs +374 -0
- package/dist/node/component.d.cts +125 -0
- package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
- package/dist/node/component.js +9 -0
- package/dist/node/components/index.cjs +216 -0
- package/dist/node/components/index.d.cts +43 -0
- package/dist/{src → node}/components/index.d.ts +8 -8
- package/dist/node/components/index.js +7 -0
- package/dist/node/create-TRLSVCNQ.js +584 -0
- package/dist/node/dev-PMJZUYGE.js +65 -0
- package/dist/node/engine-1iqLe6_P.d.ts +214 -0
- package/dist/node/engine-CVJobhHm.d.cts +214 -0
- package/dist/node/index.cjs +3247 -0
- package/dist/node/index.d.cts +2579 -0
- package/dist/node/index.d.ts +2579 -0
- package/dist/node/index.js +2098 -0
- package/dist/node/integrations/svelte.cjs +330 -0
- package/dist/node/integrations/svelte.d.cts +309 -0
- package/dist/node/integrations/svelte.d.ts +309 -0
- package/dist/node/integrations/svelte.js +300 -0
- package/dist/node/orchestrate-737TCL5H.js +127 -0
- package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
- package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
- package/dist/node/schema.cjs +200 -0
- package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
- package/dist/node/schema.d.ts +371 -0
- package/dist/node/schema.js +9 -0
- package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
- package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
- package/dist/node/verify-YBZ7W24H.js +213239 -0
- package/docs/MONETIZATION.md +21 -16
- package/docs/REACTIVE_REDESIGN.md +132 -0
- package/docs/README.md +47 -36
- package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
- package/docs/TERMINAL_NODE.md +27 -24
- package/docs/core/building-extensions.md +58 -61
- package/docs/core/cli-usage.md +59 -59
- package/docs/core/code-canvas-sync.md +28 -16
- package/docs/core/logic-engine.md +77 -82
- package/docs/core/pluresdb-integration.md +29 -39
- package/docs/core/schema-model.md +66 -52
- package/docs/core/ui-generation.md +57 -49
- package/docs/core/what-is-praxis.md +32 -15
- package/docs/guides/canvas.md +21 -5
- package/docs/guides/getting-started.md +13 -7
- package/docs/guides/history-state-pattern.md +65 -51
- package/docs/guides/orchestration.md +46 -32
- package/docs/guides/parallel-state-pattern.md +56 -72
- package/docs/guides/svelte-integration.md +45 -53
- package/docs/tutorials/README.md +16 -0
- package/docs/tutorials/ecommerce-cart.md +177 -95
- package/docs/tutorials/first-app.md +26 -41
- package/docs/tutorials/form-builder.md +191 -138
- package/docs/tutorials/todo-pluresdb.md +71 -69
- package/package.json +132 -96
- package/src/__tests__/actors.test.ts +68 -68
- package/src/__tests__/billing.test.ts +32 -32
- package/src/__tests__/canvas-components.test.ts +94 -73
- package/src/__tests__/cli-create.test.ts +28 -28
- package/src/__tests__/cloud.test.ts +36 -36
- package/src/__tests__/code-canvas-integration.test.ts +132 -141
- package/src/__tests__/docs-generator.test.ts +3 -9
- package/src/__tests__/dsl.test.ts +58 -64
- package/src/__tests__/edge-cases.test.ts +106 -108
- package/src/__tests__/engine.test.ts +51 -25
- package/src/__tests__/generators.test.ts +42 -44
- package/src/__tests__/introspection.test.ts +104 -114
- package/src/__tests__/pluresdb.test.ts +189 -187
- package/src/__tests__/protocol.test.ts +15 -15
- package/src/__tests__/provisioning.test.ts +61 -61
- package/src/__tests__/schema.test.ts +7 -11
- package/src/__tests__/state-docs-integration.test.ts +162 -145
- package/src/__tests__/svelte-integration.test.ts +16 -19
- package/src/__tests__/tauri-integration.test.ts +149 -147
- package/src/__tests__/terminal-node.test.ts +12 -7
- package/src/__tests__/unum-integration.test.ts +68 -68
- package/src/adapters/cli.ts +21 -15
- package/src/cli/commands/auth.ts +82 -78
- package/src/cli/commands/build.ts +29 -27
- package/src/cli/commands/canvas.ts +338 -127
- package/src/cli/commands/cloud.ts +47 -47
- package/src/cli/commands/create.ts +59 -47
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/generate.ts +29 -40
- package/src/cli/commands/orchestrate.ts +24 -24
- package/src/cli/commands/verify.ts +49 -0
- package/src/cli/index.ts +21 -2
- package/src/cloud/README.md +28 -15
- package/src/cloud/auth.ts +55 -70
- package/src/cloud/billing.ts +59 -58
- package/src/cloud/client.ts +29 -35
- package/src/cloud/index.ts +19 -40
- package/src/cloud/marketplace.ts +69 -78
- package/src/cloud/provisioning.ts +42 -51
- package/src/cloud/relay/endpoints.ts +30 -34
- package/src/cloud/relay/health/index.ts +1 -1
- package/src/cloud/relay/stats/index.ts +1 -1
- package/src/cloud/relay/sync/index.ts +1 -1
- package/src/cloud/relay/usage/index.ts +1 -1
- package/src/cloud/sponsors.ts +31 -34
- package/src/cloud/types.ts +4 -4
- package/src/components/README.md +1 -0
- package/src/components/TerminalNode.svelte +457 -457
- package/src/components/index.ts +3 -4
- package/src/core/actors.ts +7 -7
- package/src/core/component/generator.ts +10 -28
- package/src/core/engine.ts +51 -24
- package/src/core/introspection.ts +37 -35
- package/src/core/logic/generator.ts +62 -62
- package/src/core/pluresdb/adapter.ts +8 -8
- package/src/core/pluresdb/generator.ts +39 -35
- package/src/core/pluresdb/index.ts +9 -12
- package/src/core/pluresdb/schema-registry.ts +22 -25
- package/src/core/pluresdb/store.ts +57 -57
- package/src/core/protocol.ts +14 -14
- package/src/core/reactive-engine.svelte.ts +65 -0
- package/src/core/reactive-engine.ts +67 -0
- package/src/core/rules.ts +4 -4
- package/src/core/schema/loader.common.ts +150 -0
- package/src/core/schema/loader.ts +19 -149
- package/src/core/schema/normalize.ts +34 -51
- package/src/core/schema/types.ts +47 -11
- package/src/dsl/index.ts +8 -8
- package/src/dsl.ts +11 -17
- package/src/examples/advanced-todo/App.svelte +506 -506
- package/src/examples/advanced-todo/README.md +58 -40
- package/src/examples/advanced-todo/index.ts +3 -3
- package/src/examples/auth-basic/index.ts +30 -30
- package/src/examples/cart/index.ts +50 -50
- package/src/examples/hero-ecommerce/index.ts +130 -157
- package/src/examples/svelte-counter/index.ts +22 -26
- package/src/flows.ts +6 -17
- package/src/index.browser.ts +204 -0
- package/src/index.ts +37 -42
- package/src/integrations/code-canvas.ts +237 -193
- package/src/integrations/pluresdb.ts +55 -35
- package/src/integrations/state-docs.ts +104 -104
- package/src/integrations/svelte.ts +35 -35
- package/src/integrations/tauri.ts +75 -73
- package/src/integrations/unum.ts +68 -61
- package/src/registry.ts +7 -14
- package/src/runtime/terminal-adapter.ts +31 -26
- package/src/step.ts +10 -16
- package/src/types.ts +1 -1
- package/templates/basic-app/README.md +6 -9
- package/templates/fullstack-app/README.md +10 -0
- package/dist/core/codegen/docs-generator.d.ts +0 -123
- package/dist/core/codegen/docs-generator.d.ts.map +0 -1
- package/dist/core/codegen/docs-generator.js +0 -674
- package/dist/core/codegen/docs-generator.js.map +0 -1
- package/dist/core/codegen/index.d.ts +0 -11
- package/dist/core/codegen/index.d.ts.map +0 -1
- package/dist/core/codegen/index.js +0 -13
- package/dist/core/codegen/index.js.map +0 -1
- package/dist/core/codegen/ts-generator.d.ts +0 -8
- package/dist/core/codegen/ts-generator.d.ts.map +0 -1
- package/dist/core/codegen/ts-generator.js +0 -8
- package/dist/core/codegen/ts-generator.js.map +0 -1
- package/dist/core/db-adapter/index.d.ts +0 -18
- package/dist/core/db-adapter/index.d.ts.map +0 -1
- package/dist/core/db-adapter/index.js +0 -23
- package/dist/core/db-adapter/index.js.map +0 -1
- package/dist/core/db-adapter/sync-engine.d.ts +0 -180
- package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
- package/dist/core/db-adapter/sync-engine.js +0 -342
- package/dist/core/db-adapter/sync-engine.js.map +0 -1
- package/dist/core/logic-engine/engine.d.ts +0 -8
- package/dist/core/logic-engine/engine.d.ts.map +0 -1
- package/dist/core/logic-engine/engine.js +0 -8
- package/dist/core/logic-engine/engine.js.map +0 -1
- package/dist/core/logic-engine/index.d.ts +0 -16
- package/dist/core/logic-engine/index.d.ts.map +0 -1
- package/dist/core/logic-engine/index.js +0 -16
- package/dist/core/logic-engine/index.js.map +0 -1
- package/dist/core/logic-engine/protocol.d.ts +0 -7
- package/dist/core/logic-engine/protocol.d.ts.map +0 -1
- package/dist/core/logic-engine/protocol.js +0 -7
- package/dist/core/logic-engine/protocol.js.map +0 -1
- package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
- package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
- package/dist/core/logic-engine/psf-adapter.js +0 -207
- package/dist/core/logic-engine/psf-adapter.js.map +0 -1
- package/dist/core/logic-engine/rules.d.ts +0 -7
- package/dist/core/logic-engine/rules.d.ts.map +0 -1
- package/dist/core/logic-engine/rules.js +0 -7
- package/dist/core/logic-engine/rules.js.map +0 -1
- package/dist/core/schema-engine/compiler.d.ts +0 -198
- package/dist/core/schema-engine/compiler.d.ts.map +0 -1
- package/dist/core/schema-engine/compiler.js +0 -262
- package/dist/core/schema-engine/compiler.js.map +0 -1
- package/dist/core/schema-engine/generator.d.ts +0 -115
- package/dist/core/schema-engine/generator.d.ts.map +0 -1
- package/dist/core/schema-engine/generator.js +0 -506
- package/dist/core/schema-engine/generator.js.map +0 -1
- package/dist/core/schema-engine/index.d.ts +0 -18
- package/dist/core/schema-engine/index.d.ts.map +0 -1
- package/dist/core/schema-engine/index.js +0 -18
- package/dist/core/schema-engine/index.js.map +0 -1
- package/dist/core/schema-engine/psf.d.ts +0 -612
- package/dist/core/schema-engine/psf.d.ts.map +0 -1
- package/dist/core/schema-engine/psf.js +0 -45
- package/dist/core/schema-engine/psf.js.map +0 -1
- package/dist/core/schema-engine/types.d.ts +0 -10
- package/dist/core/schema-engine/types.d.ts.map +0 -1
- package/dist/core/schema-engine/types.js +0 -7
- package/dist/core/schema-engine/types.js.map +0 -1
- package/dist/core/schema-engine/validator.d.ts +0 -140
- package/dist/core/schema-engine/validator.d.ts.map +0 -1
- package/dist/core/schema-engine/validator.js +0 -407
- package/dist/core/schema-engine/validator.js.map +0 -1
- package/dist/src/adapters/cli.d.ts +0 -43
- package/dist/src/adapters/cli.d.ts.map +0 -1
- package/dist/src/adapters/cli.js +0 -126
- package/dist/src/adapters/cli.js.map +0 -1
- package/dist/src/cli/commands/auth.d.ts +0 -26
- package/dist/src/cli/commands/auth.d.ts.map +0 -1
- package/dist/src/cli/commands/auth.js +0 -233
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/build.d.ts +0 -23
- package/dist/src/cli/commands/build.d.ts.map +0 -1
- package/dist/src/cli/commands/build.js +0 -162
- package/dist/src/cli/commands/build.js.map +0 -1
- package/dist/src/cli/commands/canvas.d.ts +0 -23
- package/dist/src/cli/commands/canvas.d.ts.map +0 -1
- package/dist/src/cli/commands/canvas.js +0 -215
- package/dist/src/cli/commands/canvas.js.map +0 -1
- package/dist/src/cli/commands/cloud.d.ts +0 -27
- package/dist/src/cli/commands/cloud.d.ts.map +0 -1
- package/dist/src/cli/commands/cloud.js +0 -232
- package/dist/src/cli/commands/cloud.js.map +0 -1
- package/dist/src/cli/commands/create.d.ts +0 -21
- package/dist/src/cli/commands/create.d.ts.map +0 -1
- package/dist/src/cli/commands/create.js +0 -621
- package/dist/src/cli/commands/create.js.map +0 -1
- package/dist/src/cli/commands/dev.d.ts +0 -21
- package/dist/src/cli/commands/dev.d.ts.map +0 -1
- package/dist/src/cli/commands/dev.js +0 -71
- package/dist/src/cli/commands/dev.js.map +0 -1
- package/dist/src/cli/commands/generate.d.ts +0 -25
- package/dist/src/cli/commands/generate.d.ts.map +0 -1
- package/dist/src/cli/commands/generate.js +0 -168
- package/dist/src/cli/commands/generate.js.map +0 -1
- package/dist/src/cli/commands/orchestrate.d.ts +0 -44
- package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/src/cli/commands/orchestrate.js +0 -150
- package/dist/src/cli/commands/orchestrate.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -211
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cloud/auth.d.ts +0 -51
- package/dist/src/cloud/auth.d.ts.map +0 -1
- package/dist/src/cloud/auth.js +0 -194
- package/dist/src/cloud/auth.js.map +0 -1
- package/dist/src/cloud/billing.d.ts +0 -184
- package/dist/src/cloud/billing.d.ts.map +0 -1
- package/dist/src/cloud/billing.js +0 -179
- package/dist/src/cloud/billing.js.map +0 -1
- package/dist/src/cloud/client.d.ts +0 -39
- package/dist/src/cloud/client.d.ts.map +0 -1
- package/dist/src/cloud/client.js +0 -176
- package/dist/src/cloud/client.js.map +0 -1
- package/dist/src/cloud/index.d.ts +0 -44
- package/dist/src/cloud/index.d.ts.map +0 -1
- package/dist/src/cloud/index.js +0 -44
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/cloud/marketplace.d.ts +0 -166
- package/dist/src/cloud/marketplace.d.ts.map +0 -1
- package/dist/src/cloud/marketplace.js +0 -159
- package/dist/src/cloud/marketplace.js.map +0 -1
- package/dist/src/cloud/provisioning.d.ts +0 -110
- package/dist/src/cloud/provisioning.d.ts.map +0 -1
- package/dist/src/cloud/provisioning.js +0 -148
- package/dist/src/cloud/provisioning.js.map +0 -1
- package/dist/src/cloud/relay/endpoints.d.ts +0 -62
- package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/src/cloud/relay/endpoints.js +0 -217
- package/dist/src/cloud/relay/endpoints.js.map +0 -1
- package/dist/src/cloud/relay/health/index.d.ts +0 -5
- package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/health/index.js +0 -9
- package/dist/src/cloud/relay/health/index.js.map +0 -1
- package/dist/src/cloud/relay/stats/index.d.ts +0 -5
- package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/stats/index.js +0 -9
- package/dist/src/cloud/relay/stats/index.js.map +0 -1
- package/dist/src/cloud/relay/sync/index.d.ts +0 -5
- package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/sync/index.js +0 -9
- package/dist/src/cloud/relay/sync/index.js.map +0 -1
- package/dist/src/cloud/relay/usage/index.d.ts +0 -5
- package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/usage/index.js +0 -9
- package/dist/src/cloud/relay/usage/index.js.map +0 -1
- package/dist/src/cloud/sponsors.d.ts +0 -81
- package/dist/src/cloud/sponsors.d.ts.map +0 -1
- package/dist/src/cloud/sponsors.js +0 -130
- package/dist/src/cloud/sponsors.js.map +0 -1
- package/dist/src/cloud/types.d.ts +0 -169
- package/dist/src/cloud/types.d.ts.map +0 -1
- package/dist/src/cloud/types.js +0 -7
- package/dist/src/cloud/types.js.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/index.js +0 -17
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/core/actors.d.ts +0 -95
- package/dist/src/core/actors.d.ts.map +0 -1
- package/dist/src/core/actors.js +0 -158
- package/dist/src/core/actors.js.map +0 -1
- package/dist/src/core/component/generator.d.ts.map +0 -1
- package/dist/src/core/component/generator.js +0 -349
- package/dist/src/core/component/generator.js.map +0 -1
- package/dist/src/core/engine.d.ts +0 -92
- package/dist/src/core/engine.d.ts.map +0 -1
- package/dist/src/core/engine.js +0 -199
- package/dist/src/core/engine.js.map +0 -1
- package/dist/src/core/introspection.d.ts +0 -141
- package/dist/src/core/introspection.d.ts.map +0 -1
- package/dist/src/core/introspection.js +0 -208
- package/dist/src/core/introspection.js.map +0 -1
- package/dist/src/core/logic/generator.d.ts +0 -76
- package/dist/src/core/logic/generator.d.ts.map +0 -1
- package/dist/src/core/logic/generator.js +0 -370
- package/dist/src/core/logic/generator.js.map +0 -1
- package/dist/src/core/pluresdb/adapter.d.ts +0 -72
- package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
- package/dist/src/core/pluresdb/adapter.js +0 -73
- package/dist/src/core/pluresdb/adapter.js.map +0 -1
- package/dist/src/core/pluresdb/generator.d.ts +0 -58
- package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/src/core/pluresdb/generator.js +0 -191
- package/dist/src/core/pluresdb/generator.js.map +0 -1
- package/dist/src/core/pluresdb/index.d.ts +0 -15
- package/dist/src/core/pluresdb/index.d.ts.map +0 -1
- package/dist/src/core/pluresdb/index.js +0 -11
- package/dist/src/core/pluresdb/index.js.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.js +0 -130
- package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
- package/dist/src/core/pluresdb/store.d.ts +0 -199
- package/dist/src/core/pluresdb/store.d.ts.map +0 -1
- package/dist/src/core/pluresdb/store.js +0 -344
- package/dist/src/core/pluresdb/store.js.map +0 -1
- package/dist/src/core/protocol.d.ts.map +0 -1
- package/dist/src/core/protocol.js +0 -46
- package/dist/src/core/protocol.js.map +0 -1
- package/dist/src/core/rules.d.ts +0 -120
- package/dist/src/core/rules.d.ts.map +0 -1
- package/dist/src/core/rules.js +0 -81
- package/dist/src/core/rules.js.map +0 -1
- package/dist/src/core/schema/loader.d.ts +0 -47
- package/dist/src/core/schema/loader.d.ts.map +0 -1
- package/dist/src/core/schema/loader.js +0 -189
- package/dist/src/core/schema/loader.js.map +0 -1
- package/dist/src/core/schema/normalize.d.ts +0 -72
- package/dist/src/core/schema/normalize.d.ts.map +0 -1
- package/dist/src/core/schema/normalize.js +0 -190
- package/dist/src/core/schema/normalize.js.map +0 -1
- package/dist/src/core/schema/types.d.ts.map +0 -1
- package/dist/src/core/schema/types.js +0 -161
- package/dist/src/core/schema/types.js.map +0 -1
- package/dist/src/dsl/index.d.ts +0 -152
- package/dist/src/dsl/index.d.ts.map +0 -1
- package/dist/src/dsl/index.js +0 -132
- package/dist/src/dsl/index.js.map +0 -1
- package/dist/src/dsl.d.ts +0 -124
- package/dist/src/dsl.d.ts.map +0 -1
- package/dist/src/dsl.js +0 -130
- package/dist/src/dsl.js.map +0 -1
- package/dist/src/examples/advanced-todo/index.d.ts +0 -55
- package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/src/examples/advanced-todo/index.js +0 -222
- package/dist/src/examples/advanced-todo/index.js.map +0 -1
- package/dist/src/examples/auth-basic/index.d.ts +0 -17
- package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/src/examples/auth-basic/index.js +0 -122
- package/dist/src/examples/auth-basic/index.js.map +0 -1
- package/dist/src/examples/cart/index.d.ts +0 -19
- package/dist/src/examples/cart/index.d.ts.map +0 -1
- package/dist/src/examples/cart/index.js +0 -202
- package/dist/src/examples/cart/index.js.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.js +0 -506
- package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/src/examples/svelte-counter/index.d.ts +0 -31
- package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/src/examples/svelte-counter/index.js +0 -123
- package/dist/src/examples/svelte-counter/index.js.map +0 -1
- package/dist/src/flows.d.ts +0 -125
- package/dist/src/flows.d.ts.map +0 -1
- package/dist/src/flows.js +0 -160
- package/dist/src/flows.js.map +0 -1
- package/dist/src/index.d.ts +0 -77
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -64
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/code-canvas.d.ts +0 -265
- package/dist/src/integrations/code-canvas.d.ts.map +0 -1
- package/dist/src/integrations/code-canvas.js +0 -451
- package/dist/src/integrations/code-canvas.js.map +0 -1
- package/dist/src/integrations/pluresdb.d.ts +0 -117
- package/dist/src/integrations/pluresdb.d.ts.map +0 -1
- package/dist/src/integrations/pluresdb.js +0 -117
- package/dist/src/integrations/pluresdb.js.map +0 -1
- package/dist/src/integrations/state-docs.d.ts +0 -191
- package/dist/src/integrations/state-docs.d.ts.map +0 -1
- package/dist/src/integrations/state-docs.js +0 -515
- package/dist/src/integrations/state-docs.js.map +0 -1
- package/dist/src/integrations/svelte.d.ts.map +0 -1
- package/dist/src/integrations/svelte.js +0 -447
- package/dist/src/integrations/svelte.js.map +0 -1
- package/dist/src/integrations/tauri.d.ts +0 -360
- package/dist/src/integrations/tauri.d.ts.map +0 -1
- package/dist/src/integrations/tauri.js +0 -278
- package/dist/src/integrations/tauri.js.map +0 -1
- package/dist/src/integrations/unum.d.ts +0 -159
- package/dist/src/integrations/unum.d.ts.map +0 -1
- package/dist/src/integrations/unum.js +0 -240
- package/dist/src/integrations/unum.js.map +0 -1
- package/dist/src/registry.d.ts +0 -94
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -181
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/src/runtime/terminal-adapter.js +0 -239
- package/dist/src/runtime/terminal-adapter.js.map +0 -1
- package/dist/src/step.d.ts +0 -34
- package/dist/src/step.d.ts.map +0 -1
- package/dist/src/step.js +0 -111
- package/dist/src/step.js.map +0 -1
- package/dist/src/types.d.ts +0 -63
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -6
- package/dist/src/types.js.map +0 -1
- package/dist/tools/cli/commands/index.d.ts +0 -7
- package/dist/tools/cli/commands/index.d.ts.map +0 -1
- package/dist/tools/cli/commands/index.js +0 -7
- package/dist/tools/cli/commands/index.js.map +0 -1
- package/dist/tools/cli/index.d.ts +0 -8
- package/dist/tools/cli/index.d.ts.map +0 -1
- package/dist/tools/cli/index.js +0 -9
- package/dist/tools/cli/index.js.map +0 -1
- package/dist/tools/watcher/index.d.ts +0 -105
- package/dist/tools/watcher/index.d.ts.map +0 -1
- package/dist/tools/watcher/index.js +0 -213
- package/dist/tools/watcher/index.js.map +0 -1
- package/dist/ui/canvas/canvas-projection.d.ts +0 -78
- package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-projection.js +0 -416
- package/dist/ui/canvas/canvas-projection.js.map +0 -1
- package/dist/ui/canvas/canvas-state.d.ts +0 -200
- package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-state.js +0 -464
- package/dist/ui/canvas/canvas-state.js.map +0 -1
- package/dist/ui/canvas/components/index.d.ts +0 -95
- package/dist/ui/canvas/components/index.d.ts.map +0 -1
- package/dist/ui/canvas/components/index.js +0 -19
- package/dist/ui/canvas/components/index.js.map +0 -1
- package/dist/ui/canvas/index.d.ts +0 -32
- package/dist/ui/canvas/index.d.ts.map +0 -1
- package/dist/ui/canvas/index.js +0 -32
- package/dist/ui/canvas/index.js.map +0 -1
- package/dist/ui/svelte-generator/index.d.ts +0 -9
- package/dist/ui/svelte-generator/index.d.ts.map +0 -1
- package/dist/ui/svelte-generator/index.js +0 -11
- package/dist/ui/svelte-generator/index.js.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.js +0 -506
- package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Praxis Logic Generator
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Generates logic module code from schema definitions.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import type {
|
|
8
|
-
FactDefinition,
|
|
9
|
-
EventDefinition,
|
|
10
|
-
RuleDefinition,
|
|
11
|
-
} from '../schema/types.js';
|
|
7
|
+
import type { FactDefinition, EventDefinition, RuleDefinition } from '../schema/types.js';
|
|
12
8
|
import type { NormalizedSchema } from '../schema/normalize.js';
|
|
13
9
|
|
|
14
10
|
/**
|
|
@@ -40,7 +36,7 @@ export interface GeneratedLogicFile {
|
|
|
40
36
|
*/
|
|
41
37
|
export class LogicGenerator {
|
|
42
38
|
private options: LogicGeneratorOptions;
|
|
43
|
-
|
|
39
|
+
|
|
44
40
|
constructor(options: LogicGeneratorOptions) {
|
|
45
41
|
this.options = {
|
|
46
42
|
typescript: true,
|
|
@@ -48,16 +44,16 @@ export class LogicGenerator {
|
|
|
48
44
|
...options,
|
|
49
45
|
};
|
|
50
46
|
}
|
|
51
|
-
|
|
47
|
+
|
|
52
48
|
/**
|
|
53
49
|
* Generate all logic files from schema
|
|
54
50
|
*/
|
|
55
51
|
generateLogic(schema: NormalizedSchema): GeneratedLogicFile[] {
|
|
56
52
|
const files: GeneratedLogicFile[] = [];
|
|
57
|
-
|
|
53
|
+
|
|
58
54
|
// Collect all logic definitions
|
|
59
55
|
const allLogic = schema.logic || [];
|
|
60
|
-
|
|
56
|
+
|
|
61
57
|
if (allLogic.length === 0) {
|
|
62
58
|
// Generate minimal structure even without logic definitions
|
|
63
59
|
files.push(this.generateFactsFile([]));
|
|
@@ -67,49 +63,51 @@ export class LogicGenerator {
|
|
|
67
63
|
files.push(this.generateIndexFile());
|
|
68
64
|
return files;
|
|
69
65
|
}
|
|
70
|
-
|
|
66
|
+
|
|
71
67
|
// Collect all facts, events, and rules from logic definitions
|
|
72
68
|
const allFacts = allLogic.flatMap((logic) => logic.facts || []);
|
|
73
69
|
const allEvents = allLogic.flatMap((logic) => logic.events || []);
|
|
74
70
|
const allRules = allLogic.flatMap((logic) => logic.rules || []);
|
|
75
|
-
|
|
71
|
+
|
|
76
72
|
// Generate individual files
|
|
77
73
|
files.push(this.generateFactsFile(allFacts));
|
|
78
74
|
files.push(this.generateEventsFile(allEvents));
|
|
79
75
|
files.push(this.generateRulesFile(allRules));
|
|
80
76
|
files.push(this.generateEngineFile(schema));
|
|
81
77
|
files.push(this.generateIndexFile());
|
|
82
|
-
|
|
78
|
+
|
|
83
79
|
return files;
|
|
84
80
|
}
|
|
85
|
-
|
|
81
|
+
|
|
86
82
|
/**
|
|
87
83
|
* Generate facts.ts file
|
|
88
84
|
*/
|
|
89
85
|
private generateFactsFile(facts: FactDefinition[]): GeneratedLogicFile {
|
|
90
86
|
const ext = this.options.typescript ? 'ts' : 'js';
|
|
91
87
|
const lines: string[] = [];
|
|
92
|
-
|
|
88
|
+
|
|
93
89
|
lines.push("import { defineFact } from '@plures/praxis';");
|
|
94
90
|
lines.push('');
|
|
95
|
-
|
|
91
|
+
|
|
96
92
|
if (this.options.includeDocs) {
|
|
97
93
|
lines.push('/**');
|
|
98
94
|
lines.push(' * Fact definitions');
|
|
99
95
|
lines.push(' */');
|
|
100
96
|
lines.push('');
|
|
101
97
|
}
|
|
102
|
-
|
|
98
|
+
|
|
103
99
|
if (facts.length === 0) {
|
|
104
100
|
lines.push('// No facts defined in schema');
|
|
105
101
|
lines.push('// Example:');
|
|
106
|
-
lines.push(
|
|
102
|
+
lines.push(
|
|
103
|
+
'// export const UserCreated = defineFact<"UserCreated", { userId: string }>("UserCreated");'
|
|
104
|
+
);
|
|
107
105
|
} else {
|
|
108
106
|
for (const fact of facts) {
|
|
109
107
|
if (this.options.includeDocs && fact.description) {
|
|
110
108
|
lines.push(`/** ${fact.description} */`);
|
|
111
109
|
}
|
|
112
|
-
|
|
110
|
+
|
|
113
111
|
const payloadType = this.generatePayloadType(fact.payload);
|
|
114
112
|
lines.push(
|
|
115
113
|
`export const ${fact.tag} = defineFact<"${fact.tag}", ${payloadType}>("${fact.tag}");`
|
|
@@ -117,41 +115,43 @@ export class LogicGenerator {
|
|
|
117
115
|
lines.push('');
|
|
118
116
|
}
|
|
119
117
|
}
|
|
120
|
-
|
|
118
|
+
|
|
121
119
|
return {
|
|
122
120
|
path: `${this.options.outputDir}/facts.${ext}`,
|
|
123
121
|
content: lines.join('\n'),
|
|
124
122
|
type: 'facts',
|
|
125
123
|
};
|
|
126
124
|
}
|
|
127
|
-
|
|
125
|
+
|
|
128
126
|
/**
|
|
129
127
|
* Generate events.ts file
|
|
130
128
|
*/
|
|
131
129
|
private generateEventsFile(events: EventDefinition[]): GeneratedLogicFile {
|
|
132
130
|
const ext = this.options.typescript ? 'ts' : 'js';
|
|
133
131
|
const lines: string[] = [];
|
|
134
|
-
|
|
132
|
+
|
|
135
133
|
lines.push("import { defineEvent } from '@plures/praxis';");
|
|
136
134
|
lines.push('');
|
|
137
|
-
|
|
135
|
+
|
|
138
136
|
if (this.options.includeDocs) {
|
|
139
137
|
lines.push('/**');
|
|
140
138
|
lines.push(' * Event definitions');
|
|
141
139
|
lines.push(' */');
|
|
142
140
|
lines.push('');
|
|
143
141
|
}
|
|
144
|
-
|
|
142
|
+
|
|
145
143
|
if (events.length === 0) {
|
|
146
144
|
lines.push('// No events defined in schema');
|
|
147
145
|
lines.push('// Example:');
|
|
148
|
-
lines.push(
|
|
146
|
+
lines.push(
|
|
147
|
+
'// export const CreateUser = defineEvent<"CREATE_USER", { name: string; email: string }>("CREATE_USER");'
|
|
148
|
+
);
|
|
149
149
|
} else {
|
|
150
150
|
for (const event of events) {
|
|
151
151
|
if (this.options.includeDocs && event.description) {
|
|
152
152
|
lines.push(`/** ${event.description} */`);
|
|
153
153
|
}
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
const payloadType = this.generatePayloadType(event.payload);
|
|
156
156
|
lines.push(
|
|
157
157
|
`export const ${event.tag} = defineEvent<"${event.tag}", ${payloadType}>("${event.tag}");`
|
|
@@ -159,33 +159,33 @@ export class LogicGenerator {
|
|
|
159
159
|
lines.push('');
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
|
|
162
|
+
|
|
163
163
|
return {
|
|
164
164
|
path: `${this.options.outputDir}/events.${ext}`,
|
|
165
165
|
content: lines.join('\n'),
|
|
166
166
|
type: 'events',
|
|
167
167
|
};
|
|
168
168
|
}
|
|
169
|
-
|
|
169
|
+
|
|
170
170
|
/**
|
|
171
171
|
* Generate rules.ts file
|
|
172
172
|
*/
|
|
173
173
|
private generateRulesFile(rules: RuleDefinition[]): GeneratedLogicFile {
|
|
174
174
|
const ext = this.options.typescript ? 'ts' : 'js';
|
|
175
175
|
const lines: string[] = [];
|
|
176
|
-
|
|
176
|
+
|
|
177
177
|
lines.push("import { defineRule } from '@plures/praxis';");
|
|
178
178
|
lines.push("import * as Facts from './facts.js';");
|
|
179
179
|
lines.push("import * as Events from './events.js';");
|
|
180
180
|
lines.push('');
|
|
181
|
-
|
|
181
|
+
|
|
182
182
|
if (this.options.includeDocs) {
|
|
183
183
|
lines.push('/**');
|
|
184
184
|
lines.push(' * Rule definitions');
|
|
185
185
|
lines.push(' */');
|
|
186
186
|
lines.push('');
|
|
187
187
|
}
|
|
188
|
-
|
|
188
|
+
|
|
189
189
|
if (rules.length === 0) {
|
|
190
190
|
lines.push('// No rules defined in schema');
|
|
191
191
|
lines.push('// Example:');
|
|
@@ -207,42 +207,42 @@ export class LogicGenerator {
|
|
|
207
207
|
if (this.options.includeDocs && rule.description) {
|
|
208
208
|
lines.push(`/** ${rule.description} */`);
|
|
209
209
|
}
|
|
210
|
-
|
|
210
|
+
|
|
211
211
|
lines.push(`export const ${this.sanitizeIdentifier(rule.id)}Rule = defineRule({`);
|
|
212
212
|
lines.push(` id: '${rule.id}',`);
|
|
213
213
|
lines.push(` description: '${rule.description}',`);
|
|
214
|
-
|
|
214
|
+
|
|
215
215
|
if (rule.priority !== undefined) {
|
|
216
216
|
lines.push(` priority: ${rule.priority},`);
|
|
217
217
|
}
|
|
218
|
-
|
|
218
|
+
|
|
219
219
|
// Generate implementation based on rule definition
|
|
220
220
|
const eventTriggers = rule.on || [];
|
|
221
221
|
const condition = rule.when || 'true';
|
|
222
222
|
const action = rule.then;
|
|
223
|
-
|
|
223
|
+
|
|
224
224
|
lines.push(' impl: (state, events) => {');
|
|
225
|
-
|
|
225
|
+
|
|
226
226
|
// Add event filtering if triggers are specified
|
|
227
227
|
if (eventTriggers.length > 0) {
|
|
228
228
|
lines.push(` // Filter for triggering events: ${eventTriggers.join(', ')}`);
|
|
229
229
|
lines.push(` const triggerEvents = events.filter(e => `);
|
|
230
|
-
lines.push(` [${eventTriggers.map(e => `'${e}'`).join(', ')}].includes(e.tag)`);
|
|
230
|
+
lines.push(` [${eventTriggers.map((e) => `'${e}'`).join(', ')}].includes(e.tag)`);
|
|
231
231
|
lines.push(' );');
|
|
232
232
|
lines.push(' if (triggerEvents.length === 0) return [];');
|
|
233
233
|
lines.push('');
|
|
234
234
|
}
|
|
235
|
-
|
|
235
|
+
|
|
236
236
|
// Add condition check
|
|
237
237
|
if (condition && condition !== 'true') {
|
|
238
238
|
lines.push(` // Condition: ${condition}`);
|
|
239
239
|
lines.push(` // Implement condition logic here`);
|
|
240
240
|
lines.push('');
|
|
241
241
|
}
|
|
242
|
-
|
|
242
|
+
|
|
243
243
|
// Parse action to generate appropriate response
|
|
244
244
|
lines.push(` // Action: ${action}`);
|
|
245
|
-
|
|
245
|
+
|
|
246
246
|
// Try to generate a fact from the action
|
|
247
247
|
const factMatch = action.match(/emit\s*\(\s*['"](\w+)['"]/);
|
|
248
248
|
if (factMatch) {
|
|
@@ -255,12 +255,12 @@ export class LogicGenerator {
|
|
|
255
255
|
// Default: return empty array
|
|
256
256
|
lines.push(' return [];');
|
|
257
257
|
}
|
|
258
|
-
|
|
258
|
+
|
|
259
259
|
lines.push(' },');
|
|
260
260
|
lines.push('});');
|
|
261
261
|
lines.push('');
|
|
262
262
|
}
|
|
263
|
-
|
|
263
|
+
|
|
264
264
|
// Export all rules as array
|
|
265
265
|
lines.push('export const rules = [');
|
|
266
266
|
for (const rule of rules) {
|
|
@@ -268,25 +268,25 @@ export class LogicGenerator {
|
|
|
268
268
|
}
|
|
269
269
|
lines.push('];');
|
|
270
270
|
}
|
|
271
|
-
|
|
271
|
+
|
|
272
272
|
return {
|
|
273
273
|
path: `${this.options.outputDir}/rules.${ext}`,
|
|
274
274
|
content: lines.join('\n'),
|
|
275
275
|
type: 'rules',
|
|
276
276
|
};
|
|
277
277
|
}
|
|
278
|
-
|
|
278
|
+
|
|
279
279
|
/**
|
|
280
280
|
* Generate engine.ts file
|
|
281
281
|
*/
|
|
282
282
|
private generateEngineFile(schema: NormalizedSchema): GeneratedLogicFile {
|
|
283
283
|
const ext = this.options.typescript ? 'ts' : 'js';
|
|
284
284
|
const lines: string[] = [];
|
|
285
|
-
|
|
285
|
+
|
|
286
286
|
lines.push("import { createPraxisEngine, PraxisRegistry } from '@plures/praxis';");
|
|
287
287
|
lines.push("import { rules } from './rules.js';");
|
|
288
288
|
lines.push('');
|
|
289
|
-
|
|
289
|
+
|
|
290
290
|
if (this.options.includeDocs) {
|
|
291
291
|
lines.push('/**');
|
|
292
292
|
lines.push(` * ${schema.name} Logic Engine`);
|
|
@@ -296,14 +296,14 @@ export class LogicGenerator {
|
|
|
296
296
|
lines.push(' */');
|
|
297
297
|
lines.push('');
|
|
298
298
|
}
|
|
299
|
-
|
|
299
|
+
|
|
300
300
|
// Generate context type from models
|
|
301
301
|
if (this.options.typescript) {
|
|
302
302
|
lines.push('/**');
|
|
303
303
|
lines.push(' * Application context type');
|
|
304
304
|
lines.push(' */');
|
|
305
305
|
lines.push('export interface AppContext {');
|
|
306
|
-
|
|
306
|
+
|
|
307
307
|
if (schema.models && schema.models.length > 0) {
|
|
308
308
|
for (const model of schema.models) {
|
|
309
309
|
lines.push(` ${model.name.toLowerCase()}s: ${model.name}[];`);
|
|
@@ -311,10 +311,10 @@ export class LogicGenerator {
|
|
|
311
311
|
} else {
|
|
312
312
|
lines.push(' // Add your context properties here');
|
|
313
313
|
}
|
|
314
|
-
|
|
314
|
+
|
|
315
315
|
lines.push('}');
|
|
316
316
|
lines.push('');
|
|
317
|
-
|
|
317
|
+
|
|
318
318
|
// Generate model types
|
|
319
319
|
if (schema.models && schema.models.length > 0) {
|
|
320
320
|
for (const model of schema.models) {
|
|
@@ -329,7 +329,7 @@ export class LogicGenerator {
|
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
331
|
}
|
|
332
|
-
|
|
332
|
+
|
|
333
333
|
// Create registry and engine
|
|
334
334
|
lines.push('/**');
|
|
335
335
|
lines.push(' * Create the logic engine');
|
|
@@ -344,7 +344,7 @@ export class LogicGenerator {
|
|
|
344
344
|
lines.push('');
|
|
345
345
|
lines.push(' // Create engine with initial context');
|
|
346
346
|
lines.push(' const initialContext: AppContext = {');
|
|
347
|
-
|
|
347
|
+
|
|
348
348
|
if (schema.models && schema.models.length > 0) {
|
|
349
349
|
for (const model of schema.models) {
|
|
350
350
|
lines.push(` ${model.name.toLowerCase()}s: [],`);
|
|
@@ -352,7 +352,7 @@ export class LogicGenerator {
|
|
|
352
352
|
} else {
|
|
353
353
|
lines.push(' // Initialize your context here');
|
|
354
354
|
}
|
|
355
|
-
|
|
355
|
+
|
|
356
356
|
lines.push(' };');
|
|
357
357
|
lines.push('');
|
|
358
358
|
lines.push(' return createPraxisEngine({');
|
|
@@ -360,33 +360,33 @@ export class LogicGenerator {
|
|
|
360
360
|
lines.push(' registry,');
|
|
361
361
|
lines.push(' });');
|
|
362
362
|
lines.push('}');
|
|
363
|
-
|
|
363
|
+
|
|
364
364
|
return {
|
|
365
365
|
path: `${this.options.outputDir}/engine.${ext}`,
|
|
366
366
|
content: lines.join('\n'),
|
|
367
367
|
type: 'engine',
|
|
368
368
|
};
|
|
369
369
|
}
|
|
370
|
-
|
|
370
|
+
|
|
371
371
|
/**
|
|
372
372
|
* Generate index.ts file
|
|
373
373
|
*/
|
|
374
374
|
private generateIndexFile(): GeneratedLogicFile {
|
|
375
375
|
const ext = this.options.typescript ? 'ts' : 'js';
|
|
376
376
|
const lines: string[] = [];
|
|
377
|
-
|
|
377
|
+
|
|
378
378
|
lines.push("export * from './facts.js';");
|
|
379
379
|
lines.push("export * from './events.js';");
|
|
380
380
|
lines.push("export * from './rules.js';");
|
|
381
381
|
lines.push("export * from './engine.js';");
|
|
382
|
-
|
|
382
|
+
|
|
383
383
|
return {
|
|
384
384
|
path: `${this.options.outputDir}/index.${ext}`,
|
|
385
385
|
content: lines.join('\n'),
|
|
386
386
|
type: 'index',
|
|
387
387
|
};
|
|
388
388
|
}
|
|
389
|
-
|
|
389
|
+
|
|
390
390
|
/**
|
|
391
391
|
* Generate TypeScript type from payload definition
|
|
392
392
|
*/
|
|
@@ -396,7 +396,7 @@ export class LogicGenerator {
|
|
|
396
396
|
.join('; ');
|
|
397
397
|
return `{ ${fields} }`;
|
|
398
398
|
}
|
|
399
|
-
|
|
399
|
+
|
|
400
400
|
/**
|
|
401
401
|
* Map field type to TypeScript type
|
|
402
402
|
*/
|
|
@@ -419,7 +419,7 @@ export class LogicGenerator {
|
|
|
419
419
|
return 'unknown';
|
|
420
420
|
}
|
|
421
421
|
}
|
|
422
|
-
|
|
422
|
+
|
|
423
423
|
if (typeof type === 'object') {
|
|
424
424
|
if ('array' in type) {
|
|
425
425
|
const innerType = this.mapFieldType(type.array);
|
|
@@ -429,10 +429,10 @@ export class LogicGenerator {
|
|
|
429
429
|
return type.reference;
|
|
430
430
|
}
|
|
431
431
|
}
|
|
432
|
-
|
|
432
|
+
|
|
433
433
|
return 'unknown';
|
|
434
434
|
}
|
|
435
|
-
|
|
435
|
+
|
|
436
436
|
/**
|
|
437
437
|
* Sanitize identifier for variable names
|
|
438
438
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PraxisDB Adapter
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Provides a minimal adapter layer for PluresDB integration.
|
|
5
5
|
* This module defines the core interface and an in-memory implementation.
|
|
6
6
|
*/
|
|
@@ -12,7 +12,7 @@ export type UnsubscribeFn = () => void;
|
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Core database interface for Praxis
|
|
15
|
-
*
|
|
15
|
+
*
|
|
16
16
|
* Provides a minimal API for get/set/watch operations.
|
|
17
17
|
* Can be backed by in-memory storage or PluresDB.
|
|
18
18
|
*/
|
|
@@ -42,7 +42,7 @@ export interface PraxisDB {
|
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* In-memory implementation of PraxisDB
|
|
45
|
-
*
|
|
45
|
+
*
|
|
46
46
|
* Provides a simple in-memory store for development and testing.
|
|
47
47
|
* Suitable for proxying to PluresDB later.
|
|
48
48
|
*/
|
|
@@ -56,7 +56,7 @@ export class InMemoryPraxisDB implements PraxisDB {
|
|
|
56
56
|
|
|
57
57
|
async set<T>(key: string, value: T): Promise<void> {
|
|
58
58
|
this.store.set(key, value);
|
|
59
|
-
|
|
59
|
+
|
|
60
60
|
// Notify watchers
|
|
61
61
|
const keyWatchers = this.watchers.get(key);
|
|
62
62
|
if (keyWatchers) {
|
|
@@ -70,11 +70,11 @@ export class InMemoryPraxisDB implements PraxisDB {
|
|
|
70
70
|
if (!this.watchers.has(key)) {
|
|
71
71
|
this.watchers.set(key, new Set());
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
const watchers = this.watchers.get(key)!;
|
|
75
75
|
const wrappedCallback = (val: unknown) => callback(val as T);
|
|
76
76
|
watchers.add(wrappedCallback);
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
// Return unsubscribe function
|
|
79
79
|
return () => {
|
|
80
80
|
watchers.delete(wrappedCallback);
|
|
@@ -102,9 +102,9 @@ export class InMemoryPraxisDB implements PraxisDB {
|
|
|
102
102
|
|
|
103
103
|
/**
|
|
104
104
|
* Create a new in-memory PraxisDB instance
|
|
105
|
-
*
|
|
105
|
+
*
|
|
106
106
|
* @returns InMemoryPraxisDB instance
|
|
107
|
-
*
|
|
107
|
+
*
|
|
108
108
|
* @example
|
|
109
109
|
* ```typescript
|
|
110
110
|
* const db = createInMemoryDB();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* PluresDB Config Generator
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Generates PluresDB configuration from schema definitions.
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -49,7 +49,7 @@ interface StoreDefinition {
|
|
|
49
49
|
*/
|
|
50
50
|
export class PluresDBGenerator {
|
|
51
51
|
private options: PluresDBGeneratorOptions;
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
constructor(options: PluresDBGeneratorOptions) {
|
|
54
54
|
this.options = {
|
|
55
55
|
dbVersion: 1,
|
|
@@ -58,41 +58,41 @@ export class PluresDBGenerator {
|
|
|
58
58
|
...options,
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
/**
|
|
63
63
|
* Generate PluresDB configuration from schema
|
|
64
64
|
*/
|
|
65
65
|
generateConfig(schema: NormalizedSchema): GeneratedPluresDBFile[] {
|
|
66
66
|
const files: GeneratedPluresDBFile[] = [];
|
|
67
|
-
|
|
67
|
+
|
|
68
68
|
// Generate the main config file
|
|
69
69
|
files.push(this.generateConfigFile(schema));
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
return files;
|
|
72
72
|
}
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
/**
|
|
75
75
|
* Generate pluresdb-config.ts file
|
|
76
76
|
*/
|
|
77
77
|
private generateConfigFile(schema: NormalizedSchema): GeneratedPluresDBFile {
|
|
78
78
|
const lines: string[] = [];
|
|
79
79
|
const dbName = this.options.dbName || schema.name.toLowerCase();
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
lines.push('/**');
|
|
82
82
|
lines.push(` * PluresDB Configuration for ${schema.name}`);
|
|
83
83
|
lines.push(' * Generated from Praxis schema');
|
|
84
84
|
lines.push(' */');
|
|
85
85
|
lines.push('');
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
// Import statement (for future PluresDB integration)
|
|
88
|
-
lines.push(
|
|
88
|
+
lines.push("// import { createPluresDB } from '@plures/pluresdb';");
|
|
89
89
|
lines.push('');
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
// Generate store definitions
|
|
92
92
|
lines.push('/**');
|
|
93
93
|
lines.push(' * Database store configuration');
|
|
94
94
|
lines.push(' * ');
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
// Document indexing behavior based on configuration
|
|
97
97
|
const autoIndexStrategy = this.options.autoIndex || 'all';
|
|
98
98
|
if (autoIndexStrategy === 'all') {
|
|
@@ -106,28 +106,28 @@ export class PluresDBGenerator {
|
|
|
106
106
|
}
|
|
107
107
|
lines.push(' */');
|
|
108
108
|
lines.push('export const stores = {');
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
if (schema.models && schema.models.length > 0) {
|
|
111
111
|
for (const model of schema.models) {
|
|
112
112
|
const storeName = model.name.toLowerCase() + 's';
|
|
113
113
|
const storeConfig = this.generateStoreConfig(model);
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
lines.push(` ${storeName}: {`);
|
|
116
116
|
lines.push(` keyPath: '${storeConfig.keyPath}',`);
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
if (storeConfig.indexes.length > 0) {
|
|
119
|
-
lines.push(` indexes: [${storeConfig.indexes.map(idx => `'${idx}'`).join(', ')}],`);
|
|
119
|
+
lines.push(` indexes: [${storeConfig.indexes.map((idx) => `'${idx}'`).join(', ')}],`);
|
|
120
120
|
}
|
|
121
|
-
|
|
121
|
+
|
|
122
122
|
lines.push(' },');
|
|
123
123
|
}
|
|
124
124
|
} else {
|
|
125
125
|
lines.push(' // No models defined in schema');
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
lines.push('};');
|
|
129
129
|
lines.push('');
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
// Generate main config
|
|
132
132
|
lines.push('/**');
|
|
133
133
|
lines.push(' * Database configuration');
|
|
@@ -136,24 +136,24 @@ export class PluresDBGenerator {
|
|
|
136
136
|
lines.push(` name: '${dbName}',`);
|
|
137
137
|
lines.push(` version: ${this.options.dbVersion},`);
|
|
138
138
|
lines.push(' stores,');
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
if (this.options.enableSync) {
|
|
141
141
|
lines.push(' sync: {');
|
|
142
142
|
lines.push(' enabled: true,');
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
if (this.options.syncEndpoint) {
|
|
145
145
|
lines.push(` endpoint: '${this.options.syncEndpoint}',`);
|
|
146
146
|
} else {
|
|
147
|
-
lines.push(
|
|
147
|
+
lines.push(" endpoint: 'ws://localhost:8080/sync',");
|
|
148
148
|
}
|
|
149
|
-
|
|
150
|
-
lines.push(
|
|
149
|
+
|
|
150
|
+
lines.push(" conflictResolution: 'last-write-wins',");
|
|
151
151
|
lines.push(' },');
|
|
152
152
|
}
|
|
153
|
-
|
|
153
|
+
|
|
154
154
|
lines.push('};');
|
|
155
155
|
lines.push('');
|
|
156
|
-
|
|
156
|
+
|
|
157
157
|
// Generate initialization function
|
|
158
158
|
lines.push('/**');
|
|
159
159
|
lines.push(' * Initialize PluresDB');
|
|
@@ -180,40 +180,44 @@ export class PluresDBGenerator {
|
|
|
180
180
|
lines.push('/**');
|
|
181
181
|
lines.push(' * Get store by name');
|
|
182
182
|
lines.push(' */');
|
|
183
|
-
lines.push(
|
|
183
|
+
lines.push(
|
|
184
|
+
'export function getStore(db: ReturnType<typeof createInMemoryDB>, storeName: string) {'
|
|
185
|
+
);
|
|
184
186
|
lines.push(' const storeDef = dbConfig.stores.find(s => s.name === storeName);');
|
|
185
187
|
lines.push(' if (!storeDef) {');
|
|
186
188
|
lines.push(' throw new Error(`Store "${storeName}" not found in configuration`);');
|
|
187
189
|
lines.push(' }');
|
|
188
190
|
lines.push(' return {');
|
|
189
191
|
lines.push(' get: (key: string) => db.get(`stores/${storeName}/${key}`),');
|
|
190
|
-
lines.push(
|
|
192
|
+
lines.push(
|
|
193
|
+
' set: (key: string, value: unknown) => db.set(`stores/${storeName}/${key}`, value),'
|
|
194
|
+
);
|
|
191
195
|
lines.push(' delete: (key: string) => db.delete(`stores/${storeName}/${key}`),');
|
|
192
196
|
lines.push(' watch: (key: string, callback: (data: unknown) => void) => ');
|
|
193
197
|
lines.push(' db.watch(`stores/${storeName}/${key}`, callback),');
|
|
194
198
|
lines.push(' };');
|
|
195
199
|
lines.push('}');
|
|
196
|
-
|
|
200
|
+
|
|
197
201
|
return {
|
|
198
202
|
path: `${this.options.outputDir}/pluresdb-config.ts`,
|
|
199
203
|
content: lines.join('\n'),
|
|
200
204
|
type: 'config',
|
|
201
205
|
};
|
|
202
206
|
}
|
|
203
|
-
|
|
207
|
+
|
|
204
208
|
/**
|
|
205
209
|
* Generate store configuration for a model
|
|
206
210
|
*/
|
|
207
211
|
private generateStoreConfig(model: NormalizedModel): StoreDefinition {
|
|
208
212
|
// Find the ID field (or use 'id' as default)
|
|
209
|
-
const idField = model.fields.find(f => f.name === 'id' || f.name === '_id');
|
|
213
|
+
const idField = model.fields.find((f) => f.name === 'id' || f.name === '_id');
|
|
210
214
|
const keyPath = idField ? idField.name : 'id';
|
|
211
|
-
|
|
215
|
+
|
|
212
216
|
const indexes: string[] = [];
|
|
213
|
-
|
|
217
|
+
|
|
214
218
|
// Apply auto-indexing based on configuration
|
|
215
219
|
const autoIndexStrategy = this.options.autoIndex || 'all';
|
|
216
|
-
|
|
220
|
+
|
|
217
221
|
if (autoIndexStrategy === 'all') {
|
|
218
222
|
// Auto-index all string, number, and date fields for query performance
|
|
219
223
|
for (const field of model.fields) {
|
|
@@ -225,7 +229,7 @@ export class PluresDBGenerator {
|
|
|
225
229
|
}
|
|
226
230
|
}
|
|
227
231
|
// For 'explicit' and 'none', we only add indexes explicitly defined in the schema
|
|
228
|
-
|
|
232
|
+
|
|
229
233
|
// Always add indexes from schema index definitions (overrides auto-indexing)
|
|
230
234
|
if (model.indexes) {
|
|
231
235
|
for (const indexDef of model.indexes) {
|
|
@@ -236,7 +240,7 @@ export class PluresDBGenerator {
|
|
|
236
240
|
}
|
|
237
241
|
}
|
|
238
242
|
}
|
|
239
|
-
|
|
243
|
+
|
|
240
244
|
return {
|
|
241
245
|
keyPath,
|
|
242
246
|
indexes,
|