@mmapp/player-core 0.1.0-alpha.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.
Files changed (63) hide show
  1. package/dist/index.d.mts +1436 -0
  2. package/dist/index.d.ts +1436 -0
  3. package/dist/index.js +4828 -0
  4. package/dist/index.mjs +4762 -0
  5. package/package.json +35 -0
  6. package/package.json.backup +35 -0
  7. package/src/__tests__/actions.test.ts +187 -0
  8. package/src/__tests__/blueprint-e2e.test.ts +706 -0
  9. package/src/__tests__/blueprint-test-runner.test.ts +680 -0
  10. package/src/__tests__/core-functions.test.ts +78 -0
  11. package/src/__tests__/dsl-compiler.test.ts +1382 -0
  12. package/src/__tests__/dsl-grammar.test.ts +1682 -0
  13. package/src/__tests__/events.test.ts +200 -0
  14. package/src/__tests__/expression.test.ts +296 -0
  15. package/src/__tests__/failure-policies.test.ts +110 -0
  16. package/src/__tests__/frontend-context.test.ts +182 -0
  17. package/src/__tests__/integration.test.ts +256 -0
  18. package/src/__tests__/security.test.ts +190 -0
  19. package/src/__tests__/state-machine.test.ts +450 -0
  20. package/src/__tests__/testing-engine.test.ts +671 -0
  21. package/src/actions/dispatcher.ts +80 -0
  22. package/src/actions/index.ts +7 -0
  23. package/src/actions/types.ts +25 -0
  24. package/src/dsl/compiler/component-mapper.ts +289 -0
  25. package/src/dsl/compiler/field-mapper.ts +187 -0
  26. package/src/dsl/compiler/index.ts +82 -0
  27. package/src/dsl/compiler/manifest-compiler.ts +76 -0
  28. package/src/dsl/compiler/symbol-table.ts +214 -0
  29. package/src/dsl/compiler/utils.ts +48 -0
  30. package/src/dsl/compiler/view-compiler.ts +286 -0
  31. package/src/dsl/compiler/workflow-compiler.ts +600 -0
  32. package/src/dsl/index.ts +66 -0
  33. package/src/dsl/ir-migration.ts +221 -0
  34. package/src/dsl/ir-types.ts +416 -0
  35. package/src/dsl/lexer.ts +579 -0
  36. package/src/dsl/parser.ts +115 -0
  37. package/src/dsl/types.ts +256 -0
  38. package/src/events/event-bus.ts +68 -0
  39. package/src/events/index.ts +9 -0
  40. package/src/events/pattern-matcher.ts +61 -0
  41. package/src/events/types.ts +27 -0
  42. package/src/expression/evaluator.ts +676 -0
  43. package/src/expression/functions.ts +214 -0
  44. package/src/expression/index.ts +13 -0
  45. package/src/expression/types.ts +64 -0
  46. package/src/index.ts +61 -0
  47. package/src/state-machine/index.ts +16 -0
  48. package/src/state-machine/interpreter.ts +319 -0
  49. package/src/state-machine/types.ts +89 -0
  50. package/src/testing/action-trace.ts +209 -0
  51. package/src/testing/blueprint-test-runner.ts +214 -0
  52. package/src/testing/graph-walker.ts +249 -0
  53. package/src/testing/index.ts +69 -0
  54. package/src/testing/nrt-comparator.ts +199 -0
  55. package/src/testing/nrt-types.ts +230 -0
  56. package/src/testing/test-actions.ts +645 -0
  57. package/src/testing/test-compiler.ts +278 -0
  58. package/src/testing/test-runner.ts +444 -0
  59. package/src/testing/types.ts +231 -0
  60. package/src/validation/definition-validator.ts +812 -0
  61. package/src/validation/index.ts +13 -0
  62. package/tsconfig.json +26 -0
  63. package/vitest.config.ts +8 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Core Function Tests — one test per function (31 total).
3
+ * Verifies each of the 31 core expression functions produces correct results.
4
+ */
5
+
6
+ import { describe, it, expect, beforeEach } from 'vitest';
7
+ import { createEvaluator, WEB_FAILURE_POLICIES, clearExpressionCache } from '../expression';
8
+ import type { Evaluator, ExpressionContext } from '../expression';
9
+
10
+ describe('31 Core Functions', () => {
11
+ let ev: Evaluator;
12
+ let ctx: ExpressionContext;
13
+
14
+ beforeEach(() => {
15
+ clearExpressionCache();
16
+ ev = createEvaluator({ functions: [], failurePolicy: WEB_FAILURE_POLICIES.VIEW_BINDING });
17
+ ctx = {
18
+ state_data: { items: [1, 2, 3], name: 'Alice', empty: '', obj: { a: 1 } },
19
+ memory: {},
20
+ current_state: 'active',
21
+ status: 'ACTIVE',
22
+ items: [1, 2, 3],
23
+ name: 'Alice',
24
+ empty: '',
25
+ obj: { a: 1 },
26
+ };
27
+ });
28
+
29
+ // Math (8)
30
+ it('add', () => expect(ev.evaluate('add(10, 5)', ctx).value).toBe(15));
31
+ it('subtract', () => expect(ev.evaluate('subtract(10, 3)', ctx).value).toBe(7));
32
+ it('multiply', () => expect(ev.evaluate('multiply(4, 5)', ctx).value).toBe(20));
33
+ it('divide', () => expect(ev.evaluate('divide(10, 2)', ctx).value).toBe(5));
34
+ it('divide by zero', () => expect(ev.evaluate('divide(10, 0)', ctx).value).toBe(0));
35
+ it('abs', () => expect(ev.evaluate('abs(-42)', ctx).value).toBe(42));
36
+ it('round', () => expect(ev.evaluate('round(3.456, 1)', ctx).value).toBe(3.5));
37
+ it('min', () => expect(ev.evaluate('min(5, 2, 8)', ctx).value).toBe(2));
38
+ it('max', () => expect(ev.evaluate('max(5, 2, 8)', ctx).value).toBe(8));
39
+
40
+ // Comparison (6)
41
+ it('eq', () => expect(ev.evaluate('eq(5, 5)', ctx).value).toBe(true));
42
+ it('neq', () => expect(ev.evaluate('neq(5, 3)', ctx).value).toBe(true));
43
+ it('gt', () => expect(ev.evaluate('gt(5, 3)', ctx).value).toBe(true));
44
+ it('gte', () => expect(ev.evaluate('gte(5, 5)', ctx).value).toBe(true));
45
+ it('lt', () => expect(ev.evaluate('lt(3, 5)', ctx).value).toBe(true));
46
+ it('lte', () => expect(ev.evaluate('lte(5, 5)', ctx).value).toBe(true));
47
+
48
+ // Logic (5)
49
+ it('if', () => expect(ev.evaluate("if(true, 'yes', 'no')", ctx).value).toBe('yes'));
50
+ it('and', () => expect(ev.evaluate('and(true, true, true)', ctx).value).toBe(true));
51
+ it('or', () => expect(ev.evaluate('or(false, true)', ctx).value).toBe(true));
52
+ it('not', () => expect(ev.evaluate('not(false)', ctx).value).toBe(true));
53
+ it('coalesce', () => expect(ev.evaluate("coalesce(null, undefined, 'found')", ctx).value).toBe('found'));
54
+
55
+ // String (6)
56
+ it('concat', () => expect(ev.evaluate("concat('a', 'b', 'c')", ctx).value).toBe('abc'));
57
+ it('upper', () => expect(ev.evaluate("upper('hello')", ctx).value).toBe('HELLO'));
58
+ it('lower', () => expect(ev.evaluate("lower('HELLO')", ctx).value).toBe('hello'));
59
+ it('trim', () => expect(ev.evaluate("trim(' hi ')", ctx).value).toBe('hi'));
60
+ it('format', () => expect(ev.evaluate("format('Hello {0}!', 'World')", ctx).value).toBe('Hello World!'));
61
+ it('length (string)', () => expect(ev.evaluate("length('hello')", ctx).value).toBe(5));
62
+ it('length (array)', () => expect(ev.evaluate('length(items)', ctx).value).toBe(3));
63
+
64
+ // Path (3)
65
+ it('get', () => expect(ev.evaluate("get(obj, 'a')", ctx).value).toBe(1));
66
+ it('includes (string)', () => expect(ev.evaluate("includes(name, 'lic')", ctx).value).toBe(true));
67
+ it('includes (array)', () => expect(ev.evaluate('includes(items, 2)', ctx).value).toBe(true));
68
+ it('is_defined (defined)', () => expect(ev.evaluate('is_defined(name)', ctx).value).toBe(true));
69
+ it('is_defined (null)', () => expect(ev.evaluate('is_defined(null)', ctx).value).toBe(false));
70
+
71
+ // Type (3)
72
+ it('is_empty (empty string)', () => expect(ev.evaluate("is_empty('')", ctx).value).toBe(true));
73
+ it('is_empty (non-empty)', () => expect(ev.evaluate("is_empty('x')", ctx).value).toBe(false));
74
+ it('is_null (null)', () => expect(ev.evaluate('is_null(null)', ctx).value).toBe(true));
75
+ it('is_null (value)', () => expect(ev.evaluate('is_null(name)', ctx).value).toBe(false));
76
+ it('to_string (number)', () => expect(ev.evaluate('to_string(42)', ctx).value).toBe('42'));
77
+ it('to_string (null)', () => expect(ev.evaluate('to_string(null)', ctx).value).toBe(''));
78
+ });