@plures/praxis 1.0.3 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FRAMEWORK.md +55 -5
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- package/core/db-adapter/index.ts +2 -2
- package/core/db-adapter/sync-engine.ts +17 -6
- package/core/logic-engine/engine.ts +1 -1
- package/core/logic-engine/index.ts +2 -2
- package/core/logic-engine/protocol.ts +1 -1
- package/core/logic-engine/psf-adapter.ts +8 -4
- package/core/logic-engine/rules.ts +1 -1
- package/core/schema-engine/compiler.ts +53 -11
- package/core/schema-engine/generator.ts +17 -7
- package/core/schema-engine/index.ts +2 -2
- package/core/schema-engine/psf.ts +12 -3
- package/core/schema-engine/types.ts +3 -11
- package/core/schema-engine/validator.ts +112 -22
- package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
- package/dist/browser/index.d.ts +3004 -0
- package/dist/browser/index.js +2892 -0
- package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
- package/dist/browser/integrations/svelte.js +298 -0
- package/dist/node/auth-STARLY7I.js +207 -0
- package/dist/node/build-Y7OT5VBF.js +144 -0
- package/dist/node/canvas-UERZHJYW.js +362 -0
- package/dist/node/chunk-DSDC2JWZ.js +256 -0
- package/dist/node/chunk-FXQZXAWF.js +175 -0
- package/dist/node/chunk-N5Y37EUV.js +202 -0
- package/dist/node/chunk-QGM4M3NI.js +37 -0
- package/dist/node/chunk-RJMWCNHR.js +175 -0
- package/dist/node/chunk-SRM3OPPM.js +404 -0
- package/dist/node/chunk-UATVJBNV.js +175 -0
- package/dist/node/chunk-UY7YEBE2.js +159 -0
- package/dist/node/chunk-XCY2VIFX.js +143 -0
- package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
- package/dist/node/cli/index.cjs +215139 -0
- package/dist/node/cli/index.d.cts +1 -0
- package/dist/node/cli/index.d.ts +1 -0
- package/dist/node/cli/index.js +690 -0
- package/dist/node/cloud/index.cjs +1043 -0
- package/dist/node/cloud/index.d.cts +864 -0
- package/dist/node/cloud/index.d.ts +864 -0
- package/dist/node/cloud/index.js +456 -0
- package/dist/node/cloud-AXOK4PSN.js +212 -0
- package/dist/node/component.cjs +374 -0
- package/dist/node/component.d.cts +125 -0
- package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
- package/dist/node/component.js +9 -0
- package/dist/node/components/index.cjs +216 -0
- package/dist/node/components/index.d.cts +43 -0
- package/dist/{src → node}/components/index.d.ts +8 -8
- package/dist/node/components/index.js +7 -0
- package/dist/node/create-TRLSVCNQ.js +584 -0
- package/dist/node/dev-PMJZUYGE.js +65 -0
- package/dist/node/engine-1iqLe6_P.d.ts +214 -0
- package/dist/node/engine-CVJobhHm.d.cts +214 -0
- package/dist/node/index.cjs +3247 -0
- package/dist/node/index.d.cts +2579 -0
- package/dist/node/index.d.ts +2579 -0
- package/dist/node/index.js +2098 -0
- package/dist/node/integrations/svelte.cjs +330 -0
- package/dist/node/integrations/svelte.d.cts +309 -0
- package/dist/node/integrations/svelte.d.ts +309 -0
- package/dist/node/integrations/svelte.js +300 -0
- package/dist/node/orchestrate-737TCL5H.js +127 -0
- package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
- package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
- package/dist/node/schema.cjs +200 -0
- package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
- package/dist/node/schema.d.ts +371 -0
- package/dist/node/schema.js +9 -0
- package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
- package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
- package/dist/node/verify-QRYKRIDU.js +210960 -0
- package/docs/MONETIZATION.md +21 -16
- package/docs/REACTIVE_REDESIGN.md +132 -0
- package/docs/README.md +47 -36
- package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
- package/docs/TERMINAL_NODE.md +27 -24
- package/docs/core/building-extensions.md +58 -61
- package/docs/core/cli-usage.md +59 -59
- package/docs/core/code-canvas-sync.md +28 -16
- package/docs/core/logic-engine.md +77 -82
- package/docs/core/pluresdb-integration.md +29 -39
- package/docs/core/schema-model.md +66 -52
- package/docs/core/ui-generation.md +57 -49
- package/docs/core/what-is-praxis.md +32 -15
- package/docs/guides/canvas.md +21 -5
- package/docs/guides/getting-started.md +13 -7
- package/docs/guides/history-state-pattern.md +65 -51
- package/docs/guides/orchestration.md +46 -32
- package/docs/guides/parallel-state-pattern.md +56 -72
- package/docs/guides/svelte-integration.md +45 -53
- package/docs/tutorials/README.md +16 -0
- package/docs/tutorials/ecommerce-cart.md +177 -95
- package/docs/tutorials/first-app.md +26 -41
- package/docs/tutorials/form-builder.md +191 -138
- package/docs/tutorials/todo-pluresdb.md +71 -69
- package/package.json +58 -23
- package/src/__tests__/actors.test.ts +68 -68
- package/src/__tests__/billing.test.ts +32 -32
- package/src/__tests__/canvas-components.test.ts +94 -73
- package/src/__tests__/cli-create.test.ts +28 -28
- package/src/__tests__/cloud.test.ts +36 -36
- package/src/__tests__/code-canvas-integration.test.ts +132 -141
- package/src/__tests__/docs-generator.test.ts +3 -9
- package/src/__tests__/dsl.test.ts +58 -64
- package/src/__tests__/edge-cases.test.ts +106 -108
- package/src/__tests__/engine.test.ts +51 -25
- package/src/__tests__/generators.test.ts +42 -44
- package/src/__tests__/introspection.test.ts +104 -114
- package/src/__tests__/pluresdb.test.ts +189 -187
- package/src/__tests__/protocol.test.ts +15 -15
- package/src/__tests__/provisioning.test.ts +61 -61
- package/src/__tests__/schema.test.ts +7 -11
- package/src/__tests__/state-docs-integration.test.ts +162 -145
- package/src/__tests__/svelte-integration.test.ts +16 -19
- package/src/__tests__/tauri-integration.test.ts +149 -147
- package/src/__tests__/terminal-node.test.ts +12 -7
- package/src/__tests__/unum-integration.test.ts +68 -68
- package/src/adapters/cli.ts +21 -15
- package/src/cli/commands/auth.ts +82 -78
- package/src/cli/commands/build.ts +29 -27
- package/src/cli/commands/canvas.ts +338 -127
- package/src/cli/commands/cloud.ts +47 -47
- package/src/cli/commands/create.ts +59 -47
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/generate.ts +29 -40
- package/src/cli/commands/orchestrate.ts +24 -24
- package/src/cli/commands/verify.ts +7 -8
- package/src/cli/index.ts +14 -10
- package/src/cloud/README.md +28 -15
- package/src/cloud/auth.ts +55 -70
- package/src/cloud/billing.ts +59 -58
- package/src/cloud/client.ts +29 -35
- package/src/cloud/index.ts +19 -40
- package/src/cloud/marketplace.ts +69 -78
- package/src/cloud/provisioning.ts +42 -51
- package/src/cloud/relay/endpoints.ts +30 -34
- package/src/cloud/relay/health/index.ts +1 -1
- package/src/cloud/relay/stats/index.ts +1 -1
- package/src/cloud/relay/sync/index.ts +1 -1
- package/src/cloud/relay/usage/index.ts +1 -1
- package/src/cloud/sponsors.ts +31 -34
- package/src/cloud/types.ts +4 -4
- package/src/components/README.md +1 -0
- package/src/components/index.ts +3 -4
- package/src/core/actors.ts +7 -7
- package/src/core/component/generator.ts +10 -28
- package/src/core/engine.ts +51 -24
- package/src/core/introspection.ts +37 -35
- package/src/core/logic/generator.ts +62 -62
- package/src/core/pluresdb/adapter.ts +8 -8
- package/src/core/pluresdb/generator.ts +39 -35
- package/src/core/pluresdb/index.ts +9 -12
- package/src/core/pluresdb/schema-registry.ts +22 -25
- package/src/core/pluresdb/store.ts +57 -57
- package/src/core/protocol.ts +14 -14
- package/src/core/reactive-engine.svelte.ts +65 -0
- package/src/core/reactive-engine.ts +67 -0
- package/src/core/rules.ts +4 -4
- package/src/core/schema/loader.common.ts +150 -0
- package/src/core/schema/loader.ts +19 -149
- package/src/core/schema/normalize.ts +34 -51
- package/src/core/schema/types.ts +47 -11
- package/src/dsl/index.ts +8 -8
- package/src/dsl.ts +11 -17
- package/src/examples/advanced-todo/README.md +58 -40
- package/src/examples/advanced-todo/index.ts +3 -3
- package/src/examples/auth-basic/index.ts +30 -30
- package/src/examples/cart/index.ts +50 -50
- package/src/examples/hero-ecommerce/index.ts +130 -157
- package/src/examples/svelte-counter/index.ts +22 -26
- package/src/flows.ts +6 -17
- package/src/index.browser.ts +204 -0
- package/src/index.ts +37 -42
- package/src/integrations/code-canvas.ts +237 -193
- package/src/integrations/pluresdb.ts +55 -35
- package/src/integrations/state-docs.ts +104 -104
- package/src/integrations/svelte.ts +35 -35
- package/src/integrations/tauri.ts +75 -73
- package/src/integrations/unum.ts +68 -61
- package/src/registry.ts +7 -14
- package/src/runtime/terminal-adapter.ts +31 -26
- package/src/step.ts +10 -16
- package/src/types.ts +1 -1
- package/templates/basic-app/README.md +6 -9
- package/templates/fullstack-app/README.md +10 -0
- package/dist/core/codegen/docs-generator.d.ts +0 -123
- package/dist/core/codegen/docs-generator.d.ts.map +0 -1
- package/dist/core/codegen/docs-generator.js +0 -674
- package/dist/core/codegen/docs-generator.js.map +0 -1
- package/dist/core/codegen/index.d.ts +0 -11
- package/dist/core/codegen/index.d.ts.map +0 -1
- package/dist/core/codegen/index.js +0 -13
- package/dist/core/codegen/index.js.map +0 -1
- package/dist/core/codegen/ts-generator.d.ts +0 -8
- package/dist/core/codegen/ts-generator.d.ts.map +0 -1
- package/dist/core/codegen/ts-generator.js +0 -8
- package/dist/core/codegen/ts-generator.js.map +0 -1
- package/dist/core/db-adapter/index.d.ts +0 -18
- package/dist/core/db-adapter/index.d.ts.map +0 -1
- package/dist/core/db-adapter/index.js +0 -23
- package/dist/core/db-adapter/index.js.map +0 -1
- package/dist/core/db-adapter/sync-engine.d.ts +0 -180
- package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
- package/dist/core/db-adapter/sync-engine.js +0 -342
- package/dist/core/db-adapter/sync-engine.js.map +0 -1
- package/dist/core/logic-engine/engine.d.ts +0 -8
- package/dist/core/logic-engine/engine.d.ts.map +0 -1
- package/dist/core/logic-engine/engine.js +0 -8
- package/dist/core/logic-engine/engine.js.map +0 -1
- package/dist/core/logic-engine/index.d.ts +0 -16
- package/dist/core/logic-engine/index.d.ts.map +0 -1
- package/dist/core/logic-engine/index.js +0 -16
- package/dist/core/logic-engine/index.js.map +0 -1
- package/dist/core/logic-engine/protocol.d.ts +0 -7
- package/dist/core/logic-engine/protocol.d.ts.map +0 -1
- package/dist/core/logic-engine/protocol.js +0 -7
- package/dist/core/logic-engine/protocol.js.map +0 -1
- package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
- package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
- package/dist/core/logic-engine/psf-adapter.js +0 -207
- package/dist/core/logic-engine/psf-adapter.js.map +0 -1
- package/dist/core/logic-engine/rules.d.ts +0 -7
- package/dist/core/logic-engine/rules.d.ts.map +0 -1
- package/dist/core/logic-engine/rules.js +0 -7
- package/dist/core/logic-engine/rules.js.map +0 -1
- package/dist/core/schema-engine/compiler.d.ts +0 -198
- package/dist/core/schema-engine/compiler.d.ts.map +0 -1
- package/dist/core/schema-engine/compiler.js +0 -262
- package/dist/core/schema-engine/compiler.js.map +0 -1
- package/dist/core/schema-engine/generator.d.ts +0 -115
- package/dist/core/schema-engine/generator.d.ts.map +0 -1
- package/dist/core/schema-engine/generator.js +0 -506
- package/dist/core/schema-engine/generator.js.map +0 -1
- package/dist/core/schema-engine/index.d.ts +0 -18
- package/dist/core/schema-engine/index.d.ts.map +0 -1
- package/dist/core/schema-engine/index.js +0 -18
- package/dist/core/schema-engine/index.js.map +0 -1
- package/dist/core/schema-engine/psf.d.ts +0 -612
- package/dist/core/schema-engine/psf.d.ts.map +0 -1
- package/dist/core/schema-engine/psf.js +0 -45
- package/dist/core/schema-engine/psf.js.map +0 -1
- package/dist/core/schema-engine/types.d.ts +0 -10
- package/dist/core/schema-engine/types.d.ts.map +0 -1
- package/dist/core/schema-engine/types.js +0 -7
- package/dist/core/schema-engine/types.js.map +0 -1
- package/dist/core/schema-engine/validator.d.ts +0 -140
- package/dist/core/schema-engine/validator.d.ts.map +0 -1
- package/dist/core/schema-engine/validator.js +0 -407
- package/dist/core/schema-engine/validator.js.map +0 -1
- package/dist/src/adapters/cli.d.ts +0 -43
- package/dist/src/adapters/cli.d.ts.map +0 -1
- package/dist/src/adapters/cli.js +0 -126
- package/dist/src/adapters/cli.js.map +0 -1
- package/dist/src/cli/commands/auth.d.ts +0 -26
- package/dist/src/cli/commands/auth.d.ts.map +0 -1
- package/dist/src/cli/commands/auth.js +0 -233
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/build.d.ts +0 -23
- package/dist/src/cli/commands/build.d.ts.map +0 -1
- package/dist/src/cli/commands/build.js +0 -162
- package/dist/src/cli/commands/build.js.map +0 -1
- package/dist/src/cli/commands/canvas.d.ts +0 -23
- package/dist/src/cli/commands/canvas.d.ts.map +0 -1
- package/dist/src/cli/commands/canvas.js +0 -215
- package/dist/src/cli/commands/canvas.js.map +0 -1
- package/dist/src/cli/commands/cloud.d.ts +0 -27
- package/dist/src/cli/commands/cloud.d.ts.map +0 -1
- package/dist/src/cli/commands/cloud.js +0 -232
- package/dist/src/cli/commands/cloud.js.map +0 -1
- package/dist/src/cli/commands/create.d.ts +0 -21
- package/dist/src/cli/commands/create.d.ts.map +0 -1
- package/dist/src/cli/commands/create.js +0 -621
- package/dist/src/cli/commands/create.js.map +0 -1
- package/dist/src/cli/commands/dev.d.ts +0 -21
- package/dist/src/cli/commands/dev.d.ts.map +0 -1
- package/dist/src/cli/commands/dev.js +0 -71
- package/dist/src/cli/commands/dev.js.map +0 -1
- package/dist/src/cli/commands/generate.d.ts +0 -25
- package/dist/src/cli/commands/generate.d.ts.map +0 -1
- package/dist/src/cli/commands/generate.js +0 -168
- package/dist/src/cli/commands/generate.js.map +0 -1
- package/dist/src/cli/commands/orchestrate.d.ts +0 -44
- package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/src/cli/commands/orchestrate.js +0 -150
- package/dist/src/cli/commands/orchestrate.js.map +0 -1
- package/dist/src/cli/commands/verify.d.ts +0 -10
- package/dist/src/cli/commands/verify.d.ts.map +0 -1
- package/dist/src/cli/commands/verify.js +0 -39
- package/dist/src/cli/commands/verify.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -226
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cloud/auth.d.ts +0 -51
- package/dist/src/cloud/auth.d.ts.map +0 -1
- package/dist/src/cloud/auth.js +0 -194
- package/dist/src/cloud/auth.js.map +0 -1
- package/dist/src/cloud/billing.d.ts +0 -184
- package/dist/src/cloud/billing.d.ts.map +0 -1
- package/dist/src/cloud/billing.js +0 -179
- package/dist/src/cloud/billing.js.map +0 -1
- package/dist/src/cloud/client.d.ts +0 -39
- package/dist/src/cloud/client.d.ts.map +0 -1
- package/dist/src/cloud/client.js +0 -176
- package/dist/src/cloud/client.js.map +0 -1
- package/dist/src/cloud/index.d.ts +0 -44
- package/dist/src/cloud/index.d.ts.map +0 -1
- package/dist/src/cloud/index.js +0 -44
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/cloud/marketplace.d.ts +0 -166
- package/dist/src/cloud/marketplace.d.ts.map +0 -1
- package/dist/src/cloud/marketplace.js +0 -159
- package/dist/src/cloud/marketplace.js.map +0 -1
- package/dist/src/cloud/provisioning.d.ts +0 -110
- package/dist/src/cloud/provisioning.d.ts.map +0 -1
- package/dist/src/cloud/provisioning.js +0 -148
- package/dist/src/cloud/provisioning.js.map +0 -1
- package/dist/src/cloud/relay/endpoints.d.ts +0 -62
- package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/src/cloud/relay/endpoints.js +0 -217
- package/dist/src/cloud/relay/endpoints.js.map +0 -1
- package/dist/src/cloud/relay/health/index.d.ts +0 -5
- package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/health/index.js +0 -9
- package/dist/src/cloud/relay/health/index.js.map +0 -1
- package/dist/src/cloud/relay/stats/index.d.ts +0 -5
- package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/stats/index.js +0 -9
- package/dist/src/cloud/relay/stats/index.js.map +0 -1
- package/dist/src/cloud/relay/sync/index.d.ts +0 -5
- package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/sync/index.js +0 -9
- package/dist/src/cloud/relay/sync/index.js.map +0 -1
- package/dist/src/cloud/relay/usage/index.d.ts +0 -5
- package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/usage/index.js +0 -9
- package/dist/src/cloud/relay/usage/index.js.map +0 -1
- package/dist/src/cloud/sponsors.d.ts +0 -81
- package/dist/src/cloud/sponsors.d.ts.map +0 -1
- package/dist/src/cloud/sponsors.js +0 -130
- package/dist/src/cloud/sponsors.js.map +0 -1
- package/dist/src/cloud/types.d.ts +0 -169
- package/dist/src/cloud/types.d.ts.map +0 -1
- package/dist/src/cloud/types.js +0 -7
- package/dist/src/cloud/types.js.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/index.js +0 -17
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/core/actors.d.ts +0 -95
- package/dist/src/core/actors.d.ts.map +0 -1
- package/dist/src/core/actors.js +0 -158
- package/dist/src/core/actors.js.map +0 -1
- package/dist/src/core/component/generator.d.ts.map +0 -1
- package/dist/src/core/component/generator.js +0 -349
- package/dist/src/core/component/generator.js.map +0 -1
- package/dist/src/core/engine.d.ts +0 -92
- package/dist/src/core/engine.d.ts.map +0 -1
- package/dist/src/core/engine.js +0 -199
- package/dist/src/core/engine.js.map +0 -1
- package/dist/src/core/introspection.d.ts +0 -141
- package/dist/src/core/introspection.d.ts.map +0 -1
- package/dist/src/core/introspection.js +0 -208
- package/dist/src/core/introspection.js.map +0 -1
- package/dist/src/core/logic/generator.d.ts +0 -76
- package/dist/src/core/logic/generator.d.ts.map +0 -1
- package/dist/src/core/logic/generator.js +0 -370
- package/dist/src/core/logic/generator.js.map +0 -1
- package/dist/src/core/pluresdb/adapter.d.ts +0 -72
- package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
- package/dist/src/core/pluresdb/adapter.js +0 -73
- package/dist/src/core/pluresdb/adapter.js.map +0 -1
- package/dist/src/core/pluresdb/generator.d.ts +0 -58
- package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/src/core/pluresdb/generator.js +0 -191
- package/dist/src/core/pluresdb/generator.js.map +0 -1
- package/dist/src/core/pluresdb/index.d.ts +0 -15
- package/dist/src/core/pluresdb/index.d.ts.map +0 -1
- package/dist/src/core/pluresdb/index.js +0 -11
- package/dist/src/core/pluresdb/index.js.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.js +0 -130
- package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
- package/dist/src/core/pluresdb/store.d.ts +0 -199
- package/dist/src/core/pluresdb/store.d.ts.map +0 -1
- package/dist/src/core/pluresdb/store.js +0 -344
- package/dist/src/core/pluresdb/store.js.map +0 -1
- package/dist/src/core/protocol.d.ts.map +0 -1
- package/dist/src/core/protocol.js +0 -46
- package/dist/src/core/protocol.js.map +0 -1
- package/dist/src/core/rules.d.ts +0 -120
- package/dist/src/core/rules.d.ts.map +0 -1
- package/dist/src/core/rules.js +0 -81
- package/dist/src/core/rules.js.map +0 -1
- package/dist/src/core/schema/loader.d.ts +0 -47
- package/dist/src/core/schema/loader.d.ts.map +0 -1
- package/dist/src/core/schema/loader.js +0 -189
- package/dist/src/core/schema/loader.js.map +0 -1
- package/dist/src/core/schema/normalize.d.ts +0 -72
- package/dist/src/core/schema/normalize.d.ts.map +0 -1
- package/dist/src/core/schema/normalize.js +0 -190
- package/dist/src/core/schema/normalize.js.map +0 -1
- package/dist/src/core/schema/types.d.ts.map +0 -1
- package/dist/src/core/schema/types.js +0 -161
- package/dist/src/core/schema/types.js.map +0 -1
- package/dist/src/dsl/index.d.ts +0 -152
- package/dist/src/dsl/index.d.ts.map +0 -1
- package/dist/src/dsl/index.js +0 -132
- package/dist/src/dsl/index.js.map +0 -1
- package/dist/src/dsl.d.ts +0 -124
- package/dist/src/dsl.d.ts.map +0 -1
- package/dist/src/dsl.js +0 -130
- package/dist/src/dsl.js.map +0 -1
- package/dist/src/examples/advanced-todo/index.d.ts +0 -55
- package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/src/examples/advanced-todo/index.js +0 -222
- package/dist/src/examples/advanced-todo/index.js.map +0 -1
- package/dist/src/examples/auth-basic/index.d.ts +0 -17
- package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/src/examples/auth-basic/index.js +0 -122
- package/dist/src/examples/auth-basic/index.js.map +0 -1
- package/dist/src/examples/cart/index.d.ts +0 -19
- package/dist/src/examples/cart/index.d.ts.map +0 -1
- package/dist/src/examples/cart/index.js +0 -202
- package/dist/src/examples/cart/index.js.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.js +0 -506
- package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/src/examples/svelte-counter/index.d.ts +0 -31
- package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/src/examples/svelte-counter/index.js +0 -123
- package/dist/src/examples/svelte-counter/index.js.map +0 -1
- package/dist/src/flows.d.ts +0 -125
- package/dist/src/flows.d.ts.map +0 -1
- package/dist/src/flows.js +0 -160
- package/dist/src/flows.js.map +0 -1
- package/dist/src/index.d.ts +0 -77
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -64
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/code-canvas.d.ts +0 -265
- package/dist/src/integrations/code-canvas.d.ts.map +0 -1
- package/dist/src/integrations/code-canvas.js +0 -451
- package/dist/src/integrations/code-canvas.js.map +0 -1
- package/dist/src/integrations/pluresdb.d.ts +0 -117
- package/dist/src/integrations/pluresdb.d.ts.map +0 -1
- package/dist/src/integrations/pluresdb.js +0 -117
- package/dist/src/integrations/pluresdb.js.map +0 -1
- package/dist/src/integrations/state-docs.d.ts +0 -191
- package/dist/src/integrations/state-docs.d.ts.map +0 -1
- package/dist/src/integrations/state-docs.js +0 -515
- package/dist/src/integrations/state-docs.js.map +0 -1
- package/dist/src/integrations/svelte.d.ts.map +0 -1
- package/dist/src/integrations/svelte.js +0 -447
- package/dist/src/integrations/svelte.js.map +0 -1
- package/dist/src/integrations/tauri.d.ts +0 -360
- package/dist/src/integrations/tauri.d.ts.map +0 -1
- package/dist/src/integrations/tauri.js +0 -278
- package/dist/src/integrations/tauri.js.map +0 -1
- package/dist/src/integrations/unum.d.ts +0 -159
- package/dist/src/integrations/unum.d.ts.map +0 -1
- package/dist/src/integrations/unum.js +0 -240
- package/dist/src/integrations/unum.js.map +0 -1
- package/dist/src/registry.d.ts +0 -94
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -181
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/src/runtime/terminal-adapter.js +0 -239
- package/dist/src/runtime/terminal-adapter.js.map +0 -1
- package/dist/src/step.d.ts +0 -34
- package/dist/src/step.d.ts.map +0 -1
- package/dist/src/step.js +0 -111
- package/dist/src/step.js.map +0 -1
- package/dist/src/types.d.ts +0 -63
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -6
- package/dist/src/types.js.map +0 -1
- package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
- package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
- package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
- package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
- package/dist/tools/cli/commands/index.d.ts +0 -7
- package/dist/tools/cli/commands/index.d.ts.map +0 -1
- package/dist/tools/cli/commands/index.js +0 -7
- package/dist/tools/cli/commands/index.js.map +0 -1
- package/dist/tools/cli/index.d.ts +0 -8
- package/dist/tools/cli/index.d.ts.map +0 -1
- package/dist/tools/cli/index.js +0 -9
- package/dist/tools/cli/index.js.map +0 -1
- package/dist/tools/watcher/index.d.ts +0 -105
- package/dist/tools/watcher/index.d.ts.map +0 -1
- package/dist/tools/watcher/index.js +0 -213
- package/dist/tools/watcher/index.js.map +0 -1
- package/dist/ui/canvas/canvas-projection.d.ts +0 -78
- package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-projection.js +0 -416
- package/dist/ui/canvas/canvas-projection.js.map +0 -1
- package/dist/ui/canvas/canvas-state.d.ts +0 -200
- package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-state.js +0 -464
- package/dist/ui/canvas/canvas-state.js.map +0 -1
- package/dist/ui/canvas/components/index.d.ts +0 -95
- package/dist/ui/canvas/components/index.d.ts.map +0 -1
- package/dist/ui/canvas/components/index.js +0 -19
- package/dist/ui/canvas/components/index.js.map +0 -1
- package/dist/ui/canvas/index.d.ts +0 -32
- package/dist/ui/canvas/index.d.ts.map +0 -1
- package/dist/ui/canvas/index.js +0 -32
- package/dist/ui/canvas/index.js.map +0 -1
- package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
- package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/server.js +0 -248
- package/dist/ui/canvas-inspector/src/server.js.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
- package/dist/ui/svelte-generator/index.d.ts +0 -9
- package/dist/ui/svelte-generator/index.d.ts.map +0 -1
- package/dist/ui/svelte-generator/index.js +0 -11
- package/dist/ui/svelte-generator/index.js.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.js +0 -506
- package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Actor system tests
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, it, expect, beforeEach, vi } from
|
|
6
|
-
import { ActorManager, createTimerActor, type Actor } from
|
|
7
|
-
import { createPraxisEngine } from
|
|
8
|
-
import { PraxisRegistry } from
|
|
9
|
-
import { defineEvent, defineRule, defineFact } from
|
|
10
|
-
|
|
11
|
-
describe(
|
|
12
|
-
describe(
|
|
5
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
6
|
+
import { ActorManager, createTimerActor, type Actor } from '../core/actors.js';
|
|
7
|
+
import { createPraxisEngine } from '../core/engine.js';
|
|
8
|
+
import { PraxisRegistry } from '../core/rules.js';
|
|
9
|
+
import { defineEvent, defineRule, defineFact } from '../dsl/index.js';
|
|
10
|
+
|
|
11
|
+
describe('Actor System', () => {
|
|
12
|
+
describe('ActorManager', () => {
|
|
13
13
|
let manager: ActorManager<{ count: number }>;
|
|
14
14
|
let registry: PraxisRegistry<{ count: number }>;
|
|
15
15
|
let engine: ReturnType<typeof createPraxisEngine<{ count: number }>>;
|
|
@@ -24,68 +24,68 @@ describe("Actor System", () => {
|
|
|
24
24
|
manager.attachEngine(engine);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
-
it(
|
|
27
|
+
it('should register and start an actor', async () => {
|
|
28
28
|
const onStartSpy = vi.fn();
|
|
29
29
|
const actor: Actor<{ count: number }> = {
|
|
30
|
-
id:
|
|
31
|
-
description:
|
|
30
|
+
id: 'test-actor',
|
|
31
|
+
description: 'Test actor',
|
|
32
32
|
onStart: onStartSpy,
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
manager.register(actor);
|
|
36
|
-
await manager.start(
|
|
36
|
+
await manager.start('test-actor');
|
|
37
37
|
|
|
38
38
|
expect(onStartSpy).toHaveBeenCalledWith(engine);
|
|
39
|
-
expect(manager.isActive(
|
|
39
|
+
expect(manager.isActive('test-actor')).toBe(true);
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
it(
|
|
42
|
+
it('should throw when registering duplicate actor IDs', () => {
|
|
43
43
|
const actor: Actor<{ count: number }> = {
|
|
44
|
-
id:
|
|
45
|
-
description:
|
|
44
|
+
id: 'duplicate',
|
|
45
|
+
description: 'Test actor',
|
|
46
46
|
};
|
|
47
47
|
|
|
48
48
|
manager.register(actor);
|
|
49
49
|
expect(() => manager.register(actor)).toThrow('Actor with id "duplicate" already registered');
|
|
50
50
|
});
|
|
51
51
|
|
|
52
|
-
it(
|
|
52
|
+
it('should throw when starting already active actor', async () => {
|
|
53
53
|
const actor: Actor<{ count: number }> = {
|
|
54
|
-
id:
|
|
55
|
-
description:
|
|
54
|
+
id: 'test',
|
|
55
|
+
description: 'Test',
|
|
56
56
|
};
|
|
57
57
|
|
|
58
58
|
manager.register(actor);
|
|
59
|
-
await manager.start(
|
|
60
|
-
await expect(manager.start(
|
|
59
|
+
await manager.start('test');
|
|
60
|
+
await expect(manager.start('test')).rejects.toThrow('Actor "test" is already started');
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
it(
|
|
63
|
+
it('should stop an actor', async () => {
|
|
64
64
|
const onStopSpy = vi.fn();
|
|
65
65
|
const actor: Actor<{ count: number }> = {
|
|
66
|
-
id:
|
|
67
|
-
description:
|
|
66
|
+
id: 'test-actor',
|
|
67
|
+
description: 'Test actor',
|
|
68
68
|
onStop: onStopSpy,
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
manager.register(actor);
|
|
72
|
-
await manager.start(
|
|
73
|
-
await manager.stop(
|
|
72
|
+
await manager.start('test-actor');
|
|
73
|
+
await manager.stop('test-actor');
|
|
74
74
|
|
|
75
75
|
expect(onStopSpy).toHaveBeenCalled();
|
|
76
|
-
expect(manager.isActive(
|
|
76
|
+
expect(manager.isActive('test-actor')).toBe(false);
|
|
77
77
|
});
|
|
78
78
|
|
|
79
|
-
it(
|
|
79
|
+
it('should notify actors of state changes', async () => {
|
|
80
80
|
const onStateChangeSpy = vi.fn();
|
|
81
81
|
const actor: Actor<{ count: number }> = {
|
|
82
|
-
id:
|
|
83
|
-
description:
|
|
82
|
+
id: 'observer',
|
|
83
|
+
description: 'Observer actor',
|
|
84
84
|
onStateChange: onStateChangeSpy,
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
manager.register(actor);
|
|
88
|
-
await manager.start(
|
|
88
|
+
await manager.start('observer');
|
|
89
89
|
|
|
90
90
|
const state = engine.getState();
|
|
91
91
|
await manager.notifyStateChange(state);
|
|
@@ -93,12 +93,12 @@ describe("Actor System", () => {
|
|
|
93
93
|
expect(onStateChangeSpy).toHaveBeenCalledWith(state, engine);
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
-
it(
|
|
96
|
+
it('should start all registered actors', async () => {
|
|
97
97
|
const onStart1 = vi.fn();
|
|
98
98
|
const onStart2 = vi.fn();
|
|
99
99
|
|
|
100
|
-
manager.register({ id:
|
|
101
|
-
manager.register({ id:
|
|
100
|
+
manager.register({ id: 'actor1', description: 'Actor 1', onStart: onStart1 });
|
|
101
|
+
manager.register({ id: 'actor2', description: 'Actor 2', onStart: onStart2 });
|
|
102
102
|
|
|
103
103
|
await manager.startAll();
|
|
104
104
|
|
|
@@ -107,12 +107,12 @@ describe("Actor System", () => {
|
|
|
107
107
|
expect(manager.getActiveActorIds()).toHaveLength(2);
|
|
108
108
|
});
|
|
109
109
|
|
|
110
|
-
it(
|
|
110
|
+
it('should stop all active actors', async () => {
|
|
111
111
|
const onStop1 = vi.fn();
|
|
112
112
|
const onStop2 = vi.fn();
|
|
113
113
|
|
|
114
|
-
manager.register({ id:
|
|
115
|
-
manager.register({ id:
|
|
114
|
+
manager.register({ id: 'actor1', description: 'Actor 1', onStop: onStop1 });
|
|
115
|
+
manager.register({ id: 'actor2', description: 'Actor 2', onStop: onStop2 });
|
|
116
116
|
|
|
117
117
|
await manager.startAll();
|
|
118
118
|
await manager.stopAll();
|
|
@@ -122,13 +122,13 @@ describe("Actor System", () => {
|
|
|
122
122
|
expect(manager.getActiveActorIds()).toHaveLength(0);
|
|
123
123
|
});
|
|
124
124
|
|
|
125
|
-
it(
|
|
125
|
+
it('should handle async actor methods', async () => {
|
|
126
126
|
let startResolved = false;
|
|
127
127
|
let stopResolved = false;
|
|
128
128
|
|
|
129
129
|
const actor: Actor<{ count: number }> = {
|
|
130
|
-
id:
|
|
131
|
-
description:
|
|
130
|
+
id: 'async-actor',
|
|
131
|
+
description: 'Async actor',
|
|
132
132
|
onStart: async () => {
|
|
133
133
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
134
134
|
startResolved = true;
|
|
@@ -140,24 +140,24 @@ describe("Actor System", () => {
|
|
|
140
140
|
};
|
|
141
141
|
|
|
142
142
|
manager.register(actor);
|
|
143
|
-
await manager.start(
|
|
143
|
+
await manager.start('async-actor');
|
|
144
144
|
expect(startResolved).toBe(true);
|
|
145
145
|
|
|
146
|
-
await manager.stop(
|
|
146
|
+
await manager.stop('async-actor');
|
|
147
147
|
expect(stopResolved).toBe(true);
|
|
148
148
|
});
|
|
149
149
|
|
|
150
|
-
it(
|
|
150
|
+
it('should not notify stopped actors of state changes', async () => {
|
|
151
151
|
const onStateChangeSpy = vi.fn();
|
|
152
152
|
const actor: Actor<{ count: number }> = {
|
|
153
|
-
id:
|
|
154
|
-
description:
|
|
153
|
+
id: 'observer',
|
|
154
|
+
description: 'Observer',
|
|
155
155
|
onStateChange: onStateChangeSpy,
|
|
156
156
|
};
|
|
157
157
|
|
|
158
158
|
manager.register(actor);
|
|
159
|
-
await manager.start(
|
|
160
|
-
await manager.stop(
|
|
159
|
+
await manager.start('observer');
|
|
160
|
+
await manager.stop('observer');
|
|
161
161
|
|
|
162
162
|
const state = engine.getState();
|
|
163
163
|
await manager.notifyStateChange(state);
|
|
@@ -165,31 +165,31 @@ describe("Actor System", () => {
|
|
|
165
165
|
expect(onStateChangeSpy).not.toHaveBeenCalled();
|
|
166
166
|
});
|
|
167
167
|
|
|
168
|
-
it(
|
|
168
|
+
it('should throw when starting actor without attached engine', async () => {
|
|
169
169
|
const actor: Actor<{ count: number }> = {
|
|
170
|
-
id:
|
|
171
|
-
description:
|
|
170
|
+
id: 'test',
|
|
171
|
+
description: 'Test',
|
|
172
172
|
};
|
|
173
173
|
|
|
174
174
|
const newManager = new ActorManager<{ count: number }>();
|
|
175
175
|
newManager.register(actor);
|
|
176
176
|
|
|
177
|
-
await expect(newManager.start(
|
|
178
|
-
|
|
177
|
+
await expect(newManager.start('test')).rejects.toThrow(
|
|
178
|
+
'Actor manager not attached to an engine'
|
|
179
179
|
);
|
|
180
180
|
});
|
|
181
181
|
});
|
|
182
182
|
|
|
183
|
-
describe(
|
|
184
|
-
it(
|
|
183
|
+
describe('createTimerActor', () => {
|
|
184
|
+
it('should create a timer actor that dispatches events', async () => {
|
|
185
185
|
vi.useFakeTimers();
|
|
186
186
|
|
|
187
|
-
const Tick = defineEvent<
|
|
188
|
-
const TickReceived = defineFact<
|
|
187
|
+
const Tick = defineEvent<'TICK', {}>('TICK');
|
|
188
|
+
const TickReceived = defineFact<'TickReceived', {}>('TickReceived');
|
|
189
189
|
|
|
190
190
|
const tickRule = defineRule<{ count: number }>({
|
|
191
|
-
id:
|
|
192
|
-
description:
|
|
191
|
+
id: 'tick.rule',
|
|
192
|
+
description: 'Count ticks',
|
|
193
193
|
impl: (state, events) => {
|
|
194
194
|
if (events.some(Tick.is)) {
|
|
195
195
|
state.context.count += 1;
|
|
@@ -210,9 +210,9 @@ describe("Actor System", () => {
|
|
|
210
210
|
const manager = new ActorManager<{ count: number }>();
|
|
211
211
|
manager.attachEngine(engine);
|
|
212
212
|
|
|
213
|
-
const timerActor = createTimerActor(
|
|
213
|
+
const timerActor = createTimerActor('timer', 100, () => Tick.create({}));
|
|
214
214
|
manager.register(timerActor);
|
|
215
|
-
await manager.start(
|
|
215
|
+
await manager.start('timer');
|
|
216
216
|
|
|
217
217
|
// Advance timers
|
|
218
218
|
vi.advanceTimersByTime(250);
|
|
@@ -220,19 +220,19 @@ describe("Actor System", () => {
|
|
|
220
220
|
// Should have ticked at least twice (at 100ms and 200ms)
|
|
221
221
|
expect(engine.getContext().count).toBeGreaterThanOrEqual(2);
|
|
222
222
|
|
|
223
|
-
await manager.stop(
|
|
223
|
+
await manager.stop('timer');
|
|
224
224
|
vi.useRealTimers();
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
-
it(
|
|
227
|
+
it('should stop dispatching events after actor is stopped', async () => {
|
|
228
228
|
vi.useFakeTimers();
|
|
229
229
|
|
|
230
|
-
const Tick = defineEvent<
|
|
230
|
+
const Tick = defineEvent<'TICK', {}>('TICK');
|
|
231
231
|
const registry = new PraxisRegistry<{ count: number }>();
|
|
232
232
|
|
|
233
233
|
const tickRule = defineRule<{ count: number }>({
|
|
234
|
-
id:
|
|
235
|
-
description:
|
|
234
|
+
id: 'tick.rule',
|
|
235
|
+
description: 'Count ticks',
|
|
236
236
|
impl: (state, events) => {
|
|
237
237
|
if (events.some(Tick.is)) {
|
|
238
238
|
state.context.count += 1;
|
|
@@ -250,14 +250,14 @@ describe("Actor System", () => {
|
|
|
250
250
|
const manager = new ActorManager<{ count: number }>();
|
|
251
251
|
manager.attachEngine(engine);
|
|
252
252
|
|
|
253
|
-
const timerActor = createTimerActor(
|
|
253
|
+
const timerActor = createTimerActor('timer', 50, () => Tick.create({}));
|
|
254
254
|
manager.register(timerActor);
|
|
255
|
-
await manager.start(
|
|
255
|
+
await manager.start('timer');
|
|
256
256
|
|
|
257
257
|
vi.advanceTimersByTime(100);
|
|
258
258
|
const countBeforeStop = engine.getContext().count;
|
|
259
259
|
|
|
260
|
-
await manager.stop(
|
|
260
|
+
await manager.stop('timer');
|
|
261
261
|
vi.advanceTimersByTime(200);
|
|
262
262
|
const countAfterStop = engine.getContext().count;
|
|
263
263
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Billing Tests
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Tests for billing types and utilities.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { describe, it, expect } from
|
|
7
|
+
import { describe, it, expect } from 'vitest';
|
|
8
8
|
import {
|
|
9
9
|
SubscriptionTier,
|
|
10
10
|
SubscriptionStatus,
|
|
@@ -14,18 +14,18 @@ import {
|
|
|
14
14
|
checkUsageLimits,
|
|
15
15
|
createFreeSubscription,
|
|
16
16
|
createSponsorSubscription,
|
|
17
|
-
} from
|
|
17
|
+
} from '../cloud/billing.js';
|
|
18
18
|
|
|
19
|
-
describe(
|
|
20
|
-
describe(
|
|
21
|
-
it(
|
|
19
|
+
describe('Billing', () => {
|
|
20
|
+
describe('Tier Limits', () => {
|
|
21
|
+
it('should have limits for all tiers', () => {
|
|
22
22
|
expect(TIER_LIMITS[SubscriptionTier.FREE]).toBeDefined();
|
|
23
23
|
expect(TIER_LIMITS[SubscriptionTier.SOLO]).toBeDefined();
|
|
24
24
|
expect(TIER_LIMITS[SubscriptionTier.TEAM]).toBeDefined();
|
|
25
25
|
expect(TIER_LIMITS[SubscriptionTier.ENTERPRISE]).toBeDefined();
|
|
26
26
|
});
|
|
27
27
|
|
|
28
|
-
it(
|
|
28
|
+
it('should have increasing limits for higher tiers', () => {
|
|
29
29
|
expect(TIER_LIMITS[SubscriptionTier.SOLO].maxSyncsPerMonth).toBeGreaterThan(
|
|
30
30
|
TIER_LIMITS[SubscriptionTier.FREE].maxSyncsPerMonth
|
|
31
31
|
);
|
|
@@ -38,13 +38,13 @@ describe("Billing", () => {
|
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
40
|
|
|
41
|
-
describe(
|
|
42
|
-
it(
|
|
41
|
+
describe('hasAccessToTier', () => {
|
|
42
|
+
it('should grant access to same tier', () => {
|
|
43
43
|
const subscription = createFreeSubscription();
|
|
44
44
|
expect(hasAccessToTier(subscription, SubscriptionTier.FREE)).toBe(true);
|
|
45
45
|
});
|
|
46
46
|
|
|
47
|
-
it(
|
|
47
|
+
it('should grant access to lower tiers', () => {
|
|
48
48
|
const subscription = {
|
|
49
49
|
...createFreeSubscription(),
|
|
50
50
|
tier: SubscriptionTier.ENTERPRISE,
|
|
@@ -54,14 +54,14 @@ describe("Billing", () => {
|
|
|
54
54
|
expect(hasAccessToTier(subscription, SubscriptionTier.TEAM)).toBe(true);
|
|
55
55
|
});
|
|
56
56
|
|
|
57
|
-
it(
|
|
57
|
+
it('should deny access to higher tiers', () => {
|
|
58
58
|
const subscription = createFreeSubscription();
|
|
59
59
|
expect(hasAccessToTier(subscription, SubscriptionTier.SOLO)).toBe(false);
|
|
60
60
|
expect(hasAccessToTier(subscription, SubscriptionTier.TEAM)).toBe(false);
|
|
61
61
|
expect(hasAccessToTier(subscription, SubscriptionTier.ENTERPRISE)).toBe(false);
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
-
it(
|
|
64
|
+
it('should deny access if subscription is not active', () => {
|
|
65
65
|
const subscription = {
|
|
66
66
|
...createFreeSubscription(),
|
|
67
67
|
status: SubscriptionStatus.EXPIRED,
|
|
@@ -70,8 +70,8 @@ describe("Billing", () => {
|
|
|
70
70
|
});
|
|
71
71
|
});
|
|
72
72
|
|
|
73
|
-
describe(
|
|
74
|
-
it(
|
|
73
|
+
describe('checkUsageLimits', () => {
|
|
74
|
+
it('should pass when usage is within limits', () => {
|
|
75
75
|
const subscription = createFreeSubscription();
|
|
76
76
|
const result = checkUsageLimits(subscription, {
|
|
77
77
|
syncCount: 500,
|
|
@@ -83,7 +83,7 @@ describe("Billing", () => {
|
|
|
83
83
|
expect(result.violations).toHaveLength(0);
|
|
84
84
|
});
|
|
85
85
|
|
|
86
|
-
it(
|
|
86
|
+
it('should fail when sync count exceeds limit', () => {
|
|
87
87
|
const subscription = createFreeSubscription();
|
|
88
88
|
const result = checkUsageLimits(subscription, {
|
|
89
89
|
syncCount: 2000,
|
|
@@ -93,10 +93,10 @@ describe("Billing", () => {
|
|
|
93
93
|
});
|
|
94
94
|
expect(result.withinLimits).toBe(false);
|
|
95
95
|
expect(result.violations.length).toBeGreaterThan(0);
|
|
96
|
-
expect(result.violations[0]).toContain(
|
|
96
|
+
expect(result.violations[0]).toContain('Sync limit exceeded');
|
|
97
97
|
});
|
|
98
98
|
|
|
99
|
-
it(
|
|
99
|
+
it('should fail when storage exceeds limit', () => {
|
|
100
100
|
const subscription = createFreeSubscription();
|
|
101
101
|
const result = checkUsageLimits(subscription, {
|
|
102
102
|
syncCount: 0,
|
|
@@ -106,10 +106,10 @@ describe("Billing", () => {
|
|
|
106
106
|
});
|
|
107
107
|
expect(result.withinLimits).toBe(false);
|
|
108
108
|
expect(result.violations.length).toBeGreaterThan(0);
|
|
109
|
-
expect(result.violations[0]).toContain(
|
|
109
|
+
expect(result.violations[0]).toContain('Storage limit exceeded');
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
-
it(
|
|
112
|
+
it('should fail when team members exceed limit', () => {
|
|
113
113
|
const subscription = createFreeSubscription();
|
|
114
114
|
const result = checkUsageLimits(subscription, {
|
|
115
115
|
syncCount: 0,
|
|
@@ -119,10 +119,10 @@ describe("Billing", () => {
|
|
|
119
119
|
});
|
|
120
120
|
expect(result.withinLimits).toBe(false);
|
|
121
121
|
expect(result.violations.length).toBeGreaterThan(0);
|
|
122
|
-
expect(result.violations[0]).toContain(
|
|
122
|
+
expect(result.violations[0]).toContain('Team member limit exceeded');
|
|
123
123
|
});
|
|
124
124
|
|
|
125
|
-
it(
|
|
125
|
+
it('should allow unlimited team members for enterprise', () => {
|
|
126
126
|
const subscription = {
|
|
127
127
|
...createFreeSubscription(),
|
|
128
128
|
tier: SubscriptionTier.ENTERPRISE,
|
|
@@ -138,8 +138,8 @@ describe("Billing", () => {
|
|
|
138
138
|
});
|
|
139
139
|
});
|
|
140
140
|
|
|
141
|
-
describe(
|
|
142
|
-
it(
|
|
141
|
+
describe('createFreeSubscription', () => {
|
|
142
|
+
it('should create a free subscription', () => {
|
|
143
143
|
const subscription = createFreeSubscription();
|
|
144
144
|
expect(subscription.tier).toBe(SubscriptionTier.FREE);
|
|
145
145
|
expect(subscription.status).toBe(SubscriptionStatus.ACTIVE);
|
|
@@ -148,27 +148,27 @@ describe("Billing", () => {
|
|
|
148
148
|
});
|
|
149
149
|
});
|
|
150
150
|
|
|
151
|
-
describe(
|
|
152
|
-
it(
|
|
153
|
-
const subscription = createSponsorSubscription(
|
|
151
|
+
describe('createSponsorSubscription', () => {
|
|
152
|
+
it('should create solo tier for $5/month', () => {
|
|
153
|
+
const subscription = createSponsorSubscription('Solo', 500);
|
|
154
154
|
expect(subscription.tier).toBe(SubscriptionTier.SOLO);
|
|
155
155
|
expect(subscription.provider).toBe(BillingProvider.SPONSORS);
|
|
156
156
|
});
|
|
157
157
|
|
|
158
|
-
it(
|
|
159
|
-
const subscription = createSponsorSubscription(
|
|
158
|
+
it('should create team tier for $20/month', () => {
|
|
159
|
+
const subscription = createSponsorSubscription('Team', 2000);
|
|
160
160
|
expect(subscription.tier).toBe(SubscriptionTier.TEAM);
|
|
161
161
|
expect(subscription.provider).toBe(BillingProvider.SPONSORS);
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
-
it(
|
|
165
|
-
const subscription = createSponsorSubscription(
|
|
164
|
+
it('should create enterprise tier for $50/month', () => {
|
|
165
|
+
const subscription = createSponsorSubscription('Enterprise', 5000);
|
|
166
166
|
expect(subscription.tier).toBe(SubscriptionTier.ENTERPRISE);
|
|
167
167
|
expect(subscription.provider).toBe(BillingProvider.SPONSORS);
|
|
168
168
|
});
|
|
169
169
|
|
|
170
|
-
it(
|
|
171
|
-
const subscription = createSponsorSubscription(
|
|
170
|
+
it('should default to free tier for low amounts', () => {
|
|
171
|
+
const subscription = createSponsorSubscription('Supporter', 100);
|
|
172
172
|
expect(subscription.tier).toBe(SubscriptionTier.FREE);
|
|
173
173
|
});
|
|
174
174
|
});
|