@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,3 +1,5 @@
|
|
|
1
|
+
import { L as LogicEngine, P as PraxisState, a as PraxisEvent } from '../engine-BjdqxeXG.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Svelte v5 Integration
|
|
3
5
|
*
|
|
@@ -11,12 +13,11 @@
|
|
|
11
13
|
* - History state pattern implementation
|
|
12
14
|
* - Automatic cleanup and subscription management
|
|
13
15
|
*/
|
|
14
|
-
|
|
15
|
-
import type { PraxisEvent, PraxisState } from "../core/protocol.js";
|
|
16
|
+
|
|
16
17
|
/**
|
|
17
18
|
* Writable store interface (Svelte-compatible)
|
|
18
19
|
*/
|
|
19
|
-
|
|
20
|
+
interface Writable<T> {
|
|
20
21
|
subscribe(run: (value: T) => void): () => void;
|
|
21
22
|
set(value: T): void;
|
|
22
23
|
update(updater: (value: T) => T): void;
|
|
@@ -24,7 +25,7 @@ export interface Writable<T> {
|
|
|
24
25
|
/**
|
|
25
26
|
* Readable store interface (Svelte-compatible)
|
|
26
27
|
*/
|
|
27
|
-
|
|
28
|
+
interface Readable<T> {
|
|
28
29
|
subscribe(run: (value: T) => void): () => void;
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
@@ -42,7 +43,7 @@ export interface Readable<T> {
|
|
|
42
43
|
* // Dispatch events:
|
|
43
44
|
* store.dispatch([Login.create({ username: "alice", password: "secret" })]);
|
|
44
45
|
*/
|
|
45
|
-
|
|
46
|
+
declare function createPraxisStore<TContext = unknown>(engine: LogicEngine<TContext>): Readable<Readonly<PraxisState & {
|
|
46
47
|
context: TContext;
|
|
47
48
|
}>> & {
|
|
48
49
|
dispatch: (events: PraxisEvent[]) => void;
|
|
@@ -57,7 +58,7 @@ export declare function createPraxisStore<TContext = unknown>(engine: LogicEngin
|
|
|
57
58
|
* // In Svelte component:
|
|
58
59
|
* $: context = $contextStore;
|
|
59
60
|
*/
|
|
60
|
-
|
|
61
|
+
declare function createContextStore<TContext = unknown>(engine: LogicEngine<TContext>): Readable<TContext> & {
|
|
61
62
|
dispatch: (events: PraxisEvent[]) => void;
|
|
62
63
|
};
|
|
63
64
|
/**
|
|
@@ -70,13 +71,13 @@ export declare function createContextStore<TContext = unknown>(engine: LogicEngi
|
|
|
70
71
|
* // In Svelte component:
|
|
71
72
|
* $: count = $countStore;
|
|
72
73
|
*/
|
|
73
|
-
|
|
74
|
+
declare function createDerivedStore<TContext = unknown, TDerived = unknown>(engine: LogicEngine<TContext>, selector: (context: TContext) => TDerived): Readable<TDerived> & {
|
|
74
75
|
dispatch: (events: PraxisEvent[]) => void;
|
|
75
76
|
};
|
|
76
77
|
/**
|
|
77
78
|
* Snapshot of engine state for time-travel debugging
|
|
78
79
|
*/
|
|
79
|
-
|
|
80
|
+
interface StateSnapshot<TContext = unknown> {
|
|
80
81
|
timestamp: number;
|
|
81
82
|
state: Readonly<PraxisState & {
|
|
82
83
|
context: TContext;
|
|
@@ -86,7 +87,7 @@ export interface StateSnapshot<TContext = unknown> {
|
|
|
86
87
|
/**
|
|
87
88
|
* Options for usePraxisEngine composable
|
|
88
89
|
*/
|
|
89
|
-
|
|
90
|
+
interface UsePraxisEngineOptions {
|
|
90
91
|
/** Enable snapshot history for time-travel debugging */
|
|
91
92
|
enableHistory?: boolean;
|
|
92
93
|
/** Maximum number of snapshots to keep */
|
|
@@ -95,7 +96,7 @@ export interface UsePraxisEngineOptions {
|
|
|
95
96
|
/**
|
|
96
97
|
* Result of usePraxisEngine composable with Svelte 5 runes
|
|
97
98
|
*/
|
|
98
|
-
|
|
99
|
+
interface PraxisEngineBinding<TContext = unknown> {
|
|
99
100
|
/** Current state (reactive via $state) */
|
|
100
101
|
state: Readonly<PraxisState & {
|
|
101
102
|
context: TContext;
|
|
@@ -155,7 +156,7 @@ export interface PraxisEngineBinding<TContext = unknown> {
|
|
|
155
156
|
* @param options Configuration options
|
|
156
157
|
* @returns Reactive binding with state, context, and control methods
|
|
157
158
|
*/
|
|
158
|
-
|
|
159
|
+
declare function usePraxisEngine<TContext = unknown>(engine: LogicEngine<TContext>, options?: UsePraxisEngineOptions): PraxisEngineBinding<TContext>;
|
|
159
160
|
/**
|
|
160
161
|
* Create a reactive derived value from engine context with Svelte 5 runes.
|
|
161
162
|
*
|
|
@@ -176,7 +177,7 @@ export declare function usePraxisEngine<TContext = unknown>(engine: LogicEngine<
|
|
|
176
177
|
* @param selector Function to extract value from context
|
|
177
178
|
* @returns Reactive derived value
|
|
178
179
|
*/
|
|
179
|
-
|
|
180
|
+
declare function usePraxisContext<TContext = unknown, TDerived = unknown>(engine: LogicEngine<TContext>, selector: (context: TContext) => TDerived): TDerived;
|
|
180
181
|
/**
|
|
181
182
|
* Subscribe to engine state changes with automatic cleanup.
|
|
182
183
|
*
|
|
@@ -197,13 +198,13 @@ export declare function usePraxisContext<TContext = unknown, TDerived = unknown>
|
|
|
197
198
|
* @param engine The Praxis logic engine
|
|
198
199
|
* @param callback Function to call when state changes
|
|
199
200
|
*/
|
|
200
|
-
|
|
201
|
+
declare function usePraxisSubscription<TContext = unknown>(engine: LogicEngine<TContext>, callback: (state: Readonly<PraxisState & {
|
|
201
202
|
context: TContext;
|
|
202
203
|
}>) => void): () => void;
|
|
203
204
|
/**
|
|
204
205
|
* History state entry for tracking state transitions
|
|
205
206
|
*/
|
|
206
|
-
|
|
207
|
+
interface HistoryEntry<TContext = unknown> {
|
|
207
208
|
/** Unique identifier for this history entry */
|
|
208
209
|
id: string;
|
|
209
210
|
/** Timestamp when this state was entered */
|
|
@@ -220,7 +221,7 @@ export interface HistoryEntry<TContext = unknown> {
|
|
|
220
221
|
/**
|
|
221
222
|
* History state manager for Praxis engines
|
|
222
223
|
*/
|
|
223
|
-
|
|
224
|
+
declare class HistoryStateManager<TContext = unknown> {
|
|
224
225
|
private history;
|
|
225
226
|
private currentIndex;
|
|
226
227
|
private readonly maxSize;
|
|
@@ -289,7 +290,7 @@ export declare class HistoryStateManager<TContext = unknown> {
|
|
|
289
290
|
* @param options History configuration
|
|
290
291
|
* @returns Enhanced engine with history methods
|
|
291
292
|
*/
|
|
292
|
-
|
|
293
|
+
declare function createHistoryEngine<TContext = unknown>(engine: LogicEngine<TContext>, options?: {
|
|
293
294
|
maxHistorySize?: number;
|
|
294
295
|
initialLabel?: string;
|
|
295
296
|
}): {
|
|
@@ -303,4 +304,5 @@ export declare function createHistoryEngine<TContext = unknown>(engine: LogicEng
|
|
|
303
304
|
goToHistory: (index: number) => boolean;
|
|
304
305
|
clearHistory: () => void;
|
|
305
306
|
};
|
|
306
|
-
|
|
307
|
+
|
|
308
|
+
export { type HistoryEntry, HistoryStateManager, type PraxisEngineBinding, type Readable, type StateSnapshot, type UsePraxisEngineOptions, type Writable, createContextStore, createDerivedStore, createHistoryEngine, createPraxisStore, usePraxisContext, usePraxisEngine, usePraxisSubscription };
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
// src/integrations/svelte.ts
|
|
2
|
+
function createPraxisStore(engine) {
|
|
3
|
+
let currentState = engine.getState();
|
|
4
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
5
|
+
const notify = () => {
|
|
6
|
+
currentState = engine.getState();
|
|
7
|
+
subscribers.forEach((sub) => sub(currentState));
|
|
8
|
+
};
|
|
9
|
+
return {
|
|
10
|
+
subscribe(run) {
|
|
11
|
+
subscribers.add(run);
|
|
12
|
+
run(currentState);
|
|
13
|
+
return () => {
|
|
14
|
+
subscribers.delete(run);
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
dispatch(events) {
|
|
18
|
+
engine.step(events);
|
|
19
|
+
notify();
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createContextStore(engine) {
|
|
24
|
+
let currentContext = engine.getContext();
|
|
25
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
26
|
+
const notify = () => {
|
|
27
|
+
currentContext = engine.getContext();
|
|
28
|
+
subscribers.forEach((sub) => sub(currentContext));
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
subscribe(run) {
|
|
32
|
+
subscribers.add(run);
|
|
33
|
+
run(currentContext);
|
|
34
|
+
return () => {
|
|
35
|
+
subscribers.delete(run);
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
dispatch(events) {
|
|
39
|
+
engine.step(events);
|
|
40
|
+
notify();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function createDerivedStore(engine, selector) {
|
|
45
|
+
let currentValue = selector(engine.getContext());
|
|
46
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
47
|
+
const notify = () => {
|
|
48
|
+
const newValue = selector(engine.getContext());
|
|
49
|
+
if (newValue !== currentValue) {
|
|
50
|
+
currentValue = newValue;
|
|
51
|
+
subscribers.forEach((sub) => sub(currentValue));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
return {
|
|
55
|
+
subscribe(run) {
|
|
56
|
+
subscribers.add(run);
|
|
57
|
+
run(currentValue);
|
|
58
|
+
return () => {
|
|
59
|
+
subscribers.delete(run);
|
|
60
|
+
};
|
|
61
|
+
},
|
|
62
|
+
dispatch(events) {
|
|
63
|
+
engine.step(events);
|
|
64
|
+
notify();
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function usePraxisEngine(engine, options = {}) {
|
|
69
|
+
const { enableHistory = false, maxHistorySize = 50 } = options;
|
|
70
|
+
let currentState = engine.getState();
|
|
71
|
+
let snapshots = [];
|
|
72
|
+
let historyIndex = -1;
|
|
73
|
+
if (enableHistory) {
|
|
74
|
+
snapshots.push({
|
|
75
|
+
timestamp: Date.now(),
|
|
76
|
+
state: currentState,
|
|
77
|
+
events: []
|
|
78
|
+
});
|
|
79
|
+
historyIndex = 0;
|
|
80
|
+
}
|
|
81
|
+
const dispatch = (events) => {
|
|
82
|
+
if (enableHistory && historyIndex < snapshots.length - 1) {
|
|
83
|
+
snapshots = snapshots.slice(0, historyIndex + 1);
|
|
84
|
+
}
|
|
85
|
+
engine.step(events);
|
|
86
|
+
currentState = engine.getState();
|
|
87
|
+
if (enableHistory) {
|
|
88
|
+
snapshots.push({
|
|
89
|
+
timestamp: Date.now(),
|
|
90
|
+
state: currentState,
|
|
91
|
+
events
|
|
92
|
+
});
|
|
93
|
+
if (snapshots.length > maxHistorySize) {
|
|
94
|
+
snapshots.shift();
|
|
95
|
+
} else {
|
|
96
|
+
historyIndex++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const goToSnapshot = (index) => {
|
|
101
|
+
if (!enableHistory) {
|
|
102
|
+
console.warn("History is not enabled for this engine");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (index < 0 || index >= snapshots.length) {
|
|
106
|
+
console.warn(`Invalid snapshot index: ${index}`);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
historyIndex = index;
|
|
110
|
+
currentState = snapshots[index].state;
|
|
111
|
+
};
|
|
112
|
+
const undo = () => {
|
|
113
|
+
if (historyIndex > 0) {
|
|
114
|
+
goToSnapshot(historyIndex - 1);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const redo = () => {
|
|
118
|
+
if (historyIndex < snapshots.length - 1) {
|
|
119
|
+
goToSnapshot(historyIndex + 1);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
get state() {
|
|
124
|
+
return currentState;
|
|
125
|
+
},
|
|
126
|
+
get context() {
|
|
127
|
+
return currentState.context;
|
|
128
|
+
},
|
|
129
|
+
get facts() {
|
|
130
|
+
return currentState.facts;
|
|
131
|
+
},
|
|
132
|
+
dispatch,
|
|
133
|
+
get snapshots() {
|
|
134
|
+
return snapshots;
|
|
135
|
+
},
|
|
136
|
+
goToSnapshot,
|
|
137
|
+
undo,
|
|
138
|
+
redo,
|
|
139
|
+
get canUndo() {
|
|
140
|
+
return enableHistory && historyIndex > 0;
|
|
141
|
+
},
|
|
142
|
+
get canRedo() {
|
|
143
|
+
return enableHistory && historyIndex < snapshots.length - 1;
|
|
144
|
+
},
|
|
145
|
+
get historyIndex() {
|
|
146
|
+
return historyIndex;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function usePraxisContext(engine, selector) {
|
|
151
|
+
let currentValue = selector(engine.getContext());
|
|
152
|
+
return currentValue;
|
|
153
|
+
}
|
|
154
|
+
function usePraxisSubscription(engine, callback) {
|
|
155
|
+
const store = createPraxisStore(engine);
|
|
156
|
+
const unsubscribe = store.subscribe(callback);
|
|
157
|
+
return unsubscribe;
|
|
158
|
+
}
|
|
159
|
+
var HistoryStateManager = class {
|
|
160
|
+
history = [];
|
|
161
|
+
currentIndex = -1;
|
|
162
|
+
maxSize;
|
|
163
|
+
idCounter = 0;
|
|
164
|
+
constructor(maxSize = 50) {
|
|
165
|
+
this.maxSize = maxSize;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Record a new history entry
|
|
169
|
+
*/
|
|
170
|
+
record(state, events, label) {
|
|
171
|
+
if (this.currentIndex < this.history.length - 1) {
|
|
172
|
+
this.history = this.history.slice(0, this.currentIndex + 1);
|
|
173
|
+
}
|
|
174
|
+
this.history.push({
|
|
175
|
+
id: `history-${++this.idCounter}`,
|
|
176
|
+
timestamp: Date.now(),
|
|
177
|
+
state,
|
|
178
|
+
events,
|
|
179
|
+
label
|
|
180
|
+
});
|
|
181
|
+
if (this.history.length > this.maxSize) {
|
|
182
|
+
this.history.shift();
|
|
183
|
+
} else {
|
|
184
|
+
this.currentIndex++;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Navigate to a specific history entry
|
|
189
|
+
*/
|
|
190
|
+
goTo(index) {
|
|
191
|
+
if (index < 0 || index >= this.history.length) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
this.currentIndex = index;
|
|
195
|
+
return this.history[index];
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Go back to previous state
|
|
199
|
+
*/
|
|
200
|
+
back() {
|
|
201
|
+
if (!this.canGoBack()) {
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
return this.goTo(this.currentIndex - 1);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Go forward to next state
|
|
208
|
+
*/
|
|
209
|
+
forward() {
|
|
210
|
+
if (!this.canGoForward()) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
return this.goTo(this.currentIndex + 1);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Check if can go back
|
|
217
|
+
*/
|
|
218
|
+
canGoBack() {
|
|
219
|
+
return this.currentIndex > 0;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if can go forward
|
|
223
|
+
*/
|
|
224
|
+
canGoForward() {
|
|
225
|
+
return this.currentIndex < this.history.length - 1;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get current history entry
|
|
229
|
+
*/
|
|
230
|
+
current() {
|
|
231
|
+
if (this.currentIndex < 0 || this.currentIndex >= this.history.length) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
return this.history[this.currentIndex];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get all history entries
|
|
238
|
+
*/
|
|
239
|
+
getHistory() {
|
|
240
|
+
return [...this.history];
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get current index in history
|
|
244
|
+
*/
|
|
245
|
+
getCurrentIndex() {
|
|
246
|
+
return this.currentIndex;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Clear all history
|
|
250
|
+
*/
|
|
251
|
+
clear() {
|
|
252
|
+
this.history = [];
|
|
253
|
+
this.currentIndex = -1;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
function createHistoryEngine(engine, options = {}) {
|
|
257
|
+
const history = new HistoryStateManager(options.maxHistorySize);
|
|
258
|
+
history.record(engine.getState(), [], options.initialLabel || "Initial");
|
|
259
|
+
const dispatch = (events, label) => {
|
|
260
|
+
engine.step(events);
|
|
261
|
+
history.record(engine.getState(), events, label);
|
|
262
|
+
};
|
|
263
|
+
const undo = () => {
|
|
264
|
+
const entry = history.back();
|
|
265
|
+
if (entry) {
|
|
266
|
+
return true;
|
|
267
|
+
}
|
|
268
|
+
return false;
|
|
269
|
+
};
|
|
270
|
+
const redo = () => {
|
|
271
|
+
const entry = history.forward();
|
|
272
|
+
if (entry) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
};
|
|
277
|
+
return {
|
|
278
|
+
engine,
|
|
279
|
+
dispatch,
|
|
280
|
+
undo,
|
|
281
|
+
redo,
|
|
282
|
+
canUndo: () => history.canGoBack(),
|
|
283
|
+
canRedo: () => history.canGoForward(),
|
|
284
|
+
getHistory: () => history.getHistory(),
|
|
285
|
+
goToHistory: (index) => history.goTo(index) !== null,
|
|
286
|
+
clearHistory: () => history.clear()
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
export {
|
|
290
|
+
HistoryStateManager,
|
|
291
|
+
createContextStore,
|
|
292
|
+
createDerivedStore,
|
|
293
|
+
createHistoryEngine,
|
|
294
|
+
createPraxisStore,
|
|
295
|
+
usePraxisContext,
|
|
296
|
+
usePraxisEngine,
|
|
297
|
+
usePraxisSubscription
|
|
298
|
+
};
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createSponsorsClient
|
|
3
|
+
} from "./chunk-DSDC2JWZ.js";
|
|
4
|
+
import {
|
|
5
|
+
authenticateWithDeviceFlow
|
|
6
|
+
} from "./chunk-FXQZXAWF.js";
|
|
7
|
+
import "./chunk-QGM4M3NI.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/commands/auth.ts
|
|
10
|
+
import * as fs from "fs";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import * as os from "os";
|
|
13
|
+
var AUTH_DIR = path.join(os.homedir(), ".praxis");
|
|
14
|
+
var AUTH_FILE = path.join(AUTH_DIR, "auth.json");
|
|
15
|
+
var GITHUB_CLIENT_ID = "Ov23liQxF7P0BqUxVXHk";
|
|
16
|
+
function loadAuth() {
|
|
17
|
+
try {
|
|
18
|
+
if (fs.existsSync(AUTH_FILE)) {
|
|
19
|
+
const data = fs.readFileSync(AUTH_FILE, "utf-8");
|
|
20
|
+
return JSON.parse(data);
|
|
21
|
+
}
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.warn("Failed to load authentication:", error);
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
function saveAuth(auth) {
|
|
28
|
+
try {
|
|
29
|
+
if (!fs.existsSync(AUTH_DIR)) {
|
|
30
|
+
fs.mkdirSync(AUTH_DIR, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
fs.writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), { mode: 384 });
|
|
33
|
+
console.log(`
|
|
34
|
+
\u2713 Authentication saved to ${AUTH_FILE}`);
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error("Failed to save authentication:", error);
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function deleteAuth() {
|
|
41
|
+
try {
|
|
42
|
+
if (fs.existsSync(AUTH_FILE)) {
|
|
43
|
+
fs.unlinkSync(AUTH_FILE);
|
|
44
|
+
}
|
|
45
|
+
} catch (error) {
|
|
46
|
+
console.warn("Failed to delete authentication:", error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function loginCommand(options) {
|
|
50
|
+
console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
51
|
+
console.log("\u2551 Praxis Cloud Authentication \u2551");
|
|
52
|
+
console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
|
|
53
|
+
const existingAuth = loadAuth();
|
|
54
|
+
if (existingAuth) {
|
|
55
|
+
console.log("\u26A0 Already authenticated");
|
|
56
|
+
console.log(` User: ${existingAuth.userLogin}`);
|
|
57
|
+
console.log(
|
|
58
|
+
` Authenticated at: ${new Date(existingAuth.authenticatedAt).toLocaleString()}
|
|
59
|
+
`
|
|
60
|
+
);
|
|
61
|
+
console.log("Run 'praxis logout' to log out first.");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
let authResult;
|
|
65
|
+
if (options.token) {
|
|
66
|
+
console.log("\u{1F510} Using provided personal access token...");
|
|
67
|
+
try {
|
|
68
|
+
const response = await fetch("https://api.github.com/user", {
|
|
69
|
+
headers: {
|
|
70
|
+
Authorization: `Bearer ${options.token}`,
|
|
71
|
+
Accept: "application/vnd.github.v3+json"
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
if (!response.ok) {
|
|
75
|
+
throw new Error(`Invalid token: ${response.statusText}`);
|
|
76
|
+
}
|
|
77
|
+
const userData = await response.json();
|
|
78
|
+
authResult = {
|
|
79
|
+
success: true,
|
|
80
|
+
token: options.token,
|
|
81
|
+
user: {
|
|
82
|
+
id: userData.id,
|
|
83
|
+
login: userData.login,
|
|
84
|
+
email: userData.email,
|
|
85
|
+
name: userData.name,
|
|
86
|
+
avatarUrl: userData.avatar_url
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error("\n\u2717 Authentication failed");
|
|
91
|
+
console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
console.log("\u{1F510} Authenticating with GitHub device flow...");
|
|
96
|
+
authResult = await authenticateWithDeviceFlow(GITHUB_CLIENT_ID);
|
|
97
|
+
}
|
|
98
|
+
if (!authResult.success || !authResult.token || !authResult.user) {
|
|
99
|
+
console.error("\n\u2717 Authentication failed");
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
console.log(`\u2713 Authenticated as ${authResult.user.login}`);
|
|
103
|
+
console.log("\n\u{1F50D} Checking GitHub Sponsors status...");
|
|
104
|
+
try {
|
|
105
|
+
const sponsorsClient = createSponsorsClient(authResult.token);
|
|
106
|
+
const subscription = await sponsorsClient.getSubscription(authResult.user.login);
|
|
107
|
+
console.log(`\u2713 Subscription tier: ${subscription.tier}`);
|
|
108
|
+
console.log(` Status: ${subscription.status}`);
|
|
109
|
+
console.log(` Provider: ${subscription.provider}`);
|
|
110
|
+
if (subscription.tier === "free") {
|
|
111
|
+
console.log("\n\u{1F4A1} Upgrade to a paid tier for more features!");
|
|
112
|
+
console.log(" Visit: https://github.com/sponsors/plures");
|
|
113
|
+
}
|
|
114
|
+
} catch (error) {
|
|
115
|
+
console.warn("\n\u26A0 Could not check Sponsors status");
|
|
116
|
+
console.warn(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
const storedAuth = {
|
|
119
|
+
token: authResult.token,
|
|
120
|
+
userId: authResult.user.id,
|
|
121
|
+
userLogin: authResult.user.login,
|
|
122
|
+
userName: authResult.user.name,
|
|
123
|
+
userEmail: authResult.user.email,
|
|
124
|
+
authenticatedAt: Date.now()
|
|
125
|
+
};
|
|
126
|
+
saveAuth(storedAuth);
|
|
127
|
+
console.log("\n\u2713 Successfully logged in!");
|
|
128
|
+
console.log("\nNext steps:");
|
|
129
|
+
console.log(" \u2022 Use 'praxis cloud init' to set up cloud connection");
|
|
130
|
+
console.log(" \u2022 Use 'praxis whoami' to check your authentication");
|
|
131
|
+
console.log(" \u2022 Use 'praxis cloud status' to check subscription\n");
|
|
132
|
+
}
|
|
133
|
+
async function logoutCommand() {
|
|
134
|
+
const auth = loadAuth();
|
|
135
|
+
if (!auth) {
|
|
136
|
+
console.log("\n\u2717 Not currently logged in");
|
|
137
|
+
console.log(" Run 'praxis login' to authenticate\n");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
console.log(`
|
|
141
|
+
Logging out user: ${auth.userLogin}...`);
|
|
142
|
+
deleteAuth();
|
|
143
|
+
console.log("\u2713 Successfully logged out\n");
|
|
144
|
+
}
|
|
145
|
+
async function whoamiCommand() {
|
|
146
|
+
const auth = loadAuth();
|
|
147
|
+
if (!auth) {
|
|
148
|
+
console.log("\n\u2717 Not currently logged in");
|
|
149
|
+
console.log(" Run 'praxis login' to authenticate\n");
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
|
|
153
|
+
console.log("\u2551 Current Authentication \u2551");
|
|
154
|
+
console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
|
|
155
|
+
console.log(`User: ${auth.userLogin}`);
|
|
156
|
+
if (auth.userName) {
|
|
157
|
+
console.log(`Name: ${auth.userName}`);
|
|
158
|
+
}
|
|
159
|
+
if (auth.userEmail) {
|
|
160
|
+
console.log(`Email: ${auth.userEmail}`);
|
|
161
|
+
}
|
|
162
|
+
console.log(`User ID: ${auth.userId}`);
|
|
163
|
+
console.log(`Authenticated: ${new Date(auth.authenticatedAt).toLocaleString()}`);
|
|
164
|
+
console.log("\n\u{1F50D} Checking token validity...");
|
|
165
|
+
try {
|
|
166
|
+
const response = await fetch("https://api.github.com/user", {
|
|
167
|
+
headers: {
|
|
168
|
+
Authorization: `Bearer ${auth.token}`,
|
|
169
|
+
Accept: "application/vnd.github.v3+json"
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
if (response.ok) {
|
|
173
|
+
console.log("\u2713 Token is valid");
|
|
174
|
+
console.log("\n\u{1F50D} Checking subscription...");
|
|
175
|
+
const sponsorsClient = createSponsorsClient(auth.token);
|
|
176
|
+
const subscription = await sponsorsClient.getSubscription(auth.userLogin);
|
|
177
|
+
console.log(`Tier: ${subscription.tier}`);
|
|
178
|
+
console.log(`Status: ${subscription.status}`);
|
|
179
|
+
console.log(`Provider: ${subscription.provider}`);
|
|
180
|
+
console.log("\nLimits:");
|
|
181
|
+
console.log(` Syncs/month: ${subscription.limits.maxSyncsPerMonth.toLocaleString()}`);
|
|
182
|
+
console.log(
|
|
183
|
+
` Storage: ${(subscription.limits.maxStorageBytes / 1024 / 1024).toFixed(0)} MB`
|
|
184
|
+
);
|
|
185
|
+
console.log(` Apps: ${subscription.limits.maxApps}`);
|
|
186
|
+
console.log(` Team members: ${subscription.limits.maxTeamMembers ?? "Unlimited"}`);
|
|
187
|
+
console.log(` Support: ${subscription.limits.supportLevel}`);
|
|
188
|
+
} else {
|
|
189
|
+
console.log("\u2717 Token is invalid or expired");
|
|
190
|
+
console.log(" Run 'praxis login' to re-authenticate");
|
|
191
|
+
}
|
|
192
|
+
} catch (error) {
|
|
193
|
+
console.error("\n\u2717 Failed to check token validity");
|
|
194
|
+
console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
195
|
+
}
|
|
196
|
+
console.log();
|
|
197
|
+
}
|
|
198
|
+
function getAuthToken() {
|
|
199
|
+
const auth = loadAuth();
|
|
200
|
+
return auth?.token || null;
|
|
201
|
+
}
|
|
202
|
+
export {
|
|
203
|
+
getAuthToken,
|
|
204
|
+
loginCommand,
|
|
205
|
+
logoutCommand,
|
|
206
|
+
whoamiCommand
|
|
207
|
+
};
|