@danielsimonjr/mathts-expression 0.10.3 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -2
- package/dist/compiler/compile.d.ts.map +1 -1
- package/dist/evaluator/evaluate.d.ts.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +819 -256
- package/dist/limits.d.ts +18 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/node/ArrayNode.d.ts.map +1 -1
- package/dist/node/AssignmentNode.d.ts.map +1 -1
- package/dist/node/ConditionalNode.d.ts +124 -124
- package/dist/node/ConditionalNode.d.ts.map +1 -1
- package/dist/node/FunctionNode.d.ts.map +1 -1
- package/dist/node/IndexNode.d.ts.map +1 -1
- package/dist/node/Node.d.ts +15 -0
- package/dist/node/Node.d.ts.map +1 -1
- package/dist/node/ObjectNode.d.ts.map +1 -1
- package/dist/node/OperatorNode.d.ts +2 -2
- package/dist/node/OperatorNode.d.ts.map +1 -1
- package/dist/node/RangeNode.d.ts +70 -70
- package/dist/node/RangeNode.d.ts.map +1 -1
- package/dist/node/RelationalNode.d.ts +120 -120
- package/dist/node/RelationalNode.d.ts.map +1 -1
- package/dist/node/utils/stringSubset.d.ts +9 -2
- package/dist/node/utils/stringSubset.d.ts.map +1 -1
- package/dist/parse.d.ts.map +1 -1
- package/dist/scalar-builder.d.ts +4 -4
- package/dist/scalar-enumerate.d.ts +48 -0
- package/dist/scalar-enumerate.d.ts.map +1 -0
- package/dist/scalar-structure.d.ts +167 -0
- package/dist/scalar-structure.d.ts.map +1 -0
- package/dist/transform/and.transform.d.ts.map +1 -1
- package/dist/transform/bitAnd.transform.d.ts.map +1 -1
- package/dist/transform/bitOr.transform.d.ts.map +1 -1
- package/dist/transform/cumsum.transform.d.ts.map +1 -1
- package/dist/transform/filter.transform.d.ts +4 -4
- package/dist/transform/filter.transform.d.ts.map +1 -1
- package/dist/transform/forEach.transform.d.ts.map +1 -1
- package/dist/transform/mapSlices.transform.d.ts +1 -1
- package/dist/transform/mapSlices.transform.d.ts.map +1 -1
- package/dist/transform/or.transform.d.ts.map +1 -1
- package/dist/transform/utils/dimToZeroBase.d.ts +4 -1
- package/dist/transform/utils/dimToZeroBase.d.ts.map +1 -1
- package/dist/transform/utils/prepareTransformArgs.d.ts +23 -0
- package/dist/transform/utils/prepareTransformArgs.d.ts.map +1 -0
- package/dist/transform/utils/shortCircuitBinary.d.ts +21 -0
- package/dist/transform/utils/shortCircuitBinary.d.ts.map +1 -0
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# @danielsimonjr/mathts-expression
|
|
2
2
|
|
|
3
|
-
Expression parser & evaluator for [MathTS](https://github.com/danielsimonjr/mathts).
|
|
3
|
+
Expression parser & evaluator for [MathTS](https://github.com/danielsimonjr/mathts). The package root also re-exports the `MathNode` and `StringOptions` types used by `scalarToNode` / `scalarToTex` in `@danielsimonjr/mathts-functions`.
|
|
4
4
|
|
|
5
5
|
The expression engine for MathTS: a parser (string → AST), an AST node set, a compiler, and an evaluator. Includes a sandbox (`getSafeProperty` / `getSafeMethod`) for safe property access.
|
|
6
6
|
|
|
7
|
+
**Limits on untrusted strings:** max length **1,000,000** characters, max parenthesis nesting **125** (and **500** nested unary, power, assignment or conditional rules), max compile depth **512**, which `evaluate` also applies before validation (see `expression/tests/security/limits.test.ts` and `docs/api/expression.md`).
|
|
8
|
+
|
|
7
9
|
## Install
|
|
8
10
|
|
|
9
11
|
```sh
|
|
@@ -16,6 +18,20 @@ npm install @danielsimonjr/mathts-expression
|
|
|
16
18
|
- 16 AST node constructors (`createConstantNode`, `createOperatorNode`, …).
|
|
17
19
|
- `compile` / `createEvaluate` / `compileExpression` — evaluate expressions.
|
|
18
20
|
- `createScalarBuilder` — build a scalar node tree (`number`, `symbol`, `op`, `call`, `from`). `ln` lowers to natural `log` and `log` lowers to `log10`. A formula string is rejected. Evaluate with `evaluateScalar` from `@danielsimonjr/mathts-functions`.
|
|
21
|
+
- `scalarCanonical` / `scalarCanonicalKey` / `scalarSize` / `scalarDepth` / `scalarComplexity` / `scalarSymbols` — structural toolkit for an existing `ScalarNode`. The canonical key flattens `+` and `*`, rewrites `-` and `/`, and does not fold `2^3` to `8`.
|
|
22
|
+
- `enumerateScalars` / `scalarGrammarAccepts` — deterministic size-ordered enumeration of scalar trees from a grammar, with deduplication by `scalarCanonicalKey`. It is a generator that returns an `EnumerationStop` reason (`exhausted-space`, `candidate-limit`, `time-limit`, `cancelled`). `budget.maxCandidates`, `budget.maxWallClockMs`, and an `AbortSignal` end it; the wall clock and the signal are checked every 128 candidates considered, so a grammar that yields few trees still stops promptly.
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import { createScalarBuilder, scalarEquals } from '@danielsimonjr/mathts-expression';
|
|
26
|
+
|
|
27
|
+
const b = createScalarBuilder();
|
|
28
|
+
const aa = b.op('*', [b.symbol('a'), b.symbol('a')]);
|
|
29
|
+
const aSquared = b.op('^', [b.symbol('a'), b.number(2)]);
|
|
30
|
+
console.log(scalarEquals(aa, aSquared)); // true
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- `getStringSubset` / `setStringSubset` — string indexing used by accessor/assign
|
|
34
|
+
and by functions `subset` (the barrel is the only public entry).
|
|
19
35
|
- AST serializers on every node: `toString()`, `toTex()` (LaTeX), `toHTML()`, and `toMathML()` (MathML).
|
|
20
36
|
- Focused re-exports are also published: `@danielsimonjr/mathts-{parser,ast,evaluator}`.
|
|
21
37
|
|
|
@@ -31,7 +47,7 @@ import { mathMLDocument, mathMLError } from '@danielsimonjr/mathts-expression';
|
|
|
31
47
|
|
|
32
48
|
const node = parse('c = 1 / sqrt(eps0 * mu0)'); // parse from the functions package
|
|
33
49
|
node.toString(); // 'c = 1 / sqrt(eps0 * mu0)'
|
|
34
|
-
node.toTex(); // 'c=\\frac{1}{\\sqrt{ eps0\\cdot mu0}}'
|
|
50
|
+
node.toTex(); // ' c=\\frac{1}{\\sqrt{ eps0\\cdot mu0}}'
|
|
35
51
|
node.toMathML(); // '<mrow><mi>c</mi><mo>=</mo><mfrac>…</mfrac></mrow>'
|
|
36
52
|
mathMLDocument(node); // '<math xmlns="…" display="block">…</math>' (renderable)
|
|
37
53
|
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,GAAG,OAAO,CAAC;CAC5D;AAsCD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAiB9F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/evaluator/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuHD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,EACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;WAW1B,MAAM,UACJ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,YAC7B,eAAe,GACxB,OAAO;YAUD,MAAM,EAAE,UACP,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,YAC7B,eAAe,GACxB,OAAO,EAAE;EA0Bb;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,EACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,kBAAkB,CAMpB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
8
|
export * from './types.js';
|
|
9
|
+
export type { MathNode, StringOptions } from './node/Node.js';
|
|
9
10
|
export * from './keywords.js';
|
|
10
11
|
export * from './operators.js';
|
|
11
12
|
export * from './parse.js';
|
|
@@ -32,7 +33,13 @@ export { createParenthesisNode } from './node/ParenthesisNode.js';
|
|
|
32
33
|
export { createRangeNode } from './node/RangeNode.js';
|
|
33
34
|
export { createRelationalNode } from './node/RelationalNode.js';
|
|
34
35
|
export { createSymbolNode } from './node/SymbolNode.js';
|
|
36
|
+
export { getStringSubset, setStringSubset } from './node/utils/stringSubset.js';
|
|
37
|
+
export type { IndexLike } from './node/utils/stringSubset.js';
|
|
35
38
|
export { createScalarBuilder, SCALAR_FUNCTIONS, SCALAR_FUNCTION_LOWERING, ScalarBuildError, } from './scalar-builder.js';
|
|
36
39
|
export type { LoweredScalarFn, ScalarBuilder, ScalarFunctionName, ScalarNode, ScalarOperator, } from './scalar-builder.js';
|
|
40
|
+
export { forEachScalar, mapScalar, scalarSize, scalarDepth, scalarComplexity, scalarSymbols, scalarCanonical, scalarCanonicalKey, scalarEquals, } from './scalar-structure.js';
|
|
41
|
+
export type { ScalarComplexityWeights } from './scalar-structure.js';
|
|
42
|
+
export { enumerateScalars, scalarGrammarAccepts } from './scalar-enumerate.js';
|
|
43
|
+
export type { EnumerationBudget, EnumerationStop, ScalarGrammar } from './scalar-enumerate.js';
|
|
37
44
|
export * from './transform/index.js';
|
|
38
45
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAMrC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,cAAc,GACf,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AAMrC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG9D,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAK/F,cAAc,sBAAsB,CAAC"}
|