@plures/praxis 0.2.1 → 1.0.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/README.md +188 -61
- package/core/codegen/docs-generator.ts +808 -0
- package/core/codegen/index.ts +27 -0
- package/core/codegen/ts-generator.ts +15 -0
- package/core/db-adapter/index.ts +52 -0
- package/core/db-adapter/sync-engine.ts +450 -0
- package/core/logic-engine/engine.ts +12 -0
- package/core/logic-engine/index.ts +16 -0
- package/core/logic-engine/protocol.ts +16 -0
- package/core/logic-engine/psf-adapter.ts +269 -0
- package/core/logic-engine/rules.ts +16 -0
- package/core/schema-engine/compiler.ts +431 -0
- package/core/schema-engine/generator.ts +635 -0
- package/core/schema-engine/index.ts +18 -0
- package/core/schema-engine/psf.ts +664 -0
- package/core/schema-engine/types.ts +63 -0
- package/core/schema-engine/validator.ts +541 -0
- package/dist/core/codegen/docs-generator.d.ts +123 -0
- package/dist/core/codegen/docs-generator.d.ts.map +1 -0
- package/dist/core/codegen/docs-generator.js +674 -0
- package/dist/core/codegen/docs-generator.js.map +1 -0
- package/dist/core/codegen/index.d.ts +11 -0
- package/dist/core/codegen/index.d.ts.map +1 -0
- package/dist/core/codegen/index.js +13 -0
- package/dist/core/codegen/index.js.map +1 -0
- package/dist/core/codegen/ts-generator.d.ts +8 -0
- package/dist/core/codegen/ts-generator.d.ts.map +1 -0
- package/dist/core/codegen/ts-generator.js +8 -0
- package/dist/core/codegen/ts-generator.js.map +1 -0
- package/dist/core/db-adapter/index.d.ts +18 -0
- package/dist/core/db-adapter/index.d.ts.map +1 -0
- package/dist/core/db-adapter/index.js +23 -0
- package/dist/core/db-adapter/index.js.map +1 -0
- package/dist/core/db-adapter/sync-engine.d.ts +180 -0
- package/dist/core/db-adapter/sync-engine.d.ts.map +1 -0
- package/dist/core/db-adapter/sync-engine.js +342 -0
- package/dist/core/db-adapter/sync-engine.js.map +1 -0
- package/dist/core/logic-engine/engine.d.ts +8 -0
- package/dist/core/logic-engine/engine.d.ts.map +1 -0
- package/dist/core/logic-engine/engine.js +8 -0
- package/dist/core/logic-engine/engine.js.map +1 -0
- package/dist/core/logic-engine/index.d.ts +16 -0
- package/dist/core/logic-engine/index.d.ts.map +1 -0
- package/dist/core/logic-engine/index.js +16 -0
- package/dist/core/logic-engine/index.js.map +1 -0
- package/dist/core/logic-engine/protocol.d.ts +7 -0
- package/dist/core/logic-engine/protocol.d.ts.map +1 -0
- package/dist/core/logic-engine/protocol.js +7 -0
- package/dist/core/logic-engine/protocol.js.map +1 -0
- package/dist/core/logic-engine/psf-adapter.d.ts +88 -0
- package/dist/core/logic-engine/psf-adapter.d.ts.map +1 -0
- package/dist/core/logic-engine/psf-adapter.js +207 -0
- package/dist/core/logic-engine/psf-adapter.js.map +1 -0
- package/dist/core/logic-engine/rules.d.ts +7 -0
- package/dist/core/logic-engine/rules.d.ts.map +1 -0
- package/dist/core/logic-engine/rules.js +7 -0
- package/dist/core/logic-engine/rules.js.map +1 -0
- package/dist/core/schema-engine/compiler.d.ts +198 -0
- package/dist/core/schema-engine/compiler.d.ts.map +1 -0
- package/dist/core/schema-engine/compiler.js +262 -0
- package/dist/core/schema-engine/compiler.js.map +1 -0
- package/dist/core/schema-engine/generator.d.ts +115 -0
- package/dist/core/schema-engine/generator.d.ts.map +1 -0
- package/dist/core/schema-engine/generator.js +506 -0
- package/dist/core/schema-engine/generator.js.map +1 -0
- package/dist/core/schema-engine/index.d.ts +18 -0
- package/dist/core/schema-engine/index.d.ts.map +1 -0
- package/dist/core/schema-engine/index.js +18 -0
- package/dist/core/schema-engine/index.js.map +1 -0
- package/dist/core/schema-engine/psf.d.ts +612 -0
- package/dist/core/schema-engine/psf.d.ts.map +1 -0
- package/dist/core/schema-engine/psf.js +45 -0
- package/dist/core/schema-engine/psf.js.map +1 -0
- package/dist/core/schema-engine/types.d.ts +10 -0
- package/dist/core/schema-engine/types.d.ts.map +1 -0
- package/dist/core/schema-engine/types.js +7 -0
- package/dist/core/schema-engine/types.js.map +1 -0
- package/dist/core/schema-engine/validator.d.ts +140 -0
- package/dist/core/schema-engine/validator.d.ts.map +1 -0
- package/dist/core/schema-engine/validator.js +407 -0
- package/dist/core/schema-engine/validator.js.map +1 -0
- package/dist/src/adapters/cli.d.ts.map +1 -0
- package/dist/src/adapters/cli.js.map +1 -0
- package/dist/src/cli/commands/auth.d.ts.map +1 -0
- package/dist/src/cli/commands/auth.js.map +1 -0
- package/dist/src/cli/commands/build.d.ts +23 -0
- package/dist/src/cli/commands/build.d.ts.map +1 -0
- package/dist/src/cli/commands/build.js +162 -0
- package/dist/src/cli/commands/build.js.map +1 -0
- package/dist/src/cli/commands/canvas.d.ts +23 -0
- package/dist/src/cli/commands/canvas.d.ts.map +1 -0
- package/dist/src/cli/commands/canvas.js +215 -0
- package/dist/src/cli/commands/canvas.js.map +1 -0
- package/dist/src/cli/commands/cloud.d.ts.map +1 -0
- package/dist/src/cli/commands/cloud.js.map +1 -0
- package/dist/src/cli/commands/create.d.ts +21 -0
- package/dist/src/cli/commands/create.d.ts.map +1 -0
- package/dist/src/cli/commands/create.js +621 -0
- package/dist/src/cli/commands/create.js.map +1 -0
- package/dist/src/cli/commands/dev.d.ts +21 -0
- package/dist/src/cli/commands/dev.d.ts.map +1 -0
- package/dist/src/cli/commands/dev.js +71 -0
- package/dist/src/cli/commands/dev.js.map +1 -0
- package/dist/src/cli/commands/generate.d.ts.map +1 -0
- package/dist/src/cli/commands/generate.js.map +1 -0
- package/dist/src/cli/commands/orchestrate.d.ts +44 -0
- package/dist/src/cli/commands/orchestrate.d.ts.map +1 -0
- package/dist/src/cli/commands/orchestrate.js +150 -0
- package/dist/src/cli/commands/orchestrate.js.map +1 -0
- package/dist/{cli → src/cli}/index.d.ts.map +1 -1
- package/dist/{cli → src/cli}/index.js +53 -21
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cloud/auth.d.ts.map +1 -0
- package/dist/src/cloud/auth.js.map +1 -0
- package/dist/src/cloud/billing.d.ts.map +1 -0
- package/dist/src/cloud/billing.js.map +1 -0
- package/dist/src/cloud/client.d.ts.map +1 -0
- package/dist/src/cloud/client.js.map +1 -0
- package/dist/src/cloud/index.d.ts.map +1 -0
- package/dist/src/cloud/index.js.map +1 -0
- package/dist/src/cloud/marketplace.d.ts.map +1 -0
- package/dist/src/cloud/marketplace.js.map +1 -0
- package/dist/src/cloud/provisioning.d.ts.map +1 -0
- package/dist/src/cloud/provisioning.js.map +1 -0
- package/dist/src/cloud/relay/endpoints.d.ts.map +1 -0
- package/dist/src/cloud/relay/endpoints.js.map +1 -0
- package/dist/src/cloud/relay/health/index.d.ts.map +1 -0
- package/dist/src/cloud/relay/health/index.js.map +1 -0
- package/dist/src/cloud/relay/stats/index.d.ts.map +1 -0
- package/dist/src/cloud/relay/stats/index.js.map +1 -0
- package/dist/src/cloud/relay/sync/index.d.ts.map +1 -0
- package/dist/src/cloud/relay/sync/index.js.map +1 -0
- package/dist/src/cloud/relay/usage/index.d.ts.map +1 -0
- package/dist/src/cloud/relay/usage/index.js.map +1 -0
- package/dist/src/cloud/sponsors.d.ts.map +1 -0
- package/dist/src/cloud/sponsors.js.map +1 -0
- package/dist/src/cloud/types.d.ts.map +1 -0
- package/dist/src/cloud/types.js.map +1 -0
- package/dist/src/components/index.d.ts.map +1 -0
- package/dist/src/components/index.js.map +1 -0
- package/dist/src/core/actors.d.ts.map +1 -0
- package/dist/src/core/actors.js.map +1 -0
- package/dist/src/core/component/generator.d.ts.map +1 -0
- package/dist/{core → src/core}/component/generator.js +45 -3
- package/dist/src/core/component/generator.js.map +1 -0
- package/dist/src/core/engine.d.ts.map +1 -0
- package/dist/src/core/engine.js.map +1 -0
- package/dist/src/core/introspection.d.ts.map +1 -0
- package/dist/src/core/introspection.js.map +1 -0
- package/dist/src/core/logic/generator.d.ts.map +1 -0
- package/dist/{core → src/core}/logic/generator.js +35 -4
- package/dist/src/core/logic/generator.js.map +1 -0
- package/dist/src/core/pluresdb/adapter.d.ts +72 -0
- package/dist/src/core/pluresdb/adapter.d.ts.map +1 -0
- package/dist/src/core/pluresdb/adapter.js +73 -0
- package/dist/src/core/pluresdb/adapter.js.map +1 -0
- package/dist/src/core/pluresdb/generator.d.ts.map +1 -0
- package/dist/{core → src/core}/pluresdb/generator.js +33 -4
- package/dist/src/core/pluresdb/generator.js.map +1 -0
- package/dist/src/core/pluresdb/index.d.ts +15 -0
- package/dist/src/core/pluresdb/index.d.ts.map +1 -0
- package/dist/src/core/pluresdb/index.js +11 -0
- package/dist/src/core/pluresdb/index.js.map +1 -0
- package/dist/src/core/pluresdb/schema-registry.d.ts +104 -0
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +1 -0
- package/dist/src/core/pluresdb/schema-registry.js +130 -0
- package/dist/src/core/pluresdb/schema-registry.js.map +1 -0
- package/dist/src/core/pluresdb/store.d.ts +199 -0
- package/dist/src/core/pluresdb/store.d.ts.map +1 -0
- package/dist/src/core/pluresdb/store.js +344 -0
- package/dist/src/core/pluresdb/store.js.map +1 -0
- package/dist/src/core/protocol.d.ts.map +1 -0
- package/dist/src/core/protocol.js.map +1 -0
- package/dist/src/core/rules.d.ts.map +1 -0
- package/dist/src/core/rules.js.map +1 -0
- package/dist/src/core/schema/loader.d.ts.map +1 -0
- package/dist/src/core/schema/loader.js.map +1 -0
- package/dist/src/core/schema/normalize.d.ts.map +1 -0
- package/dist/src/core/schema/normalize.js.map +1 -0
- package/dist/src/core/schema/types.d.ts.map +1 -0
- package/dist/src/core/schema/types.js.map +1 -0
- package/dist/src/dsl/index.d.ts.map +1 -0
- package/dist/src/dsl/index.js.map +1 -0
- package/dist/src/dsl.d.ts.map +1 -0
- package/dist/src/dsl.js.map +1 -0
- package/dist/src/examples/advanced-todo/index.d.ts.map +1 -0
- package/dist/src/examples/advanced-todo/index.js.map +1 -0
- package/dist/src/examples/auth-basic/index.d.ts.map +1 -0
- package/dist/src/examples/auth-basic/index.js.map +1 -0
- package/dist/src/examples/cart/index.d.ts.map +1 -0
- package/dist/src/examples/cart/index.js.map +1 -0
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +1 -0
- package/dist/src/examples/hero-ecommerce/index.js.map +1 -0
- package/dist/src/examples/svelte-counter/index.d.ts.map +1 -0
- package/dist/src/examples/svelte-counter/index.js.map +1 -0
- package/dist/src/flows.d.ts.map +1 -0
- package/dist/src/flows.js.map +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +12 -2
- package/dist/src/index.d.ts.map +1 -0
- package/dist/{index.js → src/index.js} +6 -1
- package/dist/src/index.js.map +1 -0
- package/dist/src/integrations/code-canvas.d.ts +265 -0
- package/dist/src/integrations/code-canvas.d.ts.map +1 -0
- package/dist/src/integrations/code-canvas.js +451 -0
- package/dist/src/integrations/code-canvas.js.map +1 -0
- package/dist/src/integrations/pluresdb.d.ts +117 -0
- package/dist/src/integrations/pluresdb.d.ts.map +1 -0
- package/dist/src/integrations/pluresdb.js +117 -0
- package/dist/src/integrations/pluresdb.js.map +1 -0
- package/dist/src/integrations/state-docs.d.ts +191 -0
- package/dist/src/integrations/state-docs.d.ts.map +1 -0
- package/dist/src/integrations/state-docs.js +515 -0
- package/dist/src/integrations/state-docs.js.map +1 -0
- package/dist/src/integrations/svelte.d.ts.map +1 -0
- package/dist/src/integrations/svelte.js.map +1 -0
- package/dist/src/integrations/tauri.d.ts +360 -0
- package/dist/src/integrations/tauri.d.ts.map +1 -0
- package/dist/src/integrations/tauri.js +278 -0
- package/dist/src/integrations/tauri.js.map +1 -0
- package/dist/src/integrations/unum.d.ts +159 -0
- package/dist/src/integrations/unum.d.ts.map +1 -0
- package/dist/src/integrations/unum.js +240 -0
- package/dist/src/integrations/unum.js.map +1 -0
- package/dist/src/registry.d.ts.map +1 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/{runtime → src/runtime}/terminal-adapter.d.ts +58 -7
- package/dist/src/runtime/terminal-adapter.d.ts.map +1 -0
- package/dist/src/runtime/terminal-adapter.js +237 -0
- package/dist/src/runtime/terminal-adapter.js.map +1 -0
- package/dist/src/step.d.ts.map +1 -0
- package/dist/src/step.js.map +1 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/{cloud → src}/types.js.map +1 -1
- package/dist/tools/cli/commands/index.d.ts +7 -0
- package/dist/tools/cli/commands/index.d.ts.map +1 -0
- package/dist/tools/cli/commands/index.js +7 -0
- package/dist/tools/cli/commands/index.js.map +1 -0
- package/dist/tools/cli/index.d.ts +8 -0
- package/dist/tools/cli/index.d.ts.map +1 -0
- package/dist/tools/cli/index.js +9 -0
- package/dist/tools/cli/index.js.map +1 -0
- package/dist/tools/watcher/index.d.ts +105 -0
- package/dist/tools/watcher/index.d.ts.map +1 -0
- package/dist/tools/watcher/index.js +213 -0
- package/dist/tools/watcher/index.js.map +1 -0
- package/dist/ui/canvas/canvas-projection.d.ts +78 -0
- package/dist/ui/canvas/canvas-projection.d.ts.map +1 -0
- package/dist/ui/canvas/canvas-projection.js +416 -0
- package/dist/ui/canvas/canvas-projection.js.map +1 -0
- package/dist/ui/canvas/canvas-state.d.ts +200 -0
- package/dist/ui/canvas/canvas-state.d.ts.map +1 -0
- package/dist/ui/canvas/canvas-state.js +464 -0
- package/dist/ui/canvas/canvas-state.js.map +1 -0
- package/dist/ui/canvas/components/index.d.ts +95 -0
- package/dist/ui/canvas/components/index.d.ts.map +1 -0
- package/dist/ui/canvas/components/index.js +19 -0
- package/dist/ui/canvas/components/index.js.map +1 -0
- package/dist/ui/canvas/index.d.ts +32 -0
- package/dist/ui/canvas/index.d.ts.map +1 -0
- package/dist/ui/canvas/index.js +32 -0
- package/dist/ui/canvas/index.js.map +1 -0
- package/dist/ui/svelte-generator/index.d.ts +9 -0
- package/dist/ui/svelte-generator/index.d.ts.map +1 -0
- package/dist/ui/svelte-generator/index.js +11 -0
- package/dist/ui/svelte-generator/index.js.map +1 -0
- package/dist/ui/svelte-generator/psf-generator.d.ts +128 -0
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +1 -0
- package/dist/ui/svelte-generator/psf-generator.js +506 -0
- package/dist/ui/svelte-generator/psf-generator.js.map +1 -0
- package/docs/README.md +155 -0
- package/docs/core/building-extensions.md +553 -0
- package/docs/core/cli-usage.md +498 -0
- package/docs/core/code-canvas-sync.md +468 -0
- package/docs/core/logic-engine.md +566 -0
- package/docs/core/pluresdb-integration.md +646 -0
- package/docs/core/schema-model.md +414 -0
- package/docs/core/ui-generation.md +580 -0
- package/docs/core/what-is-praxis.md +240 -0
- package/docs/tutorials/README.md +84 -0
- package/docs/tutorials/ecommerce-cart.md +631 -0
- package/docs/tutorials/first-app.md +529 -0
- package/docs/tutorials/form-builder.md +620 -0
- package/docs/tutorials/todo-pluresdb.md +589 -0
- package/package.json +1 -1
- package/src/__tests__/canvas-components.test.ts +450 -0
- package/src/__tests__/cli-create.test.ts +178 -0
- package/src/__tests__/code-canvas-integration.test.ts +277 -0
- package/src/__tests__/docs-generator.test.ts +181 -0
- package/src/__tests__/generators.test.ts +3 -2
- package/src/__tests__/pluresdb.test.ts +457 -0
- package/src/__tests__/psf-schema-engine.test.ts +450 -0
- package/src/__tests__/state-docs-integration.test.ts +297 -0
- package/src/__tests__/tauri-integration.test.ts +298 -0
- package/src/__tests__/terminal-node.test.ts +1 -1
- package/src/__tests__/unum-integration.test.ts +142 -0
- package/src/cli/commands/build.ts +203 -0
- package/src/cli/commands/canvas.ts +246 -0
- package/src/cli/commands/create.ts +666 -0
- package/src/cli/commands/dev.ts +95 -0
- package/src/cli/commands/orchestrate.ts +212 -0
- package/src/cli/index.ts +48 -21
- package/src/core/component/generator.ts +45 -3
- package/src/core/logic/generator.ts +39 -4
- package/src/core/pluresdb/adapter.ts +117 -0
- package/src/core/pluresdb/generator.ts +33 -4
- package/src/core/pluresdb/index.ts +37 -0
- package/src/core/pluresdb/schema-registry.ts +162 -0
- package/src/core/pluresdb/store.ts +443 -0
- package/src/index.ts +109 -0
- package/src/integrations/code-canvas.ts +717 -0
- package/src/integrations/pluresdb.ts +140 -29
- package/src/integrations/state-docs.ts +710 -0
- package/src/integrations/tauri.ts +638 -0
- package/src/integrations/unum.ts +395 -0
- package/src/runtime/terminal-adapter.ts +178 -23
- package/dist/adapters/cli.d.ts.map +0 -1
- package/dist/adapters/cli.js.map +0 -1
- package/dist/cli/commands/auth.d.ts.map +0 -1
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/cloud.d.ts.map +0 -1
- package/dist/cli/commands/cloud.js.map +0 -1
- package/dist/cli/commands/generate.d.ts.map +0 -1
- package/dist/cli/commands/generate.js.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cloud/auth.d.ts.map +0 -1
- package/dist/cloud/auth.js.map +0 -1
- package/dist/cloud/billing.d.ts.map +0 -1
- package/dist/cloud/billing.js.map +0 -1
- package/dist/cloud/client.d.ts.map +0 -1
- package/dist/cloud/client.js.map +0 -1
- package/dist/cloud/index.d.ts.map +0 -1
- package/dist/cloud/index.js.map +0 -1
- package/dist/cloud/marketplace.d.ts.map +0 -1
- package/dist/cloud/marketplace.js.map +0 -1
- package/dist/cloud/provisioning.d.ts.map +0 -1
- package/dist/cloud/provisioning.js.map +0 -1
- package/dist/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/cloud/relay/endpoints.js.map +0 -1
- package/dist/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/cloud/relay/health/index.js.map +0 -1
- package/dist/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/cloud/relay/stats/index.js.map +0 -1
- package/dist/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/cloud/relay/sync/index.js.map +0 -1
- package/dist/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/cloud/relay/usage/index.js.map +0 -1
- package/dist/cloud/sponsors.d.ts.map +0 -1
- package/dist/cloud/sponsors.js.map +0 -1
- package/dist/cloud/types.d.ts.map +0 -1
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/core/actors.d.ts.map +0 -1
- package/dist/core/actors.js.map +0 -1
- package/dist/core/component/generator.d.ts.map +0 -1
- package/dist/core/component/generator.js.map +0 -1
- package/dist/core/engine.d.ts.map +0 -1
- package/dist/core/engine.js.map +0 -1
- package/dist/core/introspection.d.ts.map +0 -1
- package/dist/core/introspection.js.map +0 -1
- package/dist/core/logic/generator.d.ts.map +0 -1
- package/dist/core/logic/generator.js.map +0 -1
- package/dist/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/core/pluresdb/generator.js.map +0 -1
- package/dist/core/protocol.d.ts.map +0 -1
- package/dist/core/protocol.js.map +0 -1
- package/dist/core/rules.d.ts.map +0 -1
- package/dist/core/rules.js.map +0 -1
- package/dist/core/schema/loader.d.ts.map +0 -1
- package/dist/core/schema/loader.js.map +0 -1
- package/dist/core/schema/normalize.d.ts.map +0 -1
- package/dist/core/schema/normalize.js.map +0 -1
- package/dist/core/schema/types.d.ts.map +0 -1
- package/dist/core/schema/types.js.map +0 -1
- package/dist/dsl/index.d.ts.map +0 -1
- package/dist/dsl/index.js.map +0 -1
- package/dist/dsl.d.ts.map +0 -1
- package/dist/dsl.js.map +0 -1
- package/dist/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/examples/advanced-todo/index.js.map +0 -1
- package/dist/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/examples/auth-basic/index.js.map +0 -1
- package/dist/examples/cart/index.d.ts.map +0 -1
- package/dist/examples/cart/index.js.map +0 -1
- package/dist/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/examples/svelte-counter/index.js.map +0 -1
- package/dist/flows.d.ts.map +0 -1
- package/dist/flows.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integrations/pluresdb.d.ts +0 -56
- package/dist/integrations/pluresdb.d.ts.map +0 -1
- package/dist/integrations/pluresdb.js +0 -46
- package/dist/integrations/pluresdb.js.map +0 -1
- package/dist/integrations/svelte.d.ts.map +0 -1
- package/dist/integrations/svelte.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/runtime/terminal-adapter.js +0 -113
- package/dist/runtime/terminal-adapter.js.map +0 -1
- package/dist/step.d.ts.map +0 -1
- package/dist/step.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- /package/dist/{adapters → src/adapters}/cli.d.ts +0 -0
- /package/dist/{adapters → src/adapters}/cli.js +0 -0
- /package/dist/{cli → src/cli}/commands/auth.d.ts +0 -0
- /package/dist/{cli → src/cli}/commands/auth.js +0 -0
- /package/dist/{cli → src/cli}/commands/cloud.d.ts +0 -0
- /package/dist/{cli → src/cli}/commands/cloud.js +0 -0
- /package/dist/{cli → src/cli}/commands/generate.d.ts +0 -0
- /package/dist/{cli → src/cli}/commands/generate.js +0 -0
- /package/dist/{cli → src/cli}/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/auth.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/auth.js +0 -0
- /package/dist/{cloud → src/cloud}/billing.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/billing.js +0 -0
- /package/dist/{cloud → src/cloud}/client.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/client.js +0 -0
- /package/dist/{cloud → src/cloud}/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/index.js +0 -0
- /package/dist/{cloud → src/cloud}/marketplace.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/marketplace.js +0 -0
- /package/dist/{cloud → src/cloud}/provisioning.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/provisioning.js +0 -0
- /package/dist/{cloud → src/cloud}/relay/endpoints.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/relay/endpoints.js +0 -0
- /package/dist/{cloud → src/cloud}/relay/health/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/relay/health/index.js +0 -0
- /package/dist/{cloud → src/cloud}/relay/stats/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/relay/stats/index.js +0 -0
- /package/dist/{cloud → src/cloud}/relay/sync/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/relay/sync/index.js +0 -0
- /package/dist/{cloud → src/cloud}/relay/usage/index.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/relay/usage/index.js +0 -0
- /package/dist/{cloud → src/cloud}/sponsors.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/sponsors.js +0 -0
- /package/dist/{cloud → src/cloud}/types.d.ts +0 -0
- /package/dist/{cloud → src/cloud}/types.js +0 -0
- /package/dist/{components → src/components}/index.d.ts +0 -0
- /package/dist/{components → src/components}/index.js +0 -0
- /package/dist/{core → src/core}/actors.d.ts +0 -0
- /package/dist/{core → src/core}/actors.js +0 -0
- /package/dist/{core → src/core}/component/generator.d.ts +0 -0
- /package/dist/{core → src/core}/engine.d.ts +0 -0
- /package/dist/{core → src/core}/engine.js +0 -0
- /package/dist/{core → src/core}/introspection.d.ts +0 -0
- /package/dist/{core → src/core}/introspection.js +0 -0
- /package/dist/{core → src/core}/logic/generator.d.ts +0 -0
- /package/dist/{core → src/core}/pluresdb/generator.d.ts +0 -0
- /package/dist/{core → src/core}/protocol.d.ts +0 -0
- /package/dist/{core → src/core}/protocol.js +0 -0
- /package/dist/{core → src/core}/rules.d.ts +0 -0
- /package/dist/{core → src/core}/rules.js +0 -0
- /package/dist/{core → src/core}/schema/loader.d.ts +0 -0
- /package/dist/{core → src/core}/schema/loader.js +0 -0
- /package/dist/{core → src/core}/schema/normalize.d.ts +0 -0
- /package/dist/{core → src/core}/schema/normalize.js +0 -0
- /package/dist/{core → src/core}/schema/types.d.ts +0 -0
- /package/dist/{core → src/core}/schema/types.js +0 -0
- /package/dist/{dsl → src/dsl}/index.d.ts +0 -0
- /package/dist/{dsl → src/dsl}/index.js +0 -0
- /package/dist/{dsl.d.ts → src/dsl.d.ts} +0 -0
- /package/dist/{dsl.js → src/dsl.js} +0 -0
- /package/dist/{examples → src/examples}/advanced-todo/index.d.ts +0 -0
- /package/dist/{examples → src/examples}/advanced-todo/index.js +0 -0
- /package/dist/{examples → src/examples}/auth-basic/index.d.ts +0 -0
- /package/dist/{examples → src/examples}/auth-basic/index.js +0 -0
- /package/dist/{examples → src/examples}/cart/index.d.ts +0 -0
- /package/dist/{examples → src/examples}/cart/index.js +0 -0
- /package/dist/{examples → src/examples}/hero-ecommerce/index.d.ts +0 -0
- /package/dist/{examples → src/examples}/hero-ecommerce/index.js +0 -0
- /package/dist/{examples → src/examples}/svelte-counter/index.d.ts +0 -0
- /package/dist/{examples → src/examples}/svelte-counter/index.js +0 -0
- /package/dist/{flows.d.ts → src/flows.d.ts} +0 -0
- /package/dist/{flows.js → src/flows.js} +0 -0
- /package/dist/{integrations → src/integrations}/svelte.d.ts +0 -0
- /package/dist/{integrations → src/integrations}/svelte.js +0 -0
- /package/dist/{registry.d.ts → src/registry.d.ts} +0 -0
- /package/dist/{registry.js → src/registry.js} +0 -0
- /package/dist/{step.d.ts → src/step.d.ts} +0 -0
- /package/dist/{step.js → src/step.js} +0 -0
- /package/dist/{types.d.ts → src/types.d.ts} +0 -0
- /package/dist/{types.js → src/types.js} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis Code Generation
|
|
3
|
+
*
|
|
4
|
+
* Centralized code generation from PSF schemas.
|
|
5
|
+
* Generates TypeScript, Svelte components, and documentation.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export * from './docs-generator.js';
|
|
9
|
+
export * from './ts-generator.js';
|
|
10
|
+
|
|
11
|
+
// Re-export component generator
|
|
12
|
+
export {
|
|
13
|
+
ComponentGenerator,
|
|
14
|
+
createComponentGenerator,
|
|
15
|
+
type GeneratorConfig,
|
|
16
|
+
type GenerationResult,
|
|
17
|
+
type GeneratedFile,
|
|
18
|
+
type GenerationError,
|
|
19
|
+
} from '../../src/core/component/generator.js';
|
|
20
|
+
|
|
21
|
+
// Re-export logic generator
|
|
22
|
+
export {
|
|
23
|
+
LogicGenerator,
|
|
24
|
+
createLogicGenerator,
|
|
25
|
+
type LogicGeneratorOptions,
|
|
26
|
+
type GeneratedLogicFile,
|
|
27
|
+
} from '../../src/core/logic/generator.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript types and code from PSF schemas.
|
|
5
|
+
* Re-exports from schema-engine for convenience.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
PSFGenerator,
|
|
10
|
+
createPSFGenerator,
|
|
11
|
+
generateFromPSF,
|
|
12
|
+
type GeneratorOptions,
|
|
13
|
+
type GeneratedFile,
|
|
14
|
+
type GenerationResult,
|
|
15
|
+
} from '../schema-engine/generator.js';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis DB Adapter
|
|
3
|
+
*
|
|
4
|
+
* The DB Adapter module provides integration with PluresDB
|
|
5
|
+
* for local-first, reactive data storage and synchronization.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Schema-backed storage
|
|
9
|
+
* - Real-time synchronization
|
|
10
|
+
* - CRDT-style conflict resolution
|
|
11
|
+
* - Event sourcing
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// Re-export core PluresDB adapter
|
|
15
|
+
export {
|
|
16
|
+
InMemoryPraxisDB,
|
|
17
|
+
createInMemoryDB,
|
|
18
|
+
type PraxisDB,
|
|
19
|
+
type UnsubscribeFn,
|
|
20
|
+
} from '../../src/core/pluresdb/adapter.js';
|
|
21
|
+
|
|
22
|
+
// Re-export store
|
|
23
|
+
export {
|
|
24
|
+
PraxisDBStore,
|
|
25
|
+
createPraxisDBStore,
|
|
26
|
+
PRAXIS_PATHS,
|
|
27
|
+
getFactPath,
|
|
28
|
+
getEventPath,
|
|
29
|
+
generateId,
|
|
30
|
+
type EventStreamEntry,
|
|
31
|
+
type PraxisDBStoreOptions,
|
|
32
|
+
} from '../../src/core/pluresdb/store.js';
|
|
33
|
+
|
|
34
|
+
// Re-export schema registry
|
|
35
|
+
export {
|
|
36
|
+
PraxisSchemaRegistry,
|
|
37
|
+
createSchemaRegistry,
|
|
38
|
+
registerSchema,
|
|
39
|
+
getSchemaPath,
|
|
40
|
+
type StoredSchema,
|
|
41
|
+
} from '../../src/core/pluresdb/schema-registry.js';
|
|
42
|
+
|
|
43
|
+
// Re-export generator
|
|
44
|
+
export {
|
|
45
|
+
PluresDBGenerator,
|
|
46
|
+
createPluresDBGenerator,
|
|
47
|
+
type PluresDBGeneratorOptions,
|
|
48
|
+
type GeneratedPluresDBFile,
|
|
49
|
+
} from '../../src/core/pluresdb/generator.js';
|
|
50
|
+
|
|
51
|
+
// Export new PSF-aware sync engine
|
|
52
|
+
export * from './sync-engine.js';
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PSF Schema Sync Engine
|
|
3
|
+
*
|
|
4
|
+
* Provides real-time bidirectional synchronization between
|
|
5
|
+
* Code ↔ PSF Schema ↔ Canvas using PluresDB as the sync backend.
|
|
6
|
+
*
|
|
7
|
+
* The sync engine ensures that:
|
|
8
|
+
* 1. Schema changes propagate to all connected clients in real-time
|
|
9
|
+
* 2. Conflicts are resolved using CRDT-style last-write-wins with metadata
|
|
10
|
+
* 3. Code and canvas stay synchronized through the schema
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { PSFSchema, PSFPosition } from '../schema-engine/psf.js';
|
|
14
|
+
import type { PraxisDB, UnsubscribeFn } from '../../src/core/pluresdb/adapter.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Schema sync options
|
|
18
|
+
*/
|
|
19
|
+
export interface SchemaSyncOptions {
|
|
20
|
+
/** Database instance */
|
|
21
|
+
db: PraxisDB;
|
|
22
|
+
/** Schema ID to sync */
|
|
23
|
+
schemaId: string;
|
|
24
|
+
/** Auto-sync interval in milliseconds (0 = disabled) */
|
|
25
|
+
syncInterval?: number;
|
|
26
|
+
/** Device/client identifier */
|
|
27
|
+
deviceId?: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Schema change event
|
|
32
|
+
*/
|
|
33
|
+
export interface SchemaChangeEvent {
|
|
34
|
+
/** Type of change */
|
|
35
|
+
type: 'update' | 'delete' | 'add';
|
|
36
|
+
/** Path to changed element */
|
|
37
|
+
path: string;
|
|
38
|
+
/** Old value */
|
|
39
|
+
oldValue?: unknown;
|
|
40
|
+
/** New value */
|
|
41
|
+
newValue?: unknown;
|
|
42
|
+
/** Timestamp */
|
|
43
|
+
timestamp: number;
|
|
44
|
+
/** Device that made the change */
|
|
45
|
+
deviceId?: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Sync status
|
|
50
|
+
*/
|
|
51
|
+
export interface SyncStatus {
|
|
52
|
+
/** Is currently syncing */
|
|
53
|
+
syncing: boolean;
|
|
54
|
+
/** Last sync timestamp */
|
|
55
|
+
lastSync?: number;
|
|
56
|
+
/** Pending changes count */
|
|
57
|
+
pendingChanges: number;
|
|
58
|
+
/** Connected devices */
|
|
59
|
+
connectedDevices?: string[];
|
|
60
|
+
/** Sync errors */
|
|
61
|
+
errors: string[];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Schema Sync Engine
|
|
66
|
+
*
|
|
67
|
+
* Manages real-time synchronization of PSF schemas.
|
|
68
|
+
*/
|
|
69
|
+
export class SchemaSyncEngine {
|
|
70
|
+
private db: PraxisDB;
|
|
71
|
+
private schemaId: string;
|
|
72
|
+
private deviceId: string;
|
|
73
|
+
private syncInterval: number;
|
|
74
|
+
private schema: PSFSchema | null = null;
|
|
75
|
+
private subscribers: Set<(schema: PSFSchema) => void> = new Set();
|
|
76
|
+
private changeSubscribers: Set<(change: SchemaChangeEvent) => void> = new Set();
|
|
77
|
+
private unsubscribeDb: UnsubscribeFn | null = null;
|
|
78
|
+
private pendingChanges: SchemaChangeEvent[] = [];
|
|
79
|
+
private syncTimer: ReturnType<typeof setInterval> | null = null;
|
|
80
|
+
private lastSync: number = 0;
|
|
81
|
+
|
|
82
|
+
constructor(options: SchemaSyncOptions) {
|
|
83
|
+
this.db = options.db;
|
|
84
|
+
this.schemaId = options.schemaId;
|
|
85
|
+
this.deviceId = options.deviceId || this.generateDeviceId();
|
|
86
|
+
this.syncInterval = options.syncInterval ?? 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Initialize the sync engine
|
|
91
|
+
*/
|
|
92
|
+
async initialize(): Promise<void> {
|
|
93
|
+
// Load initial schema from DB
|
|
94
|
+
const schemaPath = this.getSchemaPath();
|
|
95
|
+
const storedSchema = await this.db.get(schemaPath);
|
|
96
|
+
|
|
97
|
+
if (storedSchema) {
|
|
98
|
+
this.schema = storedSchema as PSFSchema;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Subscribe to DB changes
|
|
102
|
+
this.unsubscribeDb = this.db.watch(schemaPath, (value: unknown) => {
|
|
103
|
+
if (value) {
|
|
104
|
+
const newSchema = value as PSFSchema;
|
|
105
|
+
const oldSchema = this.schema;
|
|
106
|
+
this.schema = newSchema;
|
|
107
|
+
|
|
108
|
+
// Notify subscribers
|
|
109
|
+
this.notifySubscribers();
|
|
110
|
+
|
|
111
|
+
// Generate change events
|
|
112
|
+
if (oldSchema) {
|
|
113
|
+
this.emitChangeEvents(oldSchema, newSchema);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Start auto-sync if enabled
|
|
119
|
+
if (this.syncInterval > 0) {
|
|
120
|
+
this.startAutoSync();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get current schema
|
|
126
|
+
*/
|
|
127
|
+
getSchema(): PSFSchema | null {
|
|
128
|
+
return this.schema ? { ...this.schema } : null;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Update the entire schema
|
|
133
|
+
*/
|
|
134
|
+
async updateSchema(schema: PSFSchema): Promise<void> {
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
const updatedSchema: PSFSchema = {
|
|
137
|
+
...schema,
|
|
138
|
+
modifiedAt: new Date(now).toISOString(),
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
await this.db.set(this.getSchemaPath(), updatedSchema);
|
|
142
|
+
this.lastSync = now;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Update a specific part of the schema
|
|
147
|
+
*/
|
|
148
|
+
async updatePart<K extends keyof PSFSchema>(key: K, value: PSFSchema[K]): Promise<void> {
|
|
149
|
+
if (!this.schema) {
|
|
150
|
+
throw new Error('Schema not loaded');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const updatedSchema: PSFSchema = {
|
|
154
|
+
...this.schema,
|
|
155
|
+
[key]: value,
|
|
156
|
+
modifiedAt: new Date().toISOString(),
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
await this.updateSchema(updatedSchema);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Update node position (for canvas sync)
|
|
164
|
+
*/
|
|
165
|
+
async updateNodePosition(
|
|
166
|
+
nodeType: 'facts' | 'events' | 'rules' | 'constraints' | 'models' | 'components',
|
|
167
|
+
nodeId: string,
|
|
168
|
+
position: PSFPosition
|
|
169
|
+
): Promise<void> {
|
|
170
|
+
if (!this.schema) {
|
|
171
|
+
throw new Error('Schema not loaded');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const nodes = this.schema[nodeType] as Array<{ id: string; position?: PSFPosition }>;
|
|
175
|
+
const nodeIndex = nodes.findIndex((n) => n.id === nodeId);
|
|
176
|
+
|
|
177
|
+
if (nodeIndex === -1) {
|
|
178
|
+
throw new Error(`Node ${nodeId} not found in ${nodeType}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const updatedNodes = [...nodes];
|
|
182
|
+
updatedNodes[nodeIndex] = {
|
|
183
|
+
...updatedNodes[nodeIndex],
|
|
184
|
+
position,
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
await this.updatePart(nodeType, updatedNodes as PSFSchema[typeof nodeType]);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Subscribe to schema changes
|
|
192
|
+
*/
|
|
193
|
+
subscribe(callback: (schema: PSFSchema) => void): UnsubscribeFn {
|
|
194
|
+
this.subscribers.add(callback);
|
|
195
|
+
|
|
196
|
+
// Send current schema immediately
|
|
197
|
+
if (this.schema) {
|
|
198
|
+
callback(this.schema);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return () => {
|
|
202
|
+
this.subscribers.delete(callback);
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Subscribe to individual change events
|
|
208
|
+
*/
|
|
209
|
+
subscribeToChanges(callback: (change: SchemaChangeEvent) => void): UnsubscribeFn {
|
|
210
|
+
this.changeSubscribers.add(callback);
|
|
211
|
+
return () => {
|
|
212
|
+
this.changeSubscribers.delete(callback);
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Get sync status
|
|
218
|
+
*/
|
|
219
|
+
getSyncStatus(): SyncStatus {
|
|
220
|
+
return {
|
|
221
|
+
syncing: false, // Would be true during active sync
|
|
222
|
+
lastSync: this.lastSync || undefined,
|
|
223
|
+
pendingChanges: this.pendingChanges.length,
|
|
224
|
+
errors: [],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Force sync
|
|
230
|
+
*/
|
|
231
|
+
async forceSync(): Promise<void> {
|
|
232
|
+
if (!this.schema) return;
|
|
233
|
+
|
|
234
|
+
// Re-read from DB to ensure we have latest
|
|
235
|
+
const schemaPath = this.getSchemaPath();
|
|
236
|
+
const latestSchema = await this.db.get(schemaPath);
|
|
237
|
+
|
|
238
|
+
if (latestSchema) {
|
|
239
|
+
this.schema = latestSchema as PSFSchema;
|
|
240
|
+
this.notifySubscribers();
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
this.lastSync = Date.now();
|
|
244
|
+
this.pendingChanges = [];
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Dispose of resources
|
|
249
|
+
*/
|
|
250
|
+
dispose(): void {
|
|
251
|
+
if (this.unsubscribeDb) {
|
|
252
|
+
this.unsubscribeDb();
|
|
253
|
+
this.unsubscribeDb = null;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
if (this.syncTimer) {
|
|
257
|
+
clearInterval(this.syncTimer);
|
|
258
|
+
this.syncTimer = null;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
this.subscribers.clear();
|
|
262
|
+
this.changeSubscribers.clear();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Get path for schema in DB
|
|
267
|
+
*/
|
|
268
|
+
private getSchemaPath(): string {
|
|
269
|
+
return `/schemas/${this.schemaId}`;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Notify all subscribers
|
|
274
|
+
*/
|
|
275
|
+
private notifySubscribers(): void {
|
|
276
|
+
if (!this.schema) return;
|
|
277
|
+
|
|
278
|
+
for (const callback of this.subscribers) {
|
|
279
|
+
try {
|
|
280
|
+
callback(this.schema);
|
|
281
|
+
} catch (error) {
|
|
282
|
+
console.error('Error in schema subscriber:', error);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Emit change events by comparing schemas
|
|
289
|
+
*/
|
|
290
|
+
private emitChangeEvents(oldSchema: PSFSchema, newSchema: PSFSchema): void {
|
|
291
|
+
// Simple diff for now - could be made more granular
|
|
292
|
+
const changes: SchemaChangeEvent[] = [];
|
|
293
|
+
const now = Date.now();
|
|
294
|
+
|
|
295
|
+
const keys: (keyof PSFSchema)[] = ['facts', 'events', 'rules', 'constraints', 'models', 'components', 'flows'];
|
|
296
|
+
|
|
297
|
+
for (const key of keys) {
|
|
298
|
+
const oldArray = oldSchema[key] as unknown[];
|
|
299
|
+
const newArray = newSchema[key] as unknown[];
|
|
300
|
+
|
|
301
|
+
if (JSON.stringify(oldArray) !== JSON.stringify(newArray)) {
|
|
302
|
+
changes.push({
|
|
303
|
+
type: 'update',
|
|
304
|
+
path: key,
|
|
305
|
+
oldValue: oldArray,
|
|
306
|
+
newValue: newArray,
|
|
307
|
+
timestamp: now,
|
|
308
|
+
deviceId: this.deviceId,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// Emit changes
|
|
314
|
+
for (const change of changes) {
|
|
315
|
+
for (const callback of this.changeSubscribers) {
|
|
316
|
+
try {
|
|
317
|
+
callback(change);
|
|
318
|
+
} catch (error) {
|
|
319
|
+
console.error('Error in change subscriber:', error);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Start auto-sync timer
|
|
327
|
+
*/
|
|
328
|
+
private startAutoSync(): void {
|
|
329
|
+
if (this.syncTimer) {
|
|
330
|
+
clearInterval(this.syncTimer);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
this.syncTimer = setInterval(() => {
|
|
334
|
+
this.forceSync().catch((error) => {
|
|
335
|
+
console.error('Auto-sync error:', error);
|
|
336
|
+
});
|
|
337
|
+
}, this.syncInterval);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Generate a device ID
|
|
342
|
+
*/
|
|
343
|
+
private generateDeviceId(): string {
|
|
344
|
+
return `device_${Date.now().toString(36)}_${Math.random().toString(36).substring(2, 8)}`;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Create a schema sync engine
|
|
350
|
+
*/
|
|
351
|
+
export function createSchemaSyncEngine(options: SchemaSyncOptions): SchemaSyncEngine {
|
|
352
|
+
return new SchemaSyncEngine(options);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Schema store for PluresDB
|
|
357
|
+
*
|
|
358
|
+
* Provides a higher-level API for storing and managing PSF schemas.
|
|
359
|
+
*/
|
|
360
|
+
export class PSFSchemaStore {
|
|
361
|
+
private db: PraxisDB;
|
|
362
|
+
private syncEngines: Map<string, SchemaSyncEngine> = new Map();
|
|
363
|
+
|
|
364
|
+
constructor(db: PraxisDB) {
|
|
365
|
+
this.db = db;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Save a schema
|
|
370
|
+
*/
|
|
371
|
+
async saveSchema(schema: PSFSchema): Promise<void> {
|
|
372
|
+
const path = `/schemas/${schema.id}`;
|
|
373
|
+
await this.db.set(path, schema);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* Load a schema by ID
|
|
378
|
+
*/
|
|
379
|
+
async loadSchema(schemaId: string): Promise<PSFSchema | null> {
|
|
380
|
+
const path = `/schemas/${schemaId}`;
|
|
381
|
+
const data = await this.db.get(path);
|
|
382
|
+
return data as PSFSchema | null;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* List all schemas
|
|
387
|
+
*/
|
|
388
|
+
async listSchemas(): Promise<string[]> {
|
|
389
|
+
const schemasPath = '/schemas';
|
|
390
|
+
const data = await this.db.get(schemasPath);
|
|
391
|
+
|
|
392
|
+
if (data && typeof data === 'object') {
|
|
393
|
+
return Object.keys(data);
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return [];
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Delete a schema
|
|
401
|
+
*/
|
|
402
|
+
async deleteSchema(schemaId: string): Promise<void> {
|
|
403
|
+
const path = `/schemas/${schemaId}`;
|
|
404
|
+
await this.db.set(path, null);
|
|
405
|
+
|
|
406
|
+
// Dispose sync engine if exists
|
|
407
|
+
const syncEngine = this.syncEngines.get(schemaId);
|
|
408
|
+
if (syncEngine) {
|
|
409
|
+
syncEngine.dispose();
|
|
410
|
+
this.syncEngines.delete(schemaId);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* Get or create a sync engine for a schema
|
|
416
|
+
*/
|
|
417
|
+
async getSyncEngine(schemaId: string, options?: Partial<SchemaSyncOptions>): Promise<SchemaSyncEngine> {
|
|
418
|
+
if (this.syncEngines.has(schemaId)) {
|
|
419
|
+
return this.syncEngines.get(schemaId)!;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
const syncEngine = new SchemaSyncEngine({
|
|
423
|
+
db: this.db,
|
|
424
|
+
schemaId,
|
|
425
|
+
...options,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
await syncEngine.initialize();
|
|
429
|
+
this.syncEngines.set(schemaId, syncEngine);
|
|
430
|
+
|
|
431
|
+
return syncEngine;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Dispose all resources
|
|
436
|
+
*/
|
|
437
|
+
dispose(): void {
|
|
438
|
+
for (const syncEngine of this.syncEngines.values()) {
|
|
439
|
+
syncEngine.dispose();
|
|
440
|
+
}
|
|
441
|
+
this.syncEngines.clear();
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Create a PSF schema store
|
|
447
|
+
*/
|
|
448
|
+
export function createPSFSchemaStore(db: PraxisDB): PSFSchemaStore {
|
|
449
|
+
return new PSFSchemaStore(db);
|
|
450
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logic Engine Core
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the logic engine from the main source.
|
|
5
|
+
* This provides a modular entry point for the logic engine.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
LogicEngine,
|
|
10
|
+
createPraxisEngine,
|
|
11
|
+
type PraxisEngineOptions,
|
|
12
|
+
} from '../../src/core/engine.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis Logic Engine
|
|
3
|
+
*
|
|
4
|
+
* The Logic Engine is the core module responsible for:
|
|
5
|
+
* - Processing events through rules
|
|
6
|
+
* - Checking constraints
|
|
7
|
+
* - Managing state transitions
|
|
8
|
+
* - Schema-driven rule evaluation
|
|
9
|
+
*
|
|
10
|
+
* The engine is pure and deterministic - all state updates are immutable.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export * from './engine.js';
|
|
14
|
+
export * from './rules.js';
|
|
15
|
+
export * from './protocol.js';
|
|
16
|
+
export * from './psf-adapter.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Praxis Protocol
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the core protocol from the main source.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
PRAXIS_PROTOCOL_VERSION,
|
|
9
|
+
type PraxisFact,
|
|
10
|
+
type PraxisEvent,
|
|
11
|
+
type PraxisState,
|
|
12
|
+
type PraxisDiagnostics,
|
|
13
|
+
type PraxisStepConfig,
|
|
14
|
+
type PraxisStepResult,
|
|
15
|
+
type PraxisStepFn,
|
|
16
|
+
} from '../../src/core/protocol.js';
|