@danielsimonjr/mathts-expression 0.8.2 → 0.10.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 +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +173 -1
- package/dist/scalar-builder.d.ts +92 -0
- package/dist/scalar-builder.d.ts.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ npm install @danielsimonjr/mathts-expression
|
|
|
15
15
|
- `createParse` / `createParserClass` / `createParser` — parse to an AST.
|
|
16
16
|
- 16 AST node constructors (`createConstantNode`, `createOperatorNode`, …).
|
|
17
17
|
- `compile` / `createEvaluate` / `compileExpression` — evaluate expressions.
|
|
18
|
+
- `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`.
|
|
18
19
|
- AST serializers on every node: `toString()`, `toTex()` (LaTeX), `toHTML()`, and `toMathML()` (MathML).
|
|
19
20
|
- Focused re-exports are also published: `@danielsimonjr/mathts-{parser,ast,evaluator}`.
|
|
20
21
|
|
package/dist/index.d.ts
CHANGED
|
@@ -32,5 +32,7 @@ export { createParenthesisNode } from './node/ParenthesisNode.js';
|
|
|
32
32
|
export { createRangeNode } from './node/RangeNode.js';
|
|
33
33
|
export { createRelationalNode } from './node/RelationalNode.js';
|
|
34
34
|
export { createSymbolNode } from './node/SymbolNode.js';
|
|
35
|
+
export { createScalarBuilder, SCALAR_FUNCTIONS, SCALAR_FUNCTION_LOWERING, ScalarBuildError, } from './scalar-builder.js';
|
|
36
|
+
export type { LoweredScalarFn, ScalarBuilder, ScalarFunctionName, ScalarNode, ScalarOperator, } from './scalar-builder.js';
|
|
35
37
|
export * from './transform/index.js';
|
|
36
38
|
//# 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;
|
|
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;AAK7B,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,11 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
-
|
|
8
|
+
try {
|
|
9
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
+
} catch (e) {
|
|
11
|
+
throw mod = 0, e;
|
|
12
|
+
}
|
|
9
13
|
};
|
|
10
14
|
var __copyProps = (to, from, except, desc) => {
|
|
11
15
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
@@ -7341,6 +7345,15 @@ function compileSymbolNode(node, math, argNames) {
|
|
|
7341
7345
|
return math[name47];
|
|
7342
7346
|
};
|
|
7343
7347
|
}
|
|
7348
|
+
const unitCtor = math.Unit;
|
|
7349
|
+
if (typeof unitCtor === "function" && typeof unitCtor.isValuelessUnit === "function" && unitCtor.isValuelessUnit(name47)) {
|
|
7350
|
+
return function evalUnitSymbol(scope) {
|
|
7351
|
+
if (scope.has(name47)) {
|
|
7352
|
+
return scope.get(name47);
|
|
7353
|
+
}
|
|
7354
|
+
return new unitCtor(null, name47);
|
|
7355
|
+
};
|
|
7356
|
+
}
|
|
7344
7357
|
return function evalSymbolNode(scope) {
|
|
7345
7358
|
if (scope.has(name47)) {
|
|
7346
7359
|
return scope.get(name47);
|
|
@@ -12396,6 +12409,161 @@ var createSymbolNode = /* @__PURE__ */ factory(
|
|
|
12396
12409
|
{ isClass: true, isNode: true }
|
|
12397
12410
|
);
|
|
12398
12411
|
|
|
12412
|
+
// src/scalar-builder.ts
|
|
12413
|
+
var SCALAR_FUNCTION_LOWERING = {
|
|
12414
|
+
exp: "exp",
|
|
12415
|
+
ln: "log",
|
|
12416
|
+
log: "log10",
|
|
12417
|
+
log2: "log2",
|
|
12418
|
+
log10: "log10",
|
|
12419
|
+
sin: "sin",
|
|
12420
|
+
cos: "cos",
|
|
12421
|
+
tan: "tan",
|
|
12422
|
+
sinh: "sinh",
|
|
12423
|
+
cosh: "cosh",
|
|
12424
|
+
tanh: "tanh",
|
|
12425
|
+
abs: "abs"
|
|
12426
|
+
};
|
|
12427
|
+
var SCALAR_FUNCTIONS = [
|
|
12428
|
+
"exp",
|
|
12429
|
+
"ln",
|
|
12430
|
+
"log",
|
|
12431
|
+
"log2",
|
|
12432
|
+
"log10",
|
|
12433
|
+
"sin",
|
|
12434
|
+
"cos",
|
|
12435
|
+
"tan",
|
|
12436
|
+
"sinh",
|
|
12437
|
+
"cosh",
|
|
12438
|
+
"tanh",
|
|
12439
|
+
"abs"
|
|
12440
|
+
];
|
|
12441
|
+
var LOWERED_FUNCTIONS = new Set(Object.values(SCALAR_FUNCTION_LOWERING));
|
|
12442
|
+
var ScalarBuildError = class extends Error {
|
|
12443
|
+
constructor(message) {
|
|
12444
|
+
super(message);
|
|
12445
|
+
this.name = "ScalarBuildError";
|
|
12446
|
+
}
|
|
12447
|
+
};
|
|
12448
|
+
var OPERATORS = /* @__PURE__ */ new Set(["+", "-", "*", "/", "^"]);
|
|
12449
|
+
function isOperator(op) {
|
|
12450
|
+
return OPERATORS.has(op);
|
|
12451
|
+
}
|
|
12452
|
+
function isScalarFunctionName(fn) {
|
|
12453
|
+
return Object.prototype.hasOwnProperty.call(SCALAR_FUNCTION_LOWERING, fn);
|
|
12454
|
+
}
|
|
12455
|
+
function isLoweredScalarFn(fn) {
|
|
12456
|
+
return LOWERED_FUNCTIONS.has(fn);
|
|
12457
|
+
}
|
|
12458
|
+
function isCanonicalNode(value) {
|
|
12459
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
12460
|
+
const kind = value.kind;
|
|
12461
|
+
return kind === "number" || kind === "symbol" || kind === "op" || kind === "call";
|
|
12462
|
+
}
|
|
12463
|
+
function readRecord(node) {
|
|
12464
|
+
if (typeof node === "string") {
|
|
12465
|
+
throw new ScalarBuildError(
|
|
12466
|
+
"scalar builder reads a typed node. A formula string is not accepted."
|
|
12467
|
+
);
|
|
12468
|
+
}
|
|
12469
|
+
if (typeof node !== "object" || node === null || Array.isArray(node)) {
|
|
12470
|
+
throw new ScalarBuildError("scalar builder reads a typed node");
|
|
12471
|
+
}
|
|
12472
|
+
return node;
|
|
12473
|
+
}
|
|
12474
|
+
function createScalarBuilder() {
|
|
12475
|
+
function number(value) {
|
|
12476
|
+
if (typeof value !== "number") {
|
|
12477
|
+
throw new ScalarBuildError("scalar number node requires a number value");
|
|
12478
|
+
}
|
|
12479
|
+
return { kind: "number", value };
|
|
12480
|
+
}
|
|
12481
|
+
function symbol(name47) {
|
|
12482
|
+
if (typeof name47 !== "string") {
|
|
12483
|
+
throw new ScalarBuildError("scalar symbol node requires a string name");
|
|
12484
|
+
}
|
|
12485
|
+
return { kind: "symbol", name: name47 };
|
|
12486
|
+
}
|
|
12487
|
+
function call(fn, arg) {
|
|
12488
|
+
if (!isScalarFunctionName(fn)) {
|
|
12489
|
+
throw new ScalarBuildError(`unknown scalar function '${String(fn)}'`);
|
|
12490
|
+
}
|
|
12491
|
+
if (!isCanonicalNode(arg)) {
|
|
12492
|
+
throw new ScalarBuildError("scalar call argument must be a scalar node");
|
|
12493
|
+
}
|
|
12494
|
+
return { kind: "call", fn: SCALAR_FUNCTION_LOWERING[fn], arg };
|
|
12495
|
+
}
|
|
12496
|
+
function op(operator, args) {
|
|
12497
|
+
if (!isOperator(operator)) {
|
|
12498
|
+
throw new ScalarBuildError(`unknown scalar operator '${String(operator)}'`);
|
|
12499
|
+
}
|
|
12500
|
+
if (!Array.isArray(args)) {
|
|
12501
|
+
throw new ScalarBuildError("scalar operator args must be an array of scalar nodes");
|
|
12502
|
+
}
|
|
12503
|
+
const copied = [];
|
|
12504
|
+
for (const arg of args) {
|
|
12505
|
+
if (!isCanonicalNode(arg)) {
|
|
12506
|
+
throw new ScalarBuildError("scalar operator argument must be a scalar node");
|
|
12507
|
+
}
|
|
12508
|
+
copied.push(arg);
|
|
12509
|
+
}
|
|
12510
|
+
if (operator === "^" && copied.length !== 2) {
|
|
12511
|
+
throw new ScalarBuildError(`'^' needs exactly 2 args, got ${copied.length}`);
|
|
12512
|
+
}
|
|
12513
|
+
return { kind: "op", op: operator, args: copied };
|
|
12514
|
+
}
|
|
12515
|
+
function from(node) {
|
|
12516
|
+
const record = readRecord(node);
|
|
12517
|
+
const kind = record.kind;
|
|
12518
|
+
if (typeof kind !== "string") {
|
|
12519
|
+
throw new ScalarBuildError("scalar node is missing a string kind");
|
|
12520
|
+
}
|
|
12521
|
+
switch (kind) {
|
|
12522
|
+
case "number":
|
|
12523
|
+
return number(record.value);
|
|
12524
|
+
case "symbol":
|
|
12525
|
+
return symbol(record.name);
|
|
12526
|
+
case "op": {
|
|
12527
|
+
const operator = record.op;
|
|
12528
|
+
if (typeof operator !== "string" || !isOperator(operator)) {
|
|
12529
|
+
throw new ScalarBuildError(`unknown scalar operator '${String(operator)}'`);
|
|
12530
|
+
}
|
|
12531
|
+
const args = record.args;
|
|
12532
|
+
if (!Array.isArray(args)) {
|
|
12533
|
+
throw new ScalarBuildError("scalar operator node is missing args");
|
|
12534
|
+
}
|
|
12535
|
+
return op(
|
|
12536
|
+
operator,
|
|
12537
|
+
args.map((arg) => from(arg))
|
|
12538
|
+
);
|
|
12539
|
+
}
|
|
12540
|
+
case "call": {
|
|
12541
|
+
const fn = record.fn;
|
|
12542
|
+
if (typeof fn !== "string" || !isLoweredScalarFn(fn)) {
|
|
12543
|
+
throw new ScalarBuildError(
|
|
12544
|
+
`scalar call '${String(fn)}' must already use a lowered MathTS name`
|
|
12545
|
+
);
|
|
12546
|
+
}
|
|
12547
|
+
return { kind: "call", fn, arg: from(record.arg) };
|
|
12548
|
+
}
|
|
12549
|
+
case "transcendental": {
|
|
12550
|
+
const fn = record.fn;
|
|
12551
|
+
if (typeof fn !== "string" || !isScalarFunctionName(fn)) {
|
|
12552
|
+
throw new ScalarBuildError(`unknown scalar function '${String(fn)}'`);
|
|
12553
|
+
}
|
|
12554
|
+
return call(fn, from(record.arg));
|
|
12555
|
+
}
|
|
12556
|
+
case "abs":
|
|
12557
|
+
return call("abs", from(record.arg));
|
|
12558
|
+
default:
|
|
12559
|
+
throw new ScalarBuildError(
|
|
12560
|
+
`scalar builder: node kind '${kind}' is out of scope (symbol, op, transcendental, abs)`
|
|
12561
|
+
);
|
|
12562
|
+
}
|
|
12563
|
+
}
|
|
12564
|
+
return { number, symbol, op, call, from };
|
|
12565
|
+
}
|
|
12566
|
+
|
|
12399
12567
|
// src/transform/and.transform.ts
|
|
12400
12568
|
var name21 = "and";
|
|
12401
12569
|
var dependencies21 = ["and"];
|
|
@@ -13171,6 +13339,9 @@ var createVarianceTransform = /* @__PURE__ */ factory(
|
|
|
13171
13339
|
{ isTransformFunction: true }
|
|
13172
13340
|
);
|
|
13173
13341
|
export {
|
|
13342
|
+
SCALAR_FUNCTIONS,
|
|
13343
|
+
SCALAR_FUNCTION_LOWERING,
|
|
13344
|
+
ScalarBuildError,
|
|
13174
13345
|
compile,
|
|
13175
13346
|
compileExpression,
|
|
13176
13347
|
createAccessorNode,
|
|
@@ -13214,6 +13385,7 @@ export {
|
|
|
13214
13385
|
createRangeTransform,
|
|
13215
13386
|
createRelationalNode,
|
|
13216
13387
|
createRowTransform,
|
|
13388
|
+
createScalarBuilder,
|
|
13217
13389
|
createStdTransform,
|
|
13218
13390
|
createSubsetTransform,
|
|
13219
13391
|
createSumTransform,
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public scalar-expression builder.
|
|
3
|
+
*
|
|
4
|
+
* UPT lowers an `ExprNode` numeric tree onto this API instead of printing a
|
|
5
|
+
* formula and parsing it. `call('ln', x)` and a `transcendental` node whose
|
|
6
|
+
* `fn` is `ln` store MathTS natural `log`. `call('log', x)` and `fn: 'log'`
|
|
7
|
+
* store `log10`. `log10` and `log2` stay themselves.
|
|
8
|
+
*
|
|
9
|
+
* The node returned by {@link ScalarBuilder.call} and {@link ScalarBuilder.from}
|
|
10
|
+
* already carries the lowered MathTS name on `fn`. Passing that node through
|
|
11
|
+
* `from` again keeps natural `log`; it does not treat it as base-10.
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
/** Operators on the scalar numeric path (`+ - * / ^`). */
|
|
16
|
+
export type ScalarOperator = '+' | '-' | '*' | '/' | '^';
|
|
17
|
+
/**
|
|
18
|
+
* Input names accepted by {@link ScalarBuilder.call} and by a
|
|
19
|
+
* `transcendental` node. `ln` and `log` are in this set; the stored node uses
|
|
20
|
+
* the lowered name from {@link SCALAR_FUNCTION_LOWERING}.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SCALAR_FUNCTION_LOWERING: {
|
|
23
|
+
readonly exp: 'exp';
|
|
24
|
+
readonly ln: 'log';
|
|
25
|
+
readonly log: 'log10';
|
|
26
|
+
readonly log2: 'log2';
|
|
27
|
+
readonly log10: 'log10';
|
|
28
|
+
readonly sin: 'sin';
|
|
29
|
+
readonly cos: 'cos';
|
|
30
|
+
readonly tan: 'tan';
|
|
31
|
+
readonly sinh: 'sinh';
|
|
32
|
+
readonly cosh: 'cosh';
|
|
33
|
+
readonly tanh: 'tanh';
|
|
34
|
+
readonly abs: 'abs';
|
|
35
|
+
};
|
|
36
|
+
/** Names a caller may pass to {@link ScalarBuilder.call}. */
|
|
37
|
+
export type ScalarFunctionName = keyof typeof SCALAR_FUNCTION_LOWERING;
|
|
38
|
+
/** MathTS function stored on a built call node. */
|
|
39
|
+
export type LoweredScalarFn = (typeof SCALAR_FUNCTION_LOWERING)[ScalarFunctionName];
|
|
40
|
+
/**
|
|
41
|
+
* Input names, in lowering-table order. Present so a consumer can see the
|
|
42
|
+
* scalar set without parsing a formula.
|
|
43
|
+
*/
|
|
44
|
+
export declare const SCALAR_FUNCTIONS: readonly ScalarFunctionName[];
|
|
45
|
+
/** A scalar node. Call `fn` is the lowered MathTS name. */
|
|
46
|
+
export type ScalarNode = {
|
|
47
|
+
readonly kind: 'number';
|
|
48
|
+
readonly value: number;
|
|
49
|
+
} | {
|
|
50
|
+
readonly kind: 'symbol';
|
|
51
|
+
readonly name: string;
|
|
52
|
+
} | {
|
|
53
|
+
readonly kind: 'op';
|
|
54
|
+
readonly op: ScalarOperator;
|
|
55
|
+
readonly args: readonly ScalarNode[];
|
|
56
|
+
} | {
|
|
57
|
+
readonly kind: 'call';
|
|
58
|
+
readonly fn: LoweredScalarFn;
|
|
59
|
+
readonly arg: ScalarNode;
|
|
60
|
+
};
|
|
61
|
+
/** Builds {@link ScalarNode} values. Each call returns a new builder. */
|
|
62
|
+
export interface ScalarBuilder {
|
|
63
|
+
/** A numeric leaf. `value` must be a number (finite or not). */
|
|
64
|
+
number(value: number): ScalarNode;
|
|
65
|
+
/** A named leaf. Resolution of the name happens at evaluation. */
|
|
66
|
+
symbol(name: string): ScalarNode;
|
|
67
|
+
/**
|
|
68
|
+
* An operator node. `^` requires exactly two arguments. `+`, `-`, `*`, and
|
|
69
|
+
* `/` may be empty or n-ary; evaluation folds them left to right.
|
|
70
|
+
*/
|
|
71
|
+
op(op: ScalarOperator, args: readonly ScalarNode[]): ScalarNode;
|
|
72
|
+
/**
|
|
73
|
+
* A unary call. `ln` is stored as `log` (natural). `log` is stored as
|
|
74
|
+
* `log10`.
|
|
75
|
+
*/
|
|
76
|
+
call(fn: ScalarFunctionName, arg: ScalarNode): ScalarNode;
|
|
77
|
+
/**
|
|
78
|
+
* Normalize a typed tree. Accepts builder nodes and the scalar arms
|
|
79
|
+
* `symbol`, `op`, `transcendental`, and `abs`. A string is rejected.
|
|
80
|
+
*/
|
|
81
|
+
from(node: unknown): ScalarNode;
|
|
82
|
+
}
|
|
83
|
+
/** A node or name the builder cannot represent. */
|
|
84
|
+
export declare class ScalarBuildError extends Error {
|
|
85
|
+
constructor(message: string);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A builder of scalar nodes. Safe to call more than once; builders share no
|
|
89
|
+
* mutable state.
|
|
90
|
+
*/
|
|
91
|
+
export declare function createScalarBuilder(): ScalarBuilder;
|
|
92
|
+
//# sourceMappingURL=scalar-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar-builder.d.ts","sourceRoot":"","sources":["../src/scalar-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,0DAA0D;AAC1D,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;aACnC,GAAG,EAAE,KAAK;aACV,EAAE,EAAE,KAAK;aACT,GAAG,EAAE,OAAO;aACZ,IAAI,EAAE,MAAM;aACZ,KAAK,EAAE,OAAO;aACd,GAAG,EAAE,KAAK;aACV,GAAG,EAAE,KAAK;aACV,GAAG,EAAE,KAAK;aACV,IAAI,EAAE,MAAM;aACZ,IAAI,EAAE,MAAM;aACZ,IAAI,EAAE,MAAM;aACZ,GAAG,EAAE,KAAK;CACF,CAAC;AAEX,6DAA6D;AAC7D,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AAEvE,mDAAmD;AACnD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAEpF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAahD,CAAC;AAIX,2DAA2D;AAC3D,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;CAAE,GAC1F;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;CAAE,CAAC;AAEtF,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,kEAAkE;IAClE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACjC;;;OAGG;IACH,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAAC;IAChE;;;OAGG;IACH,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAAC;IAC1D;;;OAGG;IACH,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;CACjC;AAED,mDAAmD;AACnD,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAkCD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgGnD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danielsimonjr/mathts-expression",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "Expression parser and evaluator for MathTS",
|
|
5
5
|
"author": "Daniel Simon Jr.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"build:prod": "tsup src/index.ts --format esm --clean --minify --treeshake && tsc -p tsconfig.dts.json"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@danielsimonjr/mathts-core": "^0.
|
|
34
|
+
"@danielsimonjr/mathts-core": "^0.16.0",
|
|
35
35
|
"typed-function": "^4.0.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|