@vuu-ui/vuu-table-extras 0.8.93 → 0.8.95
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/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +13 -6
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js +17 -15
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
- package/cjs/datasource-stats/DatasourceStats.js +12 -8
- package/cjs/datasource-stats/DatasourceStats.js.map +1 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +13 -6
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js +17 -15
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
- package/esm/datasource-stats/DatasourceStats.js +13 -9
- package/esm/datasource-stats/DatasourceStats.js.map +1 -1
- package/package.json +12 -12
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
3
4
|
var __typeError = (msg) => {
|
|
4
5
|
throw TypeError(msg);
|
|
5
6
|
};
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
6
9
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
7
10
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
8
11
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
@@ -10,6 +13,8 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
|
|
|
10
13
|
var _expressions, _op, _expressions2, _expressions3, _op2, _expressions4, _op3, _expressions5, _expression, _callStack;
|
|
11
14
|
class LiteralExpressionImpl {
|
|
12
15
|
constructor(value) {
|
|
16
|
+
__publicField(this, "type");
|
|
17
|
+
__publicField(this, "value");
|
|
13
18
|
this.value = value;
|
|
14
19
|
switch (typeof value) {
|
|
15
20
|
case "boolean":
|
|
@@ -31,7 +36,8 @@ class LiteralExpressionImpl {
|
|
|
31
36
|
}
|
|
32
37
|
class ColumnExpressionImpl {
|
|
33
38
|
constructor(columnName) {
|
|
34
|
-
this
|
|
39
|
+
__publicField(this, "type", "colExpression");
|
|
40
|
+
__publicField(this, "column");
|
|
35
41
|
this.column = columnName;
|
|
36
42
|
}
|
|
37
43
|
toJSON() {
|
|
@@ -48,7 +54,7 @@ class ArithmeticExpressionImpl {
|
|
|
48
54
|
{ type: "unknown" }
|
|
49
55
|
]);
|
|
50
56
|
__privateAdd(this, _op);
|
|
51
|
-
this
|
|
57
|
+
__publicField(this, "type", "arithmeticExpression");
|
|
52
58
|
__privateSet(this, _op, op);
|
|
53
59
|
}
|
|
54
60
|
get op() {
|
|
@@ -73,7 +79,8 @@ _op = new WeakMap();
|
|
|
73
79
|
class CallExpressionImpl {
|
|
74
80
|
constructor(functionName) {
|
|
75
81
|
__privateAdd(this, _expressions2, []);
|
|
76
|
-
this
|
|
82
|
+
__publicField(this, "functionName");
|
|
83
|
+
__publicField(this, "type", "callExpression");
|
|
77
84
|
this.functionName = functionName;
|
|
78
85
|
}
|
|
79
86
|
get expressions() {
|
|
@@ -98,7 +105,7 @@ class RelationalExpressionImpl {
|
|
|
98
105
|
{ type: "unknown" }
|
|
99
106
|
]);
|
|
100
107
|
__privateAdd(this, _op2, "unknown");
|
|
101
|
-
this
|
|
108
|
+
__publicField(this, "type", "relationalExpression");
|
|
102
109
|
}
|
|
103
110
|
get op() {
|
|
104
111
|
return __privateGet(this, _op2);
|
|
@@ -126,7 +133,7 @@ class BooleanConditionImp {
|
|
|
126
133
|
{ type: "unknown" }
|
|
127
134
|
]);
|
|
128
135
|
__privateAdd(this, _op3);
|
|
129
|
-
this
|
|
136
|
+
__publicField(this, "type", "booleanCondition");
|
|
130
137
|
__privateSet(this, _op3, booleanOperator);
|
|
131
138
|
}
|
|
132
139
|
get op() {
|
|
@@ -148,7 +155,7 @@ _op3 = new WeakMap();
|
|
|
148
155
|
class ConditionalExpressionImpl {
|
|
149
156
|
constructor(booleanOperator) {
|
|
150
157
|
__privateAdd(this, _expressions5);
|
|
151
|
-
this
|
|
158
|
+
__publicField(this, "type", "conditionalExpression");
|
|
152
159
|
__privateSet(this, _expressions5, [
|
|
153
160
|
booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl(),
|
|
154
161
|
{ type: "unknown" },
|
package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnExpressionTreeWalker.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts"],"sourcesContent":["import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression,\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression,\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression,\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression,\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression,\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression,\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression,\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression,\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } /*else if (isCallExpression(this.#expression)) {\n this.addExpression(new RelationalExpressionImpl());\n } */ else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n // TODO this breaks when the relationalexpression is an argument to a CallExpression\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n"],"names":["_expressions","_op"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColumnExpressionTreeWalker.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts"],"sourcesContent":["import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression,\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression,\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression,\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression,\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression,\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression,\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression,\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression,\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } /*else if (isCallExpression(this.#expression)) {\n this.addExpression(new RelationalExpressionImpl());\n } */ else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n // TODO this breaks when the relationalexpression is an argument to a CallExpression\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n"],"names":["_expressions","_op"],"mappings":"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"}
|
|
@@ -161,21 +161,23 @@ const useColumnExpressionSuggestionProvider = ({
|
|
|
161
161
|
columnName
|
|
162
162
|
);
|
|
163
163
|
const suggestions = await getTypeaheadSuggestions(params);
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
164
|
+
if (suggestions) {
|
|
165
|
+
latestSuggestionsRef.current = vuuCodemirror.toSuggestions(suggestions, {
|
|
166
|
+
suffix: ""
|
|
167
|
+
});
|
|
168
|
+
latestSuggestionsRef.current.forEach((suggestion) => {
|
|
169
|
+
suggestion.apply = (view, completion, from) => {
|
|
170
|
+
const annotation = new vuuCodemirror.AnnotationType();
|
|
171
|
+
const cursorPos = from + completion.label.length + 1;
|
|
172
|
+
view.dispatch({
|
|
173
|
+
changes: { from, insert: completion.label },
|
|
174
|
+
selection: { anchor: cursorPos, head: cursorPos },
|
|
175
|
+
annotations: annotation.of(completion)
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return latestSuggestionsRef.current || [];
|
|
179
181
|
}
|
|
180
182
|
break;
|
|
181
183
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions,\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor,\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns],\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix }),\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName),\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/,\n );\n const suggestions = await getTypeaheadSuggestions(params);\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number,\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n return latestSuggestionsRef.current;\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table],\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string,\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions],\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":["isNumericColumn","columnFunctionDescriptors","isTextColumn","stringOperators","numericOperators","functionDocInfo","useCallback","useRef","useTypeaheadSuggestions","getRelationalOperators","getTypeaheadParams","toSuggestions","AnnotationType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions,\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor,\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns],\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix }),\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName),\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/,\n );\n const suggestions = await getTypeaheadSuggestions(params);\n if (suggestions) {\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number,\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n }\n return latestSuggestionsRef.current || [];\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table],\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string,\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions],\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":["isNumericColumn","columnFunctionDescriptors","isTextColumn","stringOperators","numericOperators","functionDocInfo","useCallback","useRef","useTypeaheadSuggestions","getRelationalOperators","getTypeaheadParams","toSuggestions","AnnotationType"],"mappings":"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"}
|
|
@@ -34,14 +34,18 @@ const DataSourceStats = ({
|
|
|
34
34
|
const from = numberFormatter.format(range.from + 1);
|
|
35
35
|
const to = numberFormatter.format(Math.min(range.to, size));
|
|
36
36
|
const value = numberFormatter.format(size);
|
|
37
|
-
|
|
38
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-label`, children: "Rows" })
|
|
39
|
-
|
|
40
|
-
/* @__PURE__ */ jsxRuntime.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
if (size === 0) {
|
|
38
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-label`, children: "No Rows to display" }) });
|
|
39
|
+
} else {
|
|
40
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, children: [
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-label`, children: "Rows" }),
|
|
42
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-range`, children: from }),
|
|
43
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "-" }),
|
|
44
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-range`, children: to }),
|
|
45
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "of" }),
|
|
46
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-size`, children: value })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
45
49
|
};
|
|
46
50
|
|
|
47
51
|
exports.DataSourceStats = DataSourceStats;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasourceStats.js","sources":["../../src/datasource-stats/DatasourceStats.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\n\nimport dataSourceStats from \"./DatasourceStats.css\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-datasource-stats\",\n css: dataSourceStats,\n window: targetWindow,\n });\n\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n return () => {\n dataSource.removeListener(\"resize\", setSize);\n dataSource.removeListener(\"range\", setRange);\n };\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from + 1);\n const to = numberFormatter.format(Math.min(range.to, size));\n const value = numberFormatter.format(size);\n return (\n
|
|
1
|
+
{"version":3,"file":"DatasourceStats.js","sources":["../../src/datasource-stats/DatasourceStats.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\n\nimport dataSourceStats from \"./DatasourceStats.css\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-datasource-stats\",\n css: dataSourceStats,\n window: targetWindow,\n });\n\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n return () => {\n dataSource.removeListener(\"resize\", setSize);\n dataSource.removeListener(\"range\", setRange);\n };\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from + 1);\n const to = numberFormatter.format(Math.min(range.to, size));\n const value = numberFormatter.format(size);\n if (size === 0) {\n return (\n <div className={className}>\n <span className={`${classBase}-label`}>No Rows to display</span>\n </div>\n );\n } else {\n return (\n <div className={className}>\n <span className={`${classBase}-label`}>Rows</span>\n <span className={`${classBase}-range`}>{from}</span>\n <span>-</span>\n <span className={`${classBase}-range`}>{to}</span>\n <span>of</span>\n <span className={`${classBase}-size`}>{value}</span>\n </div>\n );\n }\n};\n"],"names":["useWindow","useComponentCssInjection","dataSourceStats","useState","useEffect","jsx","jsxs"],"mappings":";;;;;;;;;AAaA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAElB,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAa,EAAA,CAAA;AAEvC,MAAM,kBAAkB,CAAC;AAAA,EAC9B,SAAW,EAAA,aAAA;AAAA,EACX,UAAA;AACF,CAA4B,KAAA;AAC1B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAAC,eAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAAC,cAAA,CAAmB,WAAW,KAAK,CAAA,CAAA;AAC7D,EAAA,MAAM,CAAC,IAAM,EAAA,OAAO,CAAI,GAAAA,cAAA,CAAS,WAAW,IAAI,CAAA,CAAA;AAChD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,WAAW,IAAI,CAAA,CAAA;AACvB,IAAW,UAAA,CAAA,EAAA,CAAG,UAAU,OAAO,CAAA,CAAA;AAC/B,IAAW,UAAA,CAAA,EAAA,CAAG,SAAS,QAAQ,CAAA,CAAA;AAC/B,IAAA,OAAO,MAAM;AACX,MAAW,UAAA,CAAA,cAAA,CAAe,UAAU,OAAO,CAAA,CAAA;AAC3C,MAAW,UAAA,CAAA,cAAA,CAAe,SAAS,QAAQ,CAAA,CAAA;AAAA,KAC7C,CAAA;AAAA,GACF,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAC7C,EAAA,MAAM,IAAO,GAAA,eAAA,CAAgB,MAAO,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAClD,EAAM,MAAA,EAAA,GAAK,gBAAgB,MAAO,CAAA,IAAA,CAAK,IAAI,KAAM,CAAA,EAAA,EAAI,IAAI,CAAC,CAAA,CAAA;AAC1D,EAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACzC,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IACE,uBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EACH,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA,EAAK,WAAW,CAAG,EAAA,SAAS,CAAU,MAAA,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAkB,CAC3D,EAAA,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IACE,uBAAAC,eAAA,CAAC,SAAI,SACH,EAAA,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAU,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,qCAC1C,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA,sBAC7CA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,qCACN,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAG,EAAA,EAAA,EAAA,CAAA;AAAA,sBAC3CA,cAAA,CAAC,UAAK,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,qCACP,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,SAAU,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,KAC/C,EAAA,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
1
2
|
var __typeError = (msg) => {
|
|
2
3
|
throw TypeError(msg);
|
|
3
4
|
};
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
7
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
8
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
9
|
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
@@ -8,6 +11,8 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
|
|
|
8
11
|
var _expressions, _op, _expressions2, _expressions3, _op2, _expressions4, _op3, _expressions5, _expression, _callStack;
|
|
9
12
|
class LiteralExpressionImpl {
|
|
10
13
|
constructor(value) {
|
|
14
|
+
__publicField(this, "type");
|
|
15
|
+
__publicField(this, "value");
|
|
11
16
|
this.value = value;
|
|
12
17
|
switch (typeof value) {
|
|
13
18
|
case "boolean":
|
|
@@ -29,7 +34,8 @@ class LiteralExpressionImpl {
|
|
|
29
34
|
}
|
|
30
35
|
class ColumnExpressionImpl {
|
|
31
36
|
constructor(columnName) {
|
|
32
|
-
this
|
|
37
|
+
__publicField(this, "type", "colExpression");
|
|
38
|
+
__publicField(this, "column");
|
|
33
39
|
this.column = columnName;
|
|
34
40
|
}
|
|
35
41
|
toJSON() {
|
|
@@ -46,7 +52,7 @@ class ArithmeticExpressionImpl {
|
|
|
46
52
|
{ type: "unknown" }
|
|
47
53
|
]);
|
|
48
54
|
__privateAdd(this, _op);
|
|
49
|
-
this
|
|
55
|
+
__publicField(this, "type", "arithmeticExpression");
|
|
50
56
|
__privateSet(this, _op, op);
|
|
51
57
|
}
|
|
52
58
|
get op() {
|
|
@@ -71,7 +77,8 @@ _op = new WeakMap();
|
|
|
71
77
|
class CallExpressionImpl {
|
|
72
78
|
constructor(functionName) {
|
|
73
79
|
__privateAdd(this, _expressions2, []);
|
|
74
|
-
this
|
|
80
|
+
__publicField(this, "functionName");
|
|
81
|
+
__publicField(this, "type", "callExpression");
|
|
75
82
|
this.functionName = functionName;
|
|
76
83
|
}
|
|
77
84
|
get expressions() {
|
|
@@ -96,7 +103,7 @@ class RelationalExpressionImpl {
|
|
|
96
103
|
{ type: "unknown" }
|
|
97
104
|
]);
|
|
98
105
|
__privateAdd(this, _op2, "unknown");
|
|
99
|
-
this
|
|
106
|
+
__publicField(this, "type", "relationalExpression");
|
|
100
107
|
}
|
|
101
108
|
get op() {
|
|
102
109
|
return __privateGet(this, _op2);
|
|
@@ -124,7 +131,7 @@ class BooleanConditionImp {
|
|
|
124
131
|
{ type: "unknown" }
|
|
125
132
|
]);
|
|
126
133
|
__privateAdd(this, _op3);
|
|
127
|
-
this
|
|
134
|
+
__publicField(this, "type", "booleanCondition");
|
|
128
135
|
__privateSet(this, _op3, booleanOperator);
|
|
129
136
|
}
|
|
130
137
|
get op() {
|
|
@@ -146,7 +153,7 @@ _op3 = new WeakMap();
|
|
|
146
153
|
class ConditionalExpressionImpl {
|
|
147
154
|
constructor(booleanOperator) {
|
|
148
155
|
__privateAdd(this, _expressions5);
|
|
149
|
-
this
|
|
156
|
+
__publicField(this, "type", "conditionalExpression");
|
|
150
157
|
__privateSet(this, _expressions5, [
|
|
151
158
|
booleanOperator ? new BooleanConditionImp(booleanOperator) : new RelationalExpressionImpl(),
|
|
152
159
|
{ type: "unknown" },
|
package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnExpressionTreeWalker.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts"],"sourcesContent":["import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression,\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression,\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression,\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression,\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression,\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression,\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression,\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression,\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } /*else if (isCallExpression(this.#expression)) {\n this.addExpression(new RelationalExpressionImpl());\n } */ else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n // TODO this breaks when the relationalexpression is an argument to a CallExpression\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n"],"names":["_expressions","_op"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColumnExpressionTreeWalker.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.ts"],"sourcesContent":["import { Tree } from \"@vuu-ui/vuu-codemirror\";\nimport { RelationalExpression } from \"./generated/column-parser.terms\";\ntype expressionType =\n | \"arithmeticExpression\"\n | \"booleanCondition\"\n | \"booleanLiteralExpression\"\n | \"callExpression\"\n | \"colExpression\"\n | \"conditionalExpression\"\n | \"numericLiteralExpression\"\n | \"relationalExpression\"\n | \"stringLiteralExpression\"\n | \"unknown\";\n\ntype arithmeticOp = \"*\" | \"/\" | \"+\" | \"-\" | \"unknown\";\ntype booleanOp = \"and\" | \"or\";\ntype relationalOp = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"unknown\";\n\nexport interface Expression {\n type: expressionType;\n expressions?: Expression[];\n toJSON?: () => unknown;\n value?: string | number | boolean;\n}\n\ninterface UnknownExpression extends Expression {\n type: \"unknown\";\n}\n\ninterface BooleanLiteralExpression {\n type: \"booleanLiteralExpression\";\n value: boolean;\n}\n\ninterface NumericLiteralExpression {\n type: \"numericLiteralExpression\";\n value: number;\n}\ninterface StringLiteralExpression {\n type: \"stringLiteralExpression\";\n value: string;\n}\n\ninterface ArithmeticExpression extends Expression {\n expressions: [Expression, Expression];\n op: arithmeticOp;\n type: \"arithmeticExpression\";\n}\n\ninterface BooleanCondition extends Expression {\n expressions: Expression[];\n op: booleanOp;\n type: \"booleanCondition\";\n}\ninterface RelationalExpression extends Expression {\n expressions: Expression[];\n op: relationalOp;\n type: \"relationalExpression\";\n}\n\ninterface ColExpression extends Expression {\n column?: string;\n type: \"colExpression\";\n}\n\ninterface CallExpression extends Expression {\n arguments: Expression[];\n functionName?: string;\n type: \"callExpression\";\n}\n\ntype ConditionExpression = RelationalExpression | BooleanCondition;\n\ninterface ConditionalExpression extends Expression {\n type: \"conditionalExpression\";\n condition: ConditionExpression;\n truthyExpression: Expression;\n falsyExpression: Expression;\n}\n\nexport type ColumnDefinitionExpression =\n | ArithmeticExpression\n | BooleanLiteralExpression\n | CallExpression\n | ColExpression\n | ConditionalExpression\n | NumericLiteralExpression\n | StringLiteralExpression;\n\nclass LiteralExpressionImpl implements Expression {\n type:\n | \"booleanLiteralExpression\"\n | \"numericLiteralExpression\"\n | \"stringLiteralExpression\";\n value: boolean | number | string;\n constructor(value: boolean | number | string) {\n this.value = value;\n switch (typeof value) {\n case \"boolean\":\n this.type = \"booleanLiteralExpression\";\n break;\n case \"number\":\n this.type = \"numericLiteralExpression\";\n break;\n default:\n this.type = \"stringLiteralExpression\";\n }\n }\n toJSON() {\n return {\n type: this.type,\n value: this.value,\n } as\n | StringLiteralExpression\n | BooleanLiteralExpression\n | NumericLiteralExpression;\n }\n}\nclass ColumnExpressionImpl implements ColExpression {\n type = \"colExpression\" as const;\n column: string;\n constructor(columnName: string) {\n this.column = columnName;\n }\n toJSON() {\n return {\n type: this.type,\n column: this.column,\n } as ColExpression;\n }\n}\nclass ArithmeticExpressionImpl implements ArithmeticExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: arithmeticOp | \"unknown\";\n type = \"arithmeticExpression\" as const;\n constructor(op: arithmeticOp | \"unknown\" = \"unknown\") {\n this.#op = op;\n }\n get op() {\n return this.#op;\n }\n set op(op: arithmeticOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n };\n }\n}\n\nclass CallExpressionImpl implements CallExpression {\n #expressions: Expression[] = [];\n functionName: string;\n type = \"callExpression\" as const;\n constructor(functionName: string) {\n this.functionName = functionName;\n }\n\n get expressions() {\n return this.#expressions;\n }\n get arguments() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n functionName: this.functionName,\n arguments: this.#expressions.map((e) => e.toJSON?.()),\n } as CallExpression;\n }\n}\n\nclass RelationalExpressionImpl implements RelationalExpression {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: relationalOp = \"unknown\";\n type = \"relationalExpression\" as const;\n\n get op() {\n return this.#op;\n }\n set op(op: relationalOp) {\n this.#op = op;\n }\n get expressions() {\n return this.#expressions;\n }\n\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions,\n } as RelationalExpression;\n }\n}\n\nclass BooleanConditionImp implements BooleanCondition {\n #expressions: [Expression, Expression] = [\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n #op: \"and\" | \"or\";\n type = \"booleanCondition\" as const;\n constructor(booleanOperator: \"and\" | \"or\") {\n this.#op = booleanOperator;\n }\n get op() {\n return this.#op;\n }\n get expressions() {\n return this.#expressions;\n }\n toJSON() {\n return {\n type: this.type,\n op: this.#op,\n expressions: this.#expressions.map((e) => e.toJSON?.()),\n };\n }\n}\n\nclass ConditionalExpressionImpl implements ConditionalExpression {\n #expressions: [ConditionExpression, Expression, Expression];\n type = \"conditionalExpression\" as const;\n\n constructor(booleanOperator?: \"and\" | \"or\") {\n this.#expressions = [\n booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl(),\n { type: \"unknown\" },\n { type: \"unknown\" },\n ];\n }\n\n get expressions() {\n return this.#expressions;\n }\n\n get condition(): ConditionExpression {\n return this.#expressions[0];\n }\n get truthyExpression(): Expression {\n return this.#expressions[1];\n }\n set truthyExpression(expression: Expression) {\n this.#expressions[1] = expression;\n }\n get falsyExpression(): Expression {\n return this.#expressions[2];\n }\n set falsyExpression(expression: Expression) {\n this.#expressions[2] = expression;\n }\n\n toJSON() {\n return {\n type: this.type,\n condition: this.condition.toJSON?.(),\n truthyExpression: this.truthyExpression,\n falsyExpression: this.falsyExpression?.toJSON?.() ?? this.falsyExpression,\n };\n }\n}\n\ntype PartialExpression =\n | ArithmeticExpression\n | RelationalExpression\n | ColExpression\n | CallExpression\n | BooleanCondition\n | Partial<ConditionalExpression>;\n\nconst isUnknown = (e: Expression): e is UnknownExpression =>\n e.type === \"unknown\";\n\nconst isArithmeticExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ArithmeticExpression =>\n expression.type === \"arithmeticExpression\";\n\nconst isCallExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is CallExpression => expression.type === \"callExpression\";\n\nconst isConditionalExpression = (\n expression: PotentiallyUnresolvedExpression,\n): expression is ConditionalExpression =>\n expression.type === \"conditionalExpression\";\n\nconst isCondition = (\n expression: Expression | PartialExpression,\n): expression is ConditionExpression =>\n expression.type === \"relationalExpression\" ||\n expression.type === \"booleanCondition\";\n\nconst booleanConditionIsIncomplete = (\n condition: ConditionExpression,\n): boolean =>\n condition.expressions.length < 2 ||\n condition.expressions.some((e) => conditionIsIncomplete(e));\n\nconst isBooleanCondition = (\n expression: Expression,\n): expression is BooleanCondition => expression.type === \"booleanCondition\";\n\nconst isRelationalExpression = (\n expression?: Expression,\n): expression is RelationalExpression =>\n expression?.type === \"relationalExpression\";\n\nconst conditionIsIncomplete = (\n condition: Expression,\n): condition is ConditionExpression =>\n (isBooleanCondition(condition) && booleanConditionIsIncomplete(condition)) ||\n (isRelationalExpression(condition) && condition.expressions.length < 2);\n\nconst firstIncompleteExpression = (\n expression: Expression,\n): Expression | undefined => {\n if (isUnknown(expression)) {\n return expression;\n } else if (isRelationalExpression(expression)) {\n const [operand1, operand2] = expression.expressions;\n if (expressionIsIncomplete(operand1)) {\n return firstIncompleteExpression(operand1);\n } else if (expression.op === \"unknown\") {\n return expression;\n } else if (expressionIsIncomplete(operand2)) {\n return firstIncompleteExpression(operand2);\n }\n } else if (isCondition(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n } else if (isConditionalExpression(expression)) {\n const { condition, truthyExpression, falsyExpression } = expression;\n if (expressionIsIncomplete(condition)) {\n return firstIncompleteExpression(condition);\n } else if (expressionIsIncomplete(truthyExpression)) {\n return firstIncompleteExpression(truthyExpression);\n } else if (expressionIsIncomplete(falsyExpression)) {\n return firstIncompleteExpression(falsyExpression);\n }\n } else if (isArithmeticExpression(expression)) {\n const { expressions = [] } = expression;\n for (const e of expressions) {\n if (expressionIsIncomplete(e)) {\n return firstIncompleteExpression(e);\n }\n }\n }\n};\nconst replaceUnknownExpression = (\n incompleteExpression: Expression,\n unknownExpression: UnknownExpression,\n expression: Expression,\n): boolean => {\n const { expressions = [] } = incompleteExpression;\n if (expressions.includes(unknownExpression)) {\n const pos = expressions.indexOf(unknownExpression);\n expressions.splice(pos, 1, expression);\n return true;\n } else {\n for (const e of expressions) {\n if (replaceUnknownExpression(e, unknownExpression, expression)) {\n return true;\n }\n }\n }\n return false;\n};\n\nconst expressionIsIncomplete = (expression: Expression): boolean => {\n if (isUnknown(expression)) {\n return true;\n } else if (isConditionalExpression(expression)) {\n return (\n expressionIsIncomplete(expression.condition) ||\n expressionIsIncomplete(expression.truthyExpression) ||\n expressionIsIncomplete(expression.falsyExpression)\n );\n } else if (\n isRelationalExpression(expression) ||\n isBooleanCondition(expression)\n ) {\n return (\n expression.op === undefined ||\n expression.expressions.some((e) => expressionIsIncomplete(e))\n );\n }\n // TODO missing cases\n return false;\n};\n\ntype ExpressionImpl =\n | ArithmeticExpressionImpl\n | CallExpressionImpl\n | ColumnExpressionImpl\n | ConditionalExpressionImpl\n | LiteralExpressionImpl;\n\ntype PotentiallyUnresolvedExpression = Expression | PartialExpression;\n\nconst addExpression = (\n expression: Expression,\n subExpression: PartialExpression | Expression,\n) => {\n const targetExpression = firstIncompleteExpression(expression);\n if (targetExpression) {\n if (targetExpression.expressions) {\n targetExpression.expressions.push(subExpression as Expression);\n } else {\n console.warn(\"don't know how to treat targetExpression\");\n }\n } else {\n console.error(\"no target expression found\");\n }\n};\n\nclass ColumnExpression {\n #expression: ExpressionImpl | undefined;\n\n #callStack: CallExpression[] = [];\n\n setCondition(booleanOperator?: \"and\" | \"or\") {\n if (this.#expression === undefined) {\n this.addExpression(new ConditionalExpressionImpl(booleanOperator));\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression.condition)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.truthyExpression)) {\n this.#expression.truthyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.truthyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n } else if (isUnknown(this.#expression.falsyExpression)) {\n this.#expression.falsyExpression = new ConditionalExpressionImpl(\n booleanOperator,\n );\n } else if (expressionIsIncomplete(this.#expression.falsyExpression)) {\n const condition = booleanOperator\n ? new BooleanConditionImp(booleanOperator)\n : new RelationalExpressionImpl();\n this.addExpression(condition);\n }\n } /*else if (isCallExpression(this.#expression)) {\n this.addExpression(new RelationalExpressionImpl());\n } */ else {\n console.error(\"setCondition called unexpectedly\");\n }\n }\n\n addExpression(expression: ExpressionImpl | Expression) {\n if (this.#callStack.length > 0) {\n const currentCallExpression = this.#callStack.at(-1);\n currentCallExpression?.arguments.push(expression as Expression);\n } else if (this.#expression === undefined) {\n this.#expression = expression as ExpressionImpl;\n } else if (isArithmeticExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n }\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n expression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, expression);\n }\n }\n }\n }\n\n setFunction(functionName: string) {\n const callExpression = new CallExpressionImpl(functionName);\n this.addExpression(callExpression);\n this.#callStack.push(callExpression);\n }\n\n setColumn(columnName: string) {\n this.addExpression(new ColumnExpressionImpl(columnName));\n }\n\n setArithmeticOp(value: string) {\n const op = value as arithmeticOp;\n const expression = this.#expression as Expression;\n if (isArithmeticExpression(expression)) {\n expression.op = op;\n }\n // else {\n // const targetExpression = firstIncompleteExpression(this.#expression);\n // if (targetExpression) {\n // targetExpression.op = op;\n // }\n // }\n }\n\n setRelationalOperator(value: string) {\n const op = value as relationalOp;\n if (this.#expression && isConditionalExpression(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (isRelationalExpression(targetExpression)) {\n targetExpression.op = op;\n } else {\n console.error(`no target expression found (op = ${value})`);\n }\n }\n }\n\n setValue(value: string | number | boolean) {\n const literalExpression = new LiteralExpressionImpl(value);\n if (this.#expression === undefined) {\n this.#expression = literalExpression;\n } else if (isArithmeticExpression(this.#expression)) {\n this.addExpression(literalExpression);\n } else if (isCallExpression(this.#expression)) {\n // TODO this might not be correct if call arguments include nested expression(s)\n this.#expression.arguments.push(literalExpression);\n } else if (isConditionalExpression(this.#expression)) {\n if (expressionIsIncomplete(this.#expression)) {\n const targetExpression = firstIncompleteExpression(this.#expression);\n if (targetExpression && isUnknown(targetExpression)) {\n replaceUnknownExpression(\n this.#expression,\n targetExpression,\n literalExpression,\n );\n } else if (targetExpression) {\n addExpression(targetExpression, literalExpression);\n }\n } else {\n console.log(\"what do we do with value, in a complete expression\");\n }\n }\n }\n\n closeBrace() {\n this.#callStack.pop();\n }\n\n get expression() {\n return this.#expression;\n }\n\n toJSON() {\n return this.#expression?.toJSON() as ColumnDefinitionExpression;\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const columnExpression = new ColumnExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"AndCondition\":\n columnExpression.setCondition(\"and\");\n break;\n\n case \"OrCondition\":\n columnExpression.setCondition(\"or\");\n break;\n\n case \"RelationalExpression\":\n // TODO this breaks when the relationalexpression is an argument to a CallExpression\n columnExpression.setCondition();\n break;\n\n case \"ArithmeticExpression\":\n columnExpression.addExpression(new ArithmeticExpressionImpl());\n break;\n\n case \"Column\":\n {\n const columnName = source.substring(from, to);\n columnExpression.setColumn(columnName);\n }\n break;\n\n case \"Function\":\n {\n const functionName = source.substring(from, to);\n columnExpression.setFunction(functionName);\n }\n break;\n\n case \"Times\":\n case \"Divide\":\n case \"Plus\":\n case \"Minus\":\n {\n const op = source.substring(from, to);\n columnExpression.setArithmeticOp(op);\n }\n break;\n\n case \"RelationalOperator\":\n {\n const op = source.substring(from, to);\n columnExpression.setRelationalOperator(op);\n }\n break;\n\n case \"False\":\n case \"True\":\n {\n const value = source.substring(from, to);\n columnExpression.setValue(value === \"true\" ? true : false);\n }\n break;\n\n case \"String\":\n columnExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n columnExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"CloseBrace\":\n columnExpression.closeBrace();\n break;\n\n default:\n }\n } while (cursor.next());\n\n return columnExpression.toJSON();\n};\n"],"names":["_expressions","_op"],"mappings":";;;;;;;;;;AAAA,IAAA,YAAA,EAAA,GAAA,EAAAA,aAAAC,EAAAA,aAAAA,EAAAA,IAAAA,EAAAD,aAAAC,EAAAA,IAAAA,EAAAD,aAAA,EAAA,WAAA,EAAA,UAAA,CAAA;AAyFA,MAAM,qBAA4C,CAAA;AAAA,EAMhD,YAAY,KAAkC,EAAA;AAL9C,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AAIA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAEE,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAA,QAAQ,OAAO,KAAO;AAAA,MACpB,KAAK,SAAA;AACH,QAAA,IAAA,CAAK,IAAO,GAAA,0BAAA,CAAA;AACZ,QAAA,MAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,IAAA,CAAK,IAAO,GAAA,0BAAA,CAAA;AACZ,QAAA,MAAA;AAAA,MACF;AACE,QAAA,IAAA,CAAK,IAAO,GAAA,yBAAA,CAAA;AAAA,KAChB;AAAA,GACF;AAAA,EACA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,OAAO,IAAK,CAAA,KAAA;AAAA,KACd,CAAA;AAAA,GAIF;AACF,CAAA;AACA,MAAM,oBAA8C,CAAA;AAAA,EAGlD,YAAY,UAAoB,EAAA;AAFhC,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,eAAA,CAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAEE,IAAA,IAAA,CAAK,MAAS,GAAA,UAAA,CAAA;AAAA,GAChB;AAAA,EACA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,QAAQ,IAAK,CAAA,MAAA;AAAA,KACf,CAAA;AAAA,GACF;AACF,CAAA;AACA,MAAM,wBAAyD,CAAA;AAAA,EAO7D,WAAA,CAAY,KAA+B,SAAW,EAAA;AANtD,IAAyC,YAAA,CAAA,IAAA,EAAA,YAAA,EAAA;AAAA,MACvC,EAAE,MAAM,SAAU,EAAA;AAAA,MAClB,EAAE,MAAM,SAAU,EAAA;AAAA,KACpB,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AACA,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,sBAAA,CAAA,CAAA;AAEL,IAAA,YAAA,CAAA,IAAA,EAAK,GAAM,EAAA,EAAA,CAAA,CAAA;AAAA,GACb;AAAA,EACA,IAAI,EAAK,GAAA;AACP,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,GAAA,CAAA,CAAA;AAAA,GACd;AAAA,EACA,IAAI,GAAG,EAAkB,EAAA;AACvB,IAAA,YAAA,CAAA,IAAA,EAAK,GAAM,EAAA,EAAA,CAAA,CAAA;AAAA,GACb;AAAA,EACA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,IAAI,YAAK,CAAA,IAAA,EAAA,GAAA,CAAA;AAAA,MACT,aAAa,YAAK,CAAA,IAAA,EAAA,YAAA,CAAA;AAAA,KACpB,CAAA;AAAA,GACF;AACF,CAAA;AA1BE,YAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAIA,GAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAwBF,MAAM,kBAA6C,CAAA;AAAA,EAIjD,YAAY,YAAsB,EAAA;AAHlC,IAAA,YAAA,CAAA,IAAA,EAAAA,eAA6B,EAAC,CAAA,CAAA;AAC9B,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA,CAAA;AACA,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,gBAAA,CAAA,CAAA;AAEL,IAAA,IAAA,CAAK,YAAe,GAAA,YAAA,CAAA;AAAA,GACtB;AAAA,EAEA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAKA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EACA,IAAI,SAAY,GAAA;AACd,IAAA,OAAO,YAAKA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EAEA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,cAAc,IAAK,CAAA,YAAA;AAAA,MACnB,SAAA,EAAW,mBAAKA,aAAa,CAAA,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,UAAU,CAAA;AAAA,KACtD,CAAA;AAAA,GACF;AACF,CAAA;AArBEA,aAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAuBF,MAAM,wBAAyD,CAAA;AAAA,EAA/D,WAAA,GAAA;AACE,IAAA,YAAA,CAAA,IAAA,EAAAA,aAAyC,EAAA;AAAA,MACvC,EAAE,MAAM,SAAU,EAAA;AAAA,MAClB,EAAE,MAAM,SAAU,EAAA;AAAA,KACpB,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAAC,IAAoB,EAAA,SAAA,CAAA,CAAA;AACpB,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,sBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAEP,IAAI,EAAK,GAAA;AACP,IAAA,OAAO,YAAKA,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EACA,IAAI,GAAG,EAAkB,EAAA;AACvB,IAAA,YAAA,CAAA,IAAA,EAAKA,IAAM,EAAA,EAAA,CAAA,CAAA;AAAA,GACb;AAAA,EACA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAKD,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EAEA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,IAAI,YAAKC,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA;AAAA,MACT,aAAa,YAAKD,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA;AAAA,KACpB,CAAA;AAAA,GACF;AACF,CAAA;AAxBEA,aAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAIAC,IAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAsBF,MAAM,mBAAgD,CAAA;AAAA,EAOpD,YAAY,eAA+B,EAAA;AAN3C,IAAA,YAAA,CAAA,IAAA,EAAAD,aAAyC,EAAA;AAAA,MACvC,EAAE,MAAM,SAAU,EAAA;AAAA,MAClB,EAAE,MAAM,SAAU,EAAA;AAAA,KACpB,CAAA,CAAA;AACA,IAAAC,YAAAA,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AACA,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,kBAAA,CAAA,CAAA;AAEL,IAAA,YAAA,CAAA,IAAA,EAAKA,IAAM,EAAA,eAAA,CAAA,CAAA;AAAA,GACb;AAAA,EACA,IAAI,EAAK,GAAA;AACP,IAAA,OAAO,YAAKA,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EACA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAKD,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EACA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,IAAI,YAAKC,CAAAA,IAAAA,EAAAA,IAAAA,CAAAA;AAAA,MACT,WAAA,EAAa,mBAAKD,aAAa,CAAA,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA,CAAA,CAAE,UAAU,CAAA;AAAA,KACxD,CAAA;AAAA,GACF;AACF,CAAA;AAtBEA,aAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAIAC,IAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAoBF,MAAM,yBAA2D,CAAA;AAAA,EAI/D,YAAY,eAAgC,EAAA;AAH5C,IAAAD,YAAAA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AACA,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,EAAA,uBAAA,CAAA,CAAA;AAGL,IAAA,YAAA,CAAA,IAAA,EAAKA,aAAe,EAAA;AAAA,MAClB,kBACI,IAAI,mBAAA,CAAoB,eAAe,CAAA,GACvC,IAAI,wBAAyB,EAAA;AAAA,MACjC,EAAE,MAAM,SAAU,EAAA;AAAA,MAClB,EAAE,MAAM,SAAU,EAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GACF;AAAA,EAEA,IAAI,WAAc,GAAA;AAChB,IAAA,OAAO,YAAKA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAAA,GACd;AAAA,EAEA,IAAI,SAAiC,GAAA;AACnC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAKA,eAAa,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,IAAI,gBAA+B,GAAA;AACjC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAKA,eAAa,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,IAAI,iBAAiB,UAAwB,EAAA;AAC3C,IAAKA,YAAAA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAa,CAAC,CAAI,GAAA,UAAA,CAAA;AAAA,GACzB;AAAA,EACA,IAAI,eAA8B,GAAA;AAChC,IAAO,OAAA,YAAA,CAAA,IAAA,EAAKA,eAAa,CAAC,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,IAAI,gBAAgB,UAAwB,EAAA;AAC1C,IAAKA,YAAAA,CAAAA,IAAAA,EAAAA,aAAAA,CAAAA,CAAa,CAAC,CAAI,GAAA,UAAA,CAAA;AAAA,GACzB;AAAA,EAEA,MAAS,GAAA;AACP,IAAO,OAAA;AAAA,MACL,MAAM,IAAK,CAAA,IAAA;AAAA,MACX,SAAA,EAAW,IAAK,CAAA,SAAA,CAAU,MAAS,IAAA;AAAA,MACnC,kBAAkB,IAAK,CAAA,gBAAA;AAAA,MACvB,eAAiB,EAAA,IAAA,CAAK,eAAiB,EAAA,MAAA,QAAc,IAAK,CAAA,eAAA;AAAA,KAC5D,CAAA;AAAA,GACF;AACF,CAAA;AAzCEA,aAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAmDF,MAAM,SAAY,GAAA,CAAC,CACjB,KAAA,CAAA,CAAE,IAAS,KAAA,SAAA,CAAA;AAEb,MAAM,sBAAyB,GAAA,CAC7B,UAEA,KAAA,UAAA,CAAW,IAAS,KAAA,sBAAA,CAAA;AAEtB,MAAM,gBAAmB,GAAA,CACvB,UACiC,KAAA,UAAA,CAAW,IAAS,KAAA,gBAAA,CAAA;AAEvD,MAAM,uBAA0B,GAAA,CAC9B,UAEA,KAAA,UAAA,CAAW,IAAS,KAAA,uBAAA,CAAA;AAEtB,MAAM,cAAc,CAClB,UAAA,KAEA,WAAW,IAAS,KAAA,sBAAA,IACpB,WAAW,IAAS,KAAA,kBAAA,CAAA;AAQtB,MAAM,kBAAqB,GAAA,CACzB,UACmC,KAAA,UAAA,CAAW,IAAS,KAAA,kBAAA,CAAA;AAEzD,MAAM,sBAAyB,GAAA,CAC7B,UAEA,KAAA,UAAA,EAAY,IAAS,KAAA,sBAAA,CAAA;AAQvB,MAAM,yBAAA,GAA4B,CAChC,UAC2B,KAAA;AAC3B,EAAI,IAAA,SAAA,CAAU,UAAU,CAAG,EAAA;AACzB,IAAO,OAAA,UAAA,CAAA;AAAA,GACT,MAAA,IAAW,sBAAuB,CAAA,UAAU,CAAG,EAAA;AAC7C,IAAA,MAAM,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI,UAAW,CAAA,WAAA,CAAA;AACxC,IAAI,IAAA,sBAAA,CAAuB,QAAQ,CAAG,EAAA;AACpC,MAAA,OAAO,0BAA0B,QAAQ,CAAA,CAAA;AAAA,KAC3C,MAAA,IAAW,UAAW,CAAA,EAAA,KAAO,SAAW,EAAA;AACtC,MAAO,OAAA,UAAA,CAAA;AAAA,KACT,MAAA,IAAW,sBAAuB,CAAA,QAAQ,CAAG,EAAA;AAC3C,MAAA,OAAO,0BAA0B,QAAQ,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF,MAAA,IAAW,WAAY,CAAA,UAAU,CAAG,EAAA;AAClC,IAAA,MAAM,EAAE,WAAA,GAAc,EAAC,EAAM,GAAA,UAAA,CAAA;AAC7B,IAAA,KAAA,MAAW,KAAK,WAAa,EAAA;AAC3B,MAAI,IAAA,sBAAA,CAAuB,CAAC,CAAG,EAAA;AAC7B,QAAA,OAAO,0BAA0B,CAAC,CAAA,CAAA;AAAA,OACpC;AAAA,KACF;AAAA,GACF,MAAA,IAAW,uBAAwB,CAAA,UAAU,CAAG,EAAA;AAC9C,IAAA,MAAM,EAAE,SAAA,EAAW,gBAAkB,EAAA,eAAA,EAAoB,GAAA,UAAA,CAAA;AACzD,IAAI,IAAA,sBAAA,CAAuB,SAAS,CAAG,EAAA;AACrC,MAAA,OAAO,0BAA0B,SAAS,CAAA,CAAA;AAAA,KAC5C,MAAA,IAAW,sBAAuB,CAAA,gBAAgB,CAAG,EAAA;AACnD,MAAA,OAAO,0BAA0B,gBAAgB,CAAA,CAAA;AAAA,KACnD,MAAA,IAAW,sBAAuB,CAAA,eAAe,CAAG,EAAA;AAClD,MAAA,OAAO,0BAA0B,eAAe,CAAA,CAAA;AAAA,KAClD;AAAA,GACF,MAAA,IAAW,sBAAuB,CAAA,UAAU,CAAG,EAAA;AAC7C,IAAA,MAAM,EAAE,WAAA,GAAc,EAAC,EAAM,GAAA,UAAA,CAAA;AAC7B,IAAA,KAAA,MAAW,KAAK,WAAa,EAAA;AAC3B,MAAI,IAAA,sBAAA,CAAuB,CAAC,CAAG,EAAA;AAC7B,QAAA,OAAO,0BAA0B,CAAC,CAAA,CAAA;AAAA,OACpC;AAAA,KACF;AAAA,GACF;AACF,CAAA,CAAA;AACA,MAAM,wBAA2B,GAAA,CAC/B,oBACA,EAAA,iBAAA,EACA,UACY,KAAA;AACZ,EAAA,MAAM,EAAE,WAAA,GAAc,EAAC,EAAM,GAAA,oBAAA,CAAA;AAC7B,EAAI,IAAA,WAAA,CAAY,QAAS,CAAA,iBAAiB,CAAG,EAAA;AAC3C,IAAM,MAAA,GAAA,GAAM,WAAY,CAAA,OAAA,CAAQ,iBAAiB,CAAA,CAAA;AACjD,IAAY,WAAA,CAAA,MAAA,CAAO,GAAK,EAAA,CAAA,EAAG,UAAU,CAAA,CAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAA,KAAA,MAAW,KAAK,WAAa,EAAA;AAC3B,MAAA,IAAI,wBAAyB,CAAA,CAAA,EAAG,iBAAmB,EAAA,UAAU,CAAG,EAAA;AAC9D,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAEA,MAAM,sBAAA,GAAyB,CAAC,UAAoC,KAAA;AAClE,EAAI,IAAA,SAAA,CAAU,UAAU,CAAG,EAAA;AACzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT,MAAA,IAAW,uBAAwB,CAAA,UAAU,CAAG,EAAA;AAC9C,IACE,OAAA,sBAAA,CAAuB,UAAW,CAAA,SAAS,CAC3C,IAAA,sBAAA,CAAuB,WAAW,gBAAgB,CAAA,IAClD,sBAAuB,CAAA,UAAA,CAAW,eAAe,CAAA,CAAA;AAAA,aAGnD,sBAAuB,CAAA,UAAU,CACjC,IAAA,kBAAA,CAAmB,UAAU,CAC7B,EAAA;AACA,IACE,OAAA,UAAA,CAAW,EAAO,KAAA,KAAA,CAAA,IAClB,UAAW,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,sBAAuB,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GAEhE;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;AAWA,MAAM,aAAA,GAAgB,CACpB,UAAA,EACA,aACG,KAAA;AACH,EAAM,MAAA,gBAAA,GAAmB,0BAA0B,UAAU,CAAA,CAAA;AAC7D,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,IAAI,iBAAiB,WAAa,EAAA;AAChC,MAAiB,gBAAA,CAAA,WAAA,CAAY,KAAK,aAA2B,CAAA,CAAA;AAAA,KACxD,MAAA;AACL,MAAA,OAAA,CAAQ,KAAK,0CAA0C,CAAA,CAAA;AAAA,KACzD;AAAA,GACK,MAAA;AACL,IAAA,OAAA,CAAQ,MAAM,4BAA4B,CAAA,CAAA;AAAA,GAC5C;AACF,CAAA,CAAA;AAEA,MAAM,gBAAiB,CAAA;AAAA,EAAvB,WAAA,GAAA;AACE,IAAA,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAEA,IAAA,YAAA,CAAA,IAAA,EAAA,UAAA,EAA+B,EAAC,CAAA,CAAA;AAAA,GAAA;AAAA,EAEhC,aAAa,eAAgC,EAAA;AAC3C,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,KAAW,CAAA,EAAA;AAClC,MAAA,IAAA,CAAK,aAAc,CAAA,IAAI,yBAA0B,CAAA,eAAe,CAAC,CAAA,CAAA;AAAA,KACxD,MAAA,IAAA,uBAAA,CAAwB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AACpD,MAAA,IAAI,sBAAuB,CAAA,YAAA,CAAA,IAAA,EAAK,WAAY,CAAA,CAAA,SAAS,CAAG,EAAA;AACtD,QAAA,MAAM,YAAY,eACd,GAAA,IAAI,oBAAoB,eAAe,CAAA,GACvC,IAAI,wBAAyB,EAAA,CAAA;AACjC,QAAA,IAAA,CAAK,cAAc,SAAS,CAAA,CAAA;AAAA,OACnB,MAAA,IAAA,SAAA,CAAU,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,gBAAgB,CAAG,EAAA;AACvD,QAAK,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,mBAAmB,IAAI,yBAAA;AAAA,UACtC,eAAA;AAAA,SACF,CAAA;AAAA,OACS,MAAA,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,gBAAgB,CAAG,EAAA;AACpE,QAAA,MAAM,YAAY,eACd,GAAA,IAAI,oBAAoB,eAAe,CAAA,GACvC,IAAI,wBAAyB,EAAA,CAAA;AACjC,QAAA,IAAA,CAAK,cAAc,SAAS,CAAA,CAAA;AAAA,OACnB,MAAA,IAAA,SAAA,CAAU,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,eAAe,CAAG,EAAA;AACtD,QAAK,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,kBAAkB,IAAI,yBAAA;AAAA,UACrC,eAAA;AAAA,SACF,CAAA;AAAA,OACS,MAAA,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,eAAe,CAAG,EAAA;AACnE,QAAA,MAAM,YAAY,eACd,GAAA,IAAI,oBAAoB,eAAe,CAAA,GACvC,IAAI,wBAAyB,EAAA,CAAA;AACjC,QAAA,IAAA,CAAK,cAAc,SAAS,CAAA,CAAA;AAAA,OAC9B;AAAA,KAGQ,MAAA;AACR,MAAA,OAAA,CAAQ,MAAM,kCAAkC,CAAA,CAAA;AAAA,KAClD;AAAA,GACF;AAAA,EAEA,cAAc,UAAyC,EAAA;AACrD,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,UAAW,CAAA,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9B,MAAA,MAAM,qBAAwB,GAAA,YAAA,CAAA,IAAA,EAAK,UAAW,CAAA,CAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AACnD,MAAuB,qBAAA,EAAA,SAAA,CAAU,KAAK,UAAwB,CAAA,CAAA;AAAA,KAChE,MAAA,IAAW,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,KAAgB,KAAW,CAAA,EAAA;AACzC,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,UAAA,CAAA,CAAA;AAAA,KACV,MAAA,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AACnD,MAAM,MAAA,gBAAA,GAAmB,yBAA0B,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AACnE,MAAI,IAAA,gBAAA,IAAoB,SAAU,CAAA,gBAAgB,CAAG,EAAA;AACnD,QAAA,wBAAA;AAAA,UACE,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA,UACL,gBAAA;AAAA,UACA,UAAA;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACS,MAAA,IAAA,uBAAA,CAAwB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AACpD,MAAI,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AAC5C,QAAM,MAAA,gBAAA,GAAmB,yBAA0B,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AACnE,QAAI,IAAA,gBAAA,IAAoB,SAAU,CAAA,gBAAgB,CAAG,EAAA;AACnD,UAAA,wBAAA;AAAA,YACE,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA,YACL,gBAAA;AAAA,YACA,UAAA;AAAA,WACF,CAAA;AAAA,mBACS,gBAAkB,EAAA;AAC3B,UAAA,aAAA,CAAc,kBAAkB,UAAU,CAAA,CAAA;AAAA,SAC5C;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAAA,EAEA,YAAY,YAAsB,EAAA;AAChC,IAAM,MAAA,cAAA,GAAiB,IAAI,kBAAA,CAAmB,YAAY,CAAA,CAAA;AAC1D,IAAA,IAAA,CAAK,cAAc,cAAc,CAAA,CAAA;AACjC,IAAK,YAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAW,KAAK,cAAc,CAAA,CAAA;AAAA,GACrC;AAAA,EAEA,UAAU,UAAoB,EAAA;AAC5B,IAAA,IAAA,CAAK,aAAc,CAAA,IAAI,oBAAqB,CAAA,UAAU,CAAC,CAAA,CAAA;AAAA,GACzD;AAAA,EAEA,gBAAgB,KAAe,EAAA;AAC7B,IAAA,MAAM,EAAK,GAAA,KAAA,CAAA;AACX,IAAA,MAAM,aAAa,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AACxB,IAAI,IAAA,sBAAA,CAAuB,UAAU,CAAG,EAAA;AACtC,MAAA,UAAA,CAAW,EAAK,GAAA,EAAA,CAAA;AAAA,KAClB;AAAA,GAOF;AAAA,EAEA,sBAAsB,KAAe,EAAA;AACnC,IAAA,MAAM,EAAK,GAAA,KAAA,CAAA;AACX,IAAA,IAAI,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,IAAe,uBAAwB,CAAA,YAAA,CAAA,IAAA,EAAK,YAAW,CAAG,EAAA;AACjE,MAAM,MAAA,gBAAA,GAAmB,yBAA0B,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AACnE,MAAI,IAAA,sBAAA,CAAuB,gBAAgB,CAAG,EAAA;AAC5C,QAAA,gBAAA,CAAiB,EAAK,GAAA,EAAA,CAAA;AAAA,OACjB,MAAA;AACL,QAAQ,OAAA,CAAA,KAAA,CAAM,CAAoC,iCAAA,EAAA,KAAK,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,OAC5D;AAAA,KACF;AAAA,GACF;AAAA,EAEA,SAAS,KAAkC,EAAA;AACzC,IAAM,MAAA,iBAAA,GAAoB,IAAI,qBAAA,CAAsB,KAAK,CAAA,CAAA;AACzD,IAAI,IAAA,YAAA,CAAA,IAAA,EAAK,iBAAgB,KAAW,CAAA,EAAA;AAClC,MAAA,YAAA,CAAA,IAAA,EAAK,WAAc,EAAA,iBAAA,CAAA,CAAA;AAAA,KACV,MAAA,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AACnD,MAAA,IAAA,CAAK,cAAc,iBAAiB,CAAA,CAAA;AAAA,KAC3B,MAAA,IAAA,gBAAA,CAAiB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AAE7C,MAAK,YAAA,CAAA,IAAA,EAAA,WAAA,CAAA,CAAY,SAAU,CAAA,IAAA,CAAK,iBAAiB,CAAA,CAAA;AAAA,KACxC,MAAA,IAAA,uBAAA,CAAwB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AACpD,MAAI,IAAA,sBAAA,CAAuB,YAAK,CAAA,IAAA,EAAA,WAAA,CAAW,CAAG,EAAA;AAC5C,QAAM,MAAA,gBAAA,GAAmB,yBAA0B,CAAA,YAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA,CAAA;AACnE,QAAI,IAAA,gBAAA,IAAoB,SAAU,CAAA,gBAAgB,CAAG,EAAA;AACnD,UAAA,wBAAA;AAAA,YACE,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA;AAAA,YACL,gBAAA;AAAA,YACA,iBAAA;AAAA,WACF,CAAA;AAAA,mBACS,gBAAkB,EAAA;AAC3B,UAAA,aAAA,CAAc,kBAAkB,iBAAiB,CAAA,CAAA;AAAA,SACnD;AAAA,OACK,MAAA;AACL,QAAA,OAAA,CAAQ,IAAI,oDAAoD,CAAA,CAAA;AAAA,OAClE;AAAA,KACF;AAAA,GACF;AAAA,EAEA,UAAa,GAAA;AACX,IAAA,YAAA,CAAA,IAAA,EAAK,YAAW,GAAI,EAAA,CAAA;AAAA,GACtB;AAAA,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,WAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,MAAS,GAAA;AACP,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,cAAa,MAAO,EAAA,CAAA;AAAA,GAClC;AACF,CAAA;AAhJE,WAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAEA,UAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAgJW,MAAA,QAAA,GAAW,CAAC,IAAA,EAAY,MAAmB,KAAA;AACtD,EAAM,MAAA,gBAAA,GAAmB,IAAI,gBAAiB,EAAA,CAAA;AAC9C,EAAM,MAAA,MAAA,GAAS,KAAK,MAAO,EAAA,CAAA;AAC3B,EAAG,GAAA;AACD,IAAA,MAAM,EAAE,IAAA,EAAM,IAAM,EAAA,EAAA,EAAO,GAAA,MAAA,CAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,cAAA;AACH,QAAA,gBAAA,CAAiB,aAAa,KAAK,CAAA,CAAA;AACnC,QAAA,MAAA;AAAA,MAEF,KAAK,aAAA;AACH,QAAA,gBAAA,CAAiB,aAAa,IAAI,CAAA,CAAA;AAClC,QAAA,MAAA;AAAA,MAEF,KAAK,sBAAA;AAEH,QAAA,gBAAA,CAAiB,YAAa,EAAA,CAAA;AAC9B,QAAA,MAAA;AAAA,MAEF,KAAK,sBAAA;AACH,QAAiB,gBAAA,CAAA,aAAA,CAAc,IAAI,wBAAA,EAA0B,CAAA,CAAA;AAC7D,QAAA,MAAA;AAAA,MAEF,KAAK,QAAA;AACH,QAAA;AACE,UAAA,MAAM,UAAa,GAAA,MAAA,CAAO,SAAU,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAC5C,UAAA,gBAAA,CAAiB,UAAU,UAAU,CAAA,CAAA;AAAA,SACvC;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,UAAA;AACH,QAAA;AACE,UAAA,MAAM,YAAe,GAAA,MAAA,CAAO,SAAU,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAC9C,UAAA,gBAAA,CAAiB,YAAY,YAAY,CAAA,CAAA;AAAA,SAC3C;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,OAAA,CAAA;AAAA,MACL,KAAK,QAAA,CAAA;AAAA,MACL,KAAK,MAAA,CAAA;AAAA,MACL,KAAK,OAAA;AACH,QAAA;AACE,UAAA,MAAM,EAAK,GAAA,MAAA,CAAO,SAAU,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AACpC,UAAA,gBAAA,CAAiB,gBAAgB,EAAE,CAAA,CAAA;AAAA,SACrC;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,oBAAA;AACH,QAAA;AACE,UAAA,MAAM,EAAK,GAAA,MAAA,CAAO,SAAU,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AACpC,UAAA,gBAAA,CAAiB,sBAAsB,EAAE,CAAA,CAAA;AAAA,SAC3C;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,OAAA,CAAA;AAAA,MACL,KAAK,MAAA;AACH,QAAA;AACE,UAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,SAAU,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AACvC,UAAA,gBAAA,CAAiB,QAAS,CAAA,KAAA,KAAU,MAAS,GAAA,IAAA,GAAO,KAAK,CAAA,CAAA;AAAA,SAC3D;AACA,QAAA,MAAA;AAAA,MAEF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiB,SAAS,MAAO,CAAA,SAAA,CAAU,OAAO,CAAG,EAAA,EAAA,GAAK,CAAC,CAAC,CAAA,CAAA;AAC5D,QAAA,MAAA;AAAA,MAEF,KAAK,QAAA;AACH,QAAA,gBAAA,CAAiB,SAAS,UAAW,CAAA,MAAA,CAAO,UAAU,IAAM,EAAA,EAAE,CAAC,CAAC,CAAA,CAAA;AAChE,QAAA,MAAA;AAAA,MAEF,KAAK,YAAA;AACH,QAAA,gBAAA,CAAiB,UAAW,EAAA,CAAA;AAC5B,QAAA,MAAA;AAEF,KACF;AAAA,GACF,QAAS,OAAO,IAAK,EAAA,EAAA;AAErB,EAAA,OAAO,iBAAiB,MAAO,EAAA,CAAA;AACjC;;;;"}
|
|
@@ -159,21 +159,23 @@ const useColumnExpressionSuggestionProvider = ({
|
|
|
159
159
|
columnName
|
|
160
160
|
);
|
|
161
161
|
const suggestions = await getTypeaheadSuggestions(params);
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
162
|
+
if (suggestions) {
|
|
163
|
+
latestSuggestionsRef.current = toSuggestions(suggestions, {
|
|
164
|
+
suffix: ""
|
|
165
|
+
});
|
|
166
|
+
latestSuggestionsRef.current.forEach((suggestion) => {
|
|
167
|
+
suggestion.apply = (view, completion, from) => {
|
|
168
|
+
const annotation = new AnnotationType();
|
|
169
|
+
const cursorPos = from + completion.label.length + 1;
|
|
170
|
+
view.dispatch({
|
|
171
|
+
changes: { from, insert: completion.label },
|
|
172
|
+
selection: { anchor: cursorPos, head: cursorPos },
|
|
173
|
+
annotations: annotation.of(completion)
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
return latestSuggestionsRef.current || [];
|
|
177
179
|
}
|
|
178
180
|
break;
|
|
179
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions,\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor,\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns],\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix }),\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName),\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/,\n );\n const suggestions = await getTypeaheadSuggestions(params);\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number,\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n return latestSuggestionsRef.current;\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table],\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string,\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions],\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useColumnExpressionSuggestionProvider.js","sources":["../../src/column-expression-input/useColumnExpressionSuggestionProvider.ts"],"sourcesContent":["import {\n AnnotationType,\n Completion,\n EditorView,\n getRelationalOperators,\n numericOperators,\n stringOperators,\n toSuggestions,\n} from \"@vuu-ui/vuu-codemirror\";\nimport {\n getTypeaheadParams,\n useTypeaheadSuggestions,\n} from \"@vuu-ui/vuu-data-react\";\nimport { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { isNumericColumn, isTextColumn } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport {\n ColumnFunctionDescriptor,\n columnFunctionDescriptors,\n} from \"./column-function-descriptors\";\nimport { functionDocInfo } from \"./functionDocInfo\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\n\nconst NO_OPERATORS = [] as Completion[];\n\nconst withApplySpace = (suggestions: Completion[]): Completion[] =>\n suggestions.map((suggestion) => ({\n ...suggestion,\n apply: (suggestion.apply ?? suggestion.label) + \" \",\n }));\n\ntype ColumnOptions = {\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n};\n\nconst getValidColumns = (\n columns: ColumnDescriptor[],\n { functionName, operator }: ColumnOptions,\n) => {\n if (operator) {\n return columns.filter(isNumericColumn);\n } else if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n if (fn) {\n switch (fn.accepts) {\n case \"string\":\n return columns.filter(isTextColumn);\n case \"number\":\n return columns.filter(isNumericColumn);\n default:\n return columns;\n }\n }\n }\n return columns;\n};\n\nconst getColumns = (columns: ColumnDescriptor[], options: ColumnOptions) => {\n const validColumns = getValidColumns(columns, options);\n return validColumns.map((column) => {\n const label = column.label ?? column.name;\n return {\n apply: options.prefix ? `${options.prefix}${column.name}` : column.name,\n label,\n boost: 5,\n type: \"column\",\n expressionType: column.serverDataType,\n };\n });\n};\n\n// prettier-ignore\nconst arithmeticOperators = [\n { apply: \"* \", boost: 2, label: \"*\", type: \"operator\" },\n { apply: \"/ \", boost: 2, label: \"/\", type: \"operator\" },\n { apply: \"+ \", boost: 2, label: \"+\", type: \"operator\" },\n { apply: \"- \", boost: 2, label: \"-\", type: \"operator\" },\n];\n\nconst getOperators = (column?: ColumnDescriptor) => {\n if (column === undefined || isNumericColumn(column)) {\n return arithmeticOperators;\n } else {\n return NO_OPERATORS;\n }\n};\n\nconst getConditionOperators = (column: ColumnDescriptor) => {\n switch (column.serverDataType) {\n case \"string\":\n case \"char\":\n return withApplySpace(stringOperators /*, startsWith*/);\n case \"int\":\n case \"long\":\n case \"double\":\n return withApplySpace(numericOperators);\n }\n};\n\nconst toFunctionCompletion = (\n functionDescriptor: ColumnFunctionDescriptor,\n) => ({\n apply: `${functionDescriptor.name}( `,\n boost: 2,\n expressionType: functionDescriptor.type,\n info: () => functionDocInfo(functionDescriptor),\n label: functionDescriptor.name,\n type: \"function\",\n});\n\nconst getAcceptedTypes = (fn?: ColumnFunctionDescriptor) => {\n if (fn) {\n if (typeof fn.accepts === \"string\") {\n return fn.accepts;\n } else if (Array.isArray(fn.accepts)) {\n if (fn.accepts.every((s) => s === \"string\")) {\n return \"string\";\n } else {\n return \"any\";\n }\n }\n }\n return \"any\";\n};\n\nconst functions: Completion[] =\n columnFunctionDescriptors.map(toFunctionCompletion);\n\nconst getFunctions = ({ functionName }: ColumnOptions) => {\n if (functionName) {\n const fn = columnFunctionDescriptors.find((f) => f.name === functionName);\n const acceptedTypes = getAcceptedTypes(fn);\n if (fn) {\n switch (acceptedTypes) {\n case \"string\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"string\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n case \"number\":\n return columnFunctionDescriptors\n .filter((f) => f.type === \"number\" || f.type === \"variable\")\n .map(toFunctionCompletion);\n default:\n }\n }\n }\n return functions;\n};\n\nexport interface SuggestionProviderHookProps {\n columns: ColumnDescriptor[];\n table: VuuTable;\n}\n\nconst NONE = {};\n\nexport const useColumnExpressionSuggestionProvider = ({\n columns,\n table,\n}: SuggestionProviderHookProps): IExpressionSuggestionProvider => {\n const findColumn = useCallback(\n (name?: string) =>\n name ? columns.find((col) => col.name === name) : undefined,\n [columns],\n );\n\n const latestSuggestionsRef = useRef<Completion[]>();\n const getTypeaheadSuggestions = useTypeaheadSuggestions();\n\n const getSuggestions: IExpressionSuggestionProvider[\"getSuggestions\"] =\n useCallback(\n async (suggestionType, options = NONE): Promise<Completion[]> => {\n const { columnName, functionName, operator, prefix } = options;\n\n switch (suggestionType) {\n case \"expression\": {\n const suggestions = await withApplySpace(\n getColumns(columns, { functionName, prefix }),\n ).concat(getFunctions(options));\n return (latestSuggestionsRef.current = suggestions);\n }\n case \"column\": {\n const suggestions = await getColumns(columns, options);\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"operator\": {\n const suggestions = await getOperators(findColumn(columnName));\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"relational-operator\": {\n const suggestions = await getRelationalOperators(\n findColumn(columnName),\n );\n return (latestSuggestionsRef.current = withApplySpace(suggestions));\n }\n case \"condition-operator\":\n {\n const column = findColumn(columnName);\n if (column) {\n const suggestions = await getConditionOperators(column);\n if (suggestions) {\n return (latestSuggestionsRef.current =\n withApplySpace(suggestions));\n }\n }\n }\n break;\n case \"columnValue\":\n if (columnName && operator) {\n // const column = findColumn(columnName);\n const params = getTypeaheadParams(\n table,\n columnName /*, startsWith*/,\n );\n const suggestions = await getTypeaheadSuggestions(params);\n if (suggestions) {\n latestSuggestionsRef.current = toSuggestions(suggestions, {\n suffix: \"\",\n });\n\n latestSuggestionsRef.current.forEach((suggestion) => {\n suggestion.apply = (\n view: EditorView,\n completion: Completion,\n from: number,\n ) => {\n const annotation = new AnnotationType<Completion>();\n const cursorPos = from + completion.label.length + 1;\n view.dispatch({\n changes: { from, insert: completion.label },\n selection: { anchor: cursorPos, head: cursorPos },\n annotations: annotation.of(completion),\n });\n };\n });\n }\n return latestSuggestionsRef.current || [];\n }\n break;\n }\n\n return [];\n },\n [columns, findColumn, getTypeaheadSuggestions, table],\n );\n\n const isPartialMatch = useCallback(\n async (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n pattern?: string,\n ) => {\n const { current: latestSuggestions } = latestSuggestionsRef;\n let maybe = false;\n const suggestions =\n latestSuggestions || (await getSuggestions(valueType, { columnName }));\n if (pattern && suggestions) {\n for (const option of suggestions) {\n if (option.label === pattern) {\n return false;\n } else if (option.label.startsWith(pattern)) {\n maybe = true;\n }\n }\n }\n return maybe;\n },\n [getSuggestions],\n );\n\n return {\n getSuggestions,\n isPartialMatch,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import cx from 'clsx';
|
|
3
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
4
|
import { useWindow } from '@salt-ds/window';
|
|
@@ -32,14 +32,18 @@ const DataSourceStats = ({
|
|
|
32
32
|
const from = numberFormatter.format(range.from + 1);
|
|
33
33
|
const to = numberFormatter.format(Math.min(range.to, size));
|
|
34
34
|
const value = numberFormatter.format(size);
|
|
35
|
-
|
|
36
|
-
/* @__PURE__ */ jsx("span", { className: `${classBase}-label`, children: "Rows" })
|
|
37
|
-
|
|
38
|
-
/* @__PURE__ */
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
if (size === 0) {
|
|
36
|
+
return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx("span", { className: `${classBase}-label`, children: "No Rows to display" }) });
|
|
37
|
+
} else {
|
|
38
|
+
return /* @__PURE__ */ jsxs("div", { className, children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}-label`, children: "Rows" }),
|
|
40
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}-range`, children: from }),
|
|
41
|
+
/* @__PURE__ */ jsx("span", { children: "-" }),
|
|
42
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}-range`, children: to }),
|
|
43
|
+
/* @__PURE__ */ jsx("span", { children: "of" }),
|
|
44
|
+
/* @__PURE__ */ jsx("span", { className: `${classBase}-size`, children: value })
|
|
45
|
+
] });
|
|
46
|
+
}
|
|
43
47
|
};
|
|
44
48
|
|
|
45
49
|
export { DataSourceStats };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasourceStats.js","sources":["../../src/datasource-stats/DatasourceStats.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\n\nimport dataSourceStats from \"./DatasourceStats.css\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-datasource-stats\",\n css: dataSourceStats,\n window: targetWindow,\n });\n\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n return () => {\n dataSource.removeListener(\"resize\", setSize);\n dataSource.removeListener(\"range\", setRange);\n };\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from + 1);\n const to = numberFormatter.format(Math.min(range.to, size));\n const value = numberFormatter.format(size);\n return (\n
|
|
1
|
+
{"version":3,"file":"DatasourceStats.js","sources":["../../src/datasource-stats/DatasourceStats.tsx"],"sourcesContent":["import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, useEffect, useState } from \"react\";\n\nimport dataSourceStats from \"./DatasourceStats.css\";\n\ninterface DataSourceStatsProps extends HTMLAttributes<HTMLSpanElement> {\n dataSource: DataSource;\n}\n\nconst classBase = \"vuuDatasourceStats\";\n\nconst numberFormatter = new Intl.NumberFormat();\n\nexport const DataSourceStats = ({\n className: classNameProp,\n dataSource,\n}: DataSourceStatsProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-datasource-stats\",\n css: dataSourceStats,\n window: targetWindow,\n });\n\n const [range, setRange] = useState<VuuRange>(dataSource.range);\n const [size, setSize] = useState(dataSource.size);\n useEffect(() => {\n setSize(dataSource.size);\n dataSource.on(\"resize\", setSize);\n dataSource.on(\"range\", setRange);\n return () => {\n dataSource.removeListener(\"resize\", setSize);\n dataSource.removeListener(\"range\", setRange);\n };\n }, [dataSource]);\n\n const className = cx(classBase, classNameProp);\n const from = numberFormatter.format(range.from + 1);\n const to = numberFormatter.format(Math.min(range.to, size));\n const value = numberFormatter.format(size);\n if (size === 0) {\n return (\n <div className={className}>\n <span className={`${classBase}-label`}>No Rows to display</span>\n </div>\n );\n } else {\n return (\n <div className={className}>\n <span className={`${classBase}-label`}>Rows</span>\n <span className={`${classBase}-range`}>{from}</span>\n <span>-</span>\n <span className={`${classBase}-range`}>{to}</span>\n <span>of</span>\n <span className={`${classBase}-size`}>{value}</span>\n </div>\n );\n }\n};\n"],"names":[],"mappings":";;;;;;;AAaA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAElB,MAAM,eAAA,GAAkB,IAAI,IAAA,CAAK,YAAa,EAAA,CAAA;AAEvC,MAAM,kBAAkB,CAAC;AAAA,EAC9B,SAAW,EAAA,aAAA;AAAA,EACX,UAAA;AACF,CAA4B,KAAA;AAC1B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAA,eAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA,CAAmB,WAAW,KAAK,CAAA,CAAA;AAC7D,EAAA,MAAM,CAAC,IAAM,EAAA,OAAO,CAAI,GAAA,QAAA,CAAS,WAAW,IAAI,CAAA,CAAA;AAChD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,WAAW,IAAI,CAAA,CAAA;AACvB,IAAW,UAAA,CAAA,EAAA,CAAG,UAAU,OAAO,CAAA,CAAA;AAC/B,IAAW,UAAA,CAAA,EAAA,CAAG,SAAS,QAAQ,CAAA,CAAA;AAC/B,IAAA,OAAO,MAAM;AACX,MAAW,UAAA,CAAA,cAAA,CAAe,UAAU,OAAO,CAAA,CAAA;AAC3C,MAAW,UAAA,CAAA,cAAA,CAAe,SAAS,QAAQ,CAAA,CAAA;AAAA,KAC7C,CAAA;AAAA,GACF,EAAG,CAAC,UAAU,CAAC,CAAA,CAAA;AAEf,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAC7C,EAAA,MAAM,IAAO,GAAA,eAAA,CAAgB,MAAO,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAClD,EAAM,MAAA,EAAA,GAAK,gBAAgB,MAAO,CAAA,IAAA,CAAK,IAAI,KAAM,CAAA,EAAA,EAAI,IAAI,CAAC,CAAA,CAAA;AAC1D,EAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACzC,EAAA,IAAI,SAAS,CAAG,EAAA;AACd,IACE,uBAAA,GAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EACH,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA,EAAK,WAAW,CAAG,EAAA,SAAS,CAAU,MAAA,CAAA,EAAA,QAAA,EAAA,oBAAA,EAAkB,CAC3D,EAAA,CAAA,CAAA;AAAA,GAEG,MAAA;AACL,IACE,uBAAA,IAAA,CAAC,SAAI,SACH,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAU,QAAI,EAAA,MAAA,EAAA,CAAA;AAAA,0BAC1C,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAK,EAAA,IAAA,EAAA,CAAA;AAAA,sBAC7C,GAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,0BACN,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,UAAW,QAAG,EAAA,EAAA,EAAA,CAAA;AAAA,sBAC3C,GAAA,CAAC,UAAK,QAAE,EAAA,IAAA,EAAA,CAAA;AAAA,0BACP,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,SAAU,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,KAC/C,EAAA,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.95",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"devDependencies": {
|
|
6
|
-
"@vuu-ui/vuu-filter-types": "0.8.
|
|
7
|
-
"@vuu-ui/vuu-protocol-types": "0.8.
|
|
6
|
+
"@vuu-ui/vuu-filter-types": "0.8.95",
|
|
7
|
+
"@vuu-ui/vuu-protocol-types": "0.8.95"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@vuu-ui/vuu-codemirror": "0.8.
|
|
11
|
-
"@vuu-ui/vuu-data-react": "0.8.
|
|
12
|
-
"@vuu-ui/vuu-data-types": "0.8.
|
|
13
|
-
"@vuu-ui/vuu-table-types": "0.8.
|
|
14
|
-
"@vuu-ui/vuu-layout": "0.8.
|
|
15
|
-
"@vuu-ui/vuu-popups": "0.8.
|
|
16
|
-
"@vuu-ui/vuu-table": "0.8.
|
|
17
|
-
"@vuu-ui/vuu-utils": "0.8.
|
|
18
|
-
"@vuu-ui/vuu-ui-controls": "0.8.
|
|
10
|
+
"@vuu-ui/vuu-codemirror": "0.8.95",
|
|
11
|
+
"@vuu-ui/vuu-data-react": "0.8.95",
|
|
12
|
+
"@vuu-ui/vuu-data-types": "0.8.95",
|
|
13
|
+
"@vuu-ui/vuu-table-types": "0.8.95",
|
|
14
|
+
"@vuu-ui/vuu-layout": "0.8.95",
|
|
15
|
+
"@vuu-ui/vuu-popups": "0.8.95",
|
|
16
|
+
"@vuu-ui/vuu-table": "0.8.95",
|
|
17
|
+
"@vuu-ui/vuu-utils": "0.8.95",
|
|
18
|
+
"@vuu-ui/vuu-ui-controls": "0.8.95",
|
|
19
19
|
"@lezer/lr": "1.3.4",
|
|
20
20
|
"@salt-ds/core": "1.34.0",
|
|
21
21
|
"@salt-ds/styles": "0.2.1",
|