@vuu-ui/vuu-table-extras 0.9.1 → 0.9.3
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/cell-edit-validators/CaseValidator.js.map +1 -1
- package/cjs/cell-edit-validators/PatternValidator.js.map +1 -1
- package/cjs/cell-renderers/background-cell/BackgroundCell.js.map +1 -1
- package/cjs/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -1
- package/cjs/cell-renderers/background-cell/useDirection.js.map +1 -1
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.css.js +1 -1
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js +14 -9
- package/cjs/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -1
- package/cjs/cell-renderers/lookup-cell/LookupCell.js.map +1 -1
- package/cjs/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -1
- package/cjs/cell-renderers/progress-cell/ProgressCell.js.map +1 -1
- package/cjs/column-expression-input/ColumnExpressionInput.js.map +1 -1
- package/cjs/column-expression-input/column-function-descriptors.js.map +1 -1
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -1
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +1 -1
- package/cjs/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
- package/cjs/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -1
- package/cjs/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -1
- package/cjs/column-expression-input/functionDocInfo.js.map +1 -1
- package/cjs/column-expression-input/highlighting.js.map +1 -1
- package/cjs/column-expression-input/theme.js.map +1 -1
- package/cjs/column-expression-input/useColumnAutoComplete.js.map +1 -1
- package/cjs/column-expression-input/useColumnExpressionEditor.js.map +1 -1
- package/cjs/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
- package/cjs/column-expression-panel/ColumnExpressionPanel.js.map +1 -1
- package/cjs/column-expression-panel/useColumnExpression.js.map +1 -1
- package/cjs/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
- package/cjs/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/cjs/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
- package/cjs/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
- package/cjs/column-list/ColumnList.js.map +1 -1
- package/cjs/column-settings/ColumnNameLabel.js.map +1 -1
- package/cjs/column-settings/ColumnSettingsPanel.js.map +1 -1
- package/cjs/column-settings/useColumnSettings.js.map +1 -1
- package/cjs/datasource-stats/DatasourceStats.js.map +1 -1
- package/cjs/table-settings/TableSettingsPanel.js.map +1 -1
- package/cjs/table-settings/useTableSettings.js.map +1 -1
- package/esm/cell-edit-validators/CaseValidator.js.map +1 -1
- package/esm/cell-edit-validators/PatternValidator.js.map +1 -1
- package/esm/cell-renderers/background-cell/BackgroundCell.js.map +1 -1
- package/esm/cell-renderers/background-cell/BackgroundCellConfigurationEditor.js.map +1 -1
- package/esm/cell-renderers/background-cell/useDirection.js.map +1 -1
- package/esm/cell-renderers/dropdown-cell/DropdownCell.css.js +1 -1
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js +14 -9
- package/esm/cell-renderers/dropdown-cell/DropdownCell.js.map +1 -1
- package/esm/cell-renderers/lookup-cell/LookupCell.js.map +1 -1
- package/esm/cell-renderers/pct-progress-cell/PctProgressCell.js.map +1 -1
- package/esm/cell-renderers/progress-cell/ProgressCell.js.map +1 -1
- package/esm/column-expression-input/ColumnExpressionInput.js.map +1 -1
- package/esm/column-expression-input/column-function-descriptors.js.map +1 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionLanguage.js.map +1 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js +1 -1
- package/esm/column-expression-input/column-language-parser/ColumnExpressionTreeWalker.js.map +1 -1
- package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map +1 -1
- package/esm/column-expression-input/column-language-parser/generated/column-parser.js.map +1 -1
- package/esm/column-expression-input/functionDocInfo.js.map +1 -1
- package/esm/column-expression-input/highlighting.js.map +1 -1
- package/esm/column-expression-input/theme.js.map +1 -1
- package/esm/column-expression-input/useColumnAutoComplete.js.map +1 -1
- package/esm/column-expression-input/useColumnExpressionEditor.js.map +1 -1
- package/esm/column-expression-input/useColumnExpressionSuggestionProvider.js.map +1 -1
- package/esm/column-expression-panel/ColumnExpressionPanel.js.map +1 -1
- package/esm/column-expression-panel/useColumnExpression.js.map +1 -1
- package/esm/column-formatting-settings/BaseNumericFormattingSettings.js.map +1 -1
- package/esm/column-formatting-settings/ColumnFormattingPanel.js.map +1 -1
- package/esm/column-formatting-settings/DateTimeFormattingSettings.js.map +1 -1
- package/esm/column-formatting-settings/LongTypeFormattingSettings.js.map +1 -1
- package/esm/column-list/ColumnList.js.map +1 -1
- package/esm/column-settings/ColumnNameLabel.js.map +1 -1
- package/esm/column-settings/ColumnSettingsPanel.js.map +1 -1
- package/esm/column-settings/useColumnSettings.js.map +1 -1
- package/esm/datasource-stats/DatasourceStats.js.map +1 -1
- package/esm/table-settings/TableSettingsPanel.js.map +1 -1
- package/esm/table-settings/useTableSettings.js.map +1 -1
- package/package.json +14 -14
- package/types/cell-renderers/background-cell/BackgroundCell.d.ts +2 -3
- package/types/cell-renderers/background-cell/BackgroundCellConfigurationEditor.d.ts +1 -2
- package/types/cell-renderers/dropdown-cell/DropdownCell.d.ts +0 -1
- package/types/cell-renderers/lookup-cell/LookupCell.d.ts +0 -1
- package/types/cell-renderers/pct-progress-cell/PctProgressCell.d.ts +1 -2
- package/types/column-expression-input/ColumnExpressionInput.d.ts +1 -1
- package/types/column-expression-panel/ColumnExpressionPanel.d.ts +1 -1
- package/types/column-formatting-settings/BaseNumericFormattingSettings.d.ts +1 -2
- package/types/column-formatting-settings/ColumnFormattingPanel.d.ts +1 -1
- package/types/column-formatting-settings/LongTypeFormattingSettings.d.ts +1 -2
- package/types/column-list/ColumnList.d.ts +1 -1
- package/types/column-settings/ColumnNameLabel.d.ts +1 -1
- package/types/column-settings/ColumnSettingsPanel.d.ts +1 -2
- package/types/datasource-stats/DatasourceStats.d.ts +1 -1
- package/types/table-settings/TableSettingsPanel.d.ts +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressCell.js","sources":["../../../src/cell-renderers/progress-cell/ProgressCell.tsx"],"sourcesContent":["import { TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport {\n isColumnTypeRenderer,\n isTypeDescriptor,\n isValidNumber,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { CSSProperties } from \"react\";\n\nimport progressCellCss from \"./ProgressCell.css\";\n\nconst classBase = \"vuuProgressCell\";\n\nconst ProgressCell = ({ column, columnMap, row }: TableCellProps) => {\n //TODO what about click handling\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-progress-cell\",\n css: progressCellCss,\n window: targetWindow,\n });\n\n const { name, type } = column;\n const value = row[columnMap[name]];\n let showProgress = false;\n let percentage = 0;\n\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const { associatedField } = type.renderer;\n if (associatedField) {\n const associatedValue = row[columnMap[associatedField]];\n if (isValidNumber(value) && isValidNumber(associatedValue)) {\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n showProgress = isFinite(percentage);\n } else {\n // Temp workaround for bug on server that sends aggregated values as strings\n const floatValue = parseFloat(value as string);\n if (Number.isFinite(floatValue)) {\n const floatOtherValue = parseFloat(associatedValue as string);\n if (Number.isFinite(floatOtherValue)) {\n percentage = Math.min(\n Math.round((floatValue / floatOtherValue) * 100),\n 100,\n );\n showProgress = isFinite(percentage);\n }\n }\n }\n } else {\n throw Error(\"ProgressCell associatedField is required to render\");\n }\n }\n\n const className = cx(classBase, {});\n\n return (\n <div className={className} tabIndex={-1}>\n {showProgress ? (\n <span className={`${classBase}-track`}>\n <span className={`${classBase}-bg`} />\n <span\n className={`${classBase}-bar`}\n style={\n { \"--progress-bar-pct\": `-${100 - percentage}%` } as CSSProperties\n }\n />\n </span>\n ) : null}\n <span className={`${classBase}-text`}>{`${percentage} %`}</span>\n </div>\n );\n};\n\nregisterComponent(\"vuu.progress\", ProgressCell, \"cell-renderer\", {\n description: \"Progress formatter\",\n label: \"Progress formatter\",\n serverDataType: [\"long\", \"int\", \"double\"],\n // Not until we provide settings for associaetd field\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,SAAY,GAAA,iBAAA
|
|
1
|
+
{"version":3,"file":"ProgressCell.js","sources":["../../../src/cell-renderers/progress-cell/ProgressCell.tsx"],"sourcesContent":["import { TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport {\n isColumnTypeRenderer,\n isTypeDescriptor,\n isValidNumber,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { CSSProperties } from \"react\";\n\nimport progressCellCss from \"./ProgressCell.css\";\n\nconst classBase = \"vuuProgressCell\";\n\nconst ProgressCell = ({ column, columnMap, row }: TableCellProps) => {\n //TODO what about click handling\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-progress-cell\",\n css: progressCellCss,\n window: targetWindow,\n });\n\n const { name, type } = column;\n const value = row[columnMap[name]];\n let showProgress = false;\n let percentage = 0;\n\n if (isTypeDescriptor(type) && isColumnTypeRenderer(type.renderer)) {\n const { associatedField } = type.renderer;\n if (associatedField) {\n const associatedValue = row[columnMap[associatedField]];\n if (isValidNumber(value) && isValidNumber(associatedValue)) {\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n percentage = Math.min(Math.round((value / associatedValue) * 100), 100);\n showProgress = isFinite(percentage);\n } else {\n // Temp workaround for bug on server that sends aggregated values as strings\n const floatValue = parseFloat(value as string);\n if (Number.isFinite(floatValue)) {\n const floatOtherValue = parseFloat(associatedValue as string);\n if (Number.isFinite(floatOtherValue)) {\n percentage = Math.min(\n Math.round((floatValue / floatOtherValue) * 100),\n 100,\n );\n showProgress = isFinite(percentage);\n }\n }\n }\n } else {\n throw Error(\"ProgressCell associatedField is required to render\");\n }\n }\n\n const className = cx(classBase, {});\n\n return (\n <div className={className} tabIndex={-1}>\n {showProgress ? (\n <span className={`${classBase}-track`}>\n <span className={`${classBase}-bg`} />\n <span\n className={`${classBase}-bar`}\n style={\n { \"--progress-bar-pct\": `-${100 - percentage}%` } as CSSProperties\n }\n />\n </span>\n ) : null}\n <span className={`${classBase}-text`}>{`${percentage} %`}</span>\n </div>\n );\n};\n\nregisterComponent(\"vuu.progress\", ProgressCell, \"cell-renderer\", {\n description: \"Progress formatter\",\n label: \"Progress formatter\",\n serverDataType: [\"long\", \"int\", \"double\"],\n // Not until we provide settings for associaetd field\n userCanAssign: false,\n});\n"],"names":[],"mappings":";;;;;;;AAcA,MAAM,SAAY,GAAA,iBAAA;AAElB,MAAM,eAAe,CAAC,EAAE,MAAQ,EAAA,SAAA,EAAW,KAA0B,KAAA;AAEnE,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAA,eAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,IAAM,EAAA,IAAA,EAAS,GAAA,MAAA;AACvB,EAAA,MAAM,KAAQ,GAAA,GAAA,CAAI,SAAU,CAAA,IAAI,CAAC,CAAA;AACjC,EAAA,IAAI,YAAe,GAAA,KAAA;AACnB,EAAA,IAAI,UAAa,GAAA,CAAA;AAEjB,EAAA,IAAI,iBAAiB,IAAI,CAAA,IAAK,oBAAqB,CAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AACjE,IAAM,MAAA,EAAE,eAAgB,EAAA,GAAI,IAAK,CAAA,QAAA;AACjC,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,MAAM,eAAkB,GAAA,GAAA,CAAI,SAAU,CAAA,eAAe,CAAC,CAAA;AACtD,MAAA,IAAI,aAAc,CAAA,KAAK,CAAK,IAAA,aAAA,CAAc,eAAe,CAAG,EAAA;AAC1D,QAAa,UAAA,GAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAO,QAAQ,eAAmB,GAAA,GAAG,GAAG,GAAG,CAAA;AACtE,QAAa,UAAA,GAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,CAAO,QAAQ,eAAmB,GAAA,GAAG,GAAG,GAAG,CAAA;AACtE,QAAA,YAAA,GAAe,SAAS,UAAU,CAAA;AAAA,OAC7B,MAAA;AAEL,QAAM,MAAA,UAAA,GAAa,WAAW,KAAe,CAAA;AAC7C,QAAI,IAAA,MAAA,CAAO,QAAS,CAAA,UAAU,CAAG,EAAA;AAC/B,UAAM,MAAA,eAAA,GAAkB,WAAW,eAAyB,CAAA;AAC5D,UAAI,IAAA,MAAA,CAAO,QAAS,CAAA,eAAe,CAAG,EAAA;AACpC,YAAA,UAAA,GAAa,IAAK,CAAA,GAAA;AAAA,cAChB,IAAK,CAAA,KAAA,CAAO,UAAa,GAAA,eAAA,GAAmB,GAAG,CAAA;AAAA,cAC/C;AAAA,aACF;AACA,YAAA,YAAA,GAAe,SAAS,UAAU,CAAA;AAAA;AACpC;AACF;AACF,KACK,MAAA;AACL,MAAA,MAAM,MAAM,oDAAoD,CAAA;AAAA;AAClE;AAGF,EAAA,MAAM,SAAY,GAAA,EAAA,CAAG,SAAW,EAAA,EAAE,CAAA;AAElC,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAsB,EAAA,QAAA,EAAU,CAClC,CAAA,EAAA,QAAA,EAAA;AAAA,IAAA,YAAA,mBACE,IAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAC3B,MAAA,CAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,CAAO,GAAA,CAAA,EAAA,CAAA;AAAA,sBACpC,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,SAAS,CAAA,IAAA,CAAA;AAAA,UACvB,OACE,EAAE,oBAAA,EAAsB,CAAI,CAAA,EAAA,GAAA,GAAM,UAAU,CAAI,CAAA,CAAA;AAAA;AAAA;AAEpD,KAAA,EACF,CACE,GAAA,IAAA;AAAA,oBACJ,GAAA,CAAC,UAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAU,KAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAG,UAAU,CAAK,EAAA,CAAA,EAAA;AAAA,GAC3D,EAAA,CAAA;AAEJ,CAAA;AAEA,iBAAkB,CAAA,cAAA,EAAgB,cAAc,eAAiB,EAAA;AAAA,EAC/D,WAAa,EAAA,oBAAA;AAAA,EACb,KAAO,EAAA,oBAAA;AAAA,EACP,cAAgB,EAAA,CAAC,MAAQ,EAAA,KAAA,EAAO,QAAQ,CAAA;AAAA;AAAA,EAExC,aAAe,EAAA;AACjB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnExpressionInput.js","sources":["../../src/column-expression-input/ColumnExpressionInput.tsx"],"sourcesContent":["import { HTMLAttributes, memo } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnDefinitionExpression } from \"./column-language-parser\";\nimport {\n ExpressionSuggestionConsumer,\n useColumnExpressionEditor,\n} from \"./useColumnExpressionEditor\";\n\nimport colummExpressionInputCss from \"./ColumnExpressionInput.css\";\n\nconst classBase = \"vuuColumnExpressionInput\";\n\nexport type ColumnExpressionSubmitHandler = (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n) => void;\n\nexport interface ColumnExpressionInputProps\n extends ExpressionSuggestionConsumer,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange?: (source: string) => void;\n onSubmitExpression?: ColumnExpressionSubmitHandler;\n source?: string;\n}\n\nexport const ColumnExpressionInput = memo(\n ({\n onChange,\n onSubmitExpression,\n source = \"\",\n suggestionProvider,\n }: ColumnExpressionInputProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-expression-input\",\n css: colummExpressionInputCss,\n window: targetWindow,\n });\n\n const { editorRef, onBlur } = useColumnExpressionEditor({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n });\n\n return <div className={`${classBase}`} onBlur={onBlur} ref={editorRef} />;\n },\n (prevProps, newProps) => {\n return prevProps.source === newProps.source;\n }\n);\nColumnExpressionInput.displayName = \"ColumnExpressionInput\";\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,SAAY,GAAA,0BAAA
|
|
1
|
+
{"version":3,"file":"ColumnExpressionInput.js","sources":["../../src/column-expression-input/ColumnExpressionInput.tsx"],"sourcesContent":["import { HTMLAttributes, memo } from \"react\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ColumnDefinitionExpression } from \"./column-language-parser\";\nimport {\n ExpressionSuggestionConsumer,\n useColumnExpressionEditor,\n} from \"./useColumnExpressionEditor\";\n\nimport colummExpressionInputCss from \"./ColumnExpressionInput.css\";\n\nconst classBase = \"vuuColumnExpressionInput\";\n\nexport type ColumnExpressionSubmitHandler = (\n source: string,\n expression: ColumnDefinitionExpression | undefined\n) => void;\n\nexport interface ColumnExpressionInputProps\n extends ExpressionSuggestionConsumer,\n Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n onChange?: (source: string) => void;\n onSubmitExpression?: ColumnExpressionSubmitHandler;\n source?: string;\n}\n\nexport const ColumnExpressionInput = memo(\n ({\n onChange,\n onSubmitExpression,\n source = \"\",\n suggestionProvider,\n }: ColumnExpressionInputProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-column-expression-input\",\n css: colummExpressionInputCss,\n window: targetWindow,\n });\n\n const { editorRef, onBlur } = useColumnExpressionEditor({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n });\n\n return <div className={`${classBase}`} onBlur={onBlur} ref={editorRef} />;\n },\n (prevProps, newProps) => {\n return prevProps.source === newProps.source;\n }\n);\nColumnExpressionInput.displayName = \"ColumnExpressionInput\";\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,SAAY,GAAA,0BAAA;AAeX,MAAM,qBAAwB,GAAA,IAAA;AAAA,EACnC,CAAC;AAAA,IACC,QAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAS,GAAA,EAAA;AAAA,IACT;AAAA,GACgC,KAAA;AAChC,IAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,6BAAA;AAAA,MACR,GAAK,EAAA,wBAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAA,MAAM,EAAE,SAAA,EAAW,MAAO,EAAA,GAAI,yBAA0B,CAAA;AAAA,MACtD,QAAA;AAAA,MACA,kBAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAO,uBAAA,GAAA,CAAC,SAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAI,CAAA,EAAA,MAAA,EAAgB,KAAK,SAAW,EAAA,CAAA;AAAA,GACzE;AAAA,EACA,CAAC,WAAW,QAAa,KAAA;AACvB,IAAO,OAAA,SAAA,CAAU,WAAW,QAAS,CAAA,MAAA;AAAA;AAEzC;AACA,qBAAA,CAAsB,WAAc,GAAA,uBAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-function-descriptors.js","sources":["../../src/column-expression-input/column-function-descriptors.ts"],"sourcesContent":["export type ColumnFunctionDescriptor = {\n accepts:\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"any\"\n | Array<\"string\" | \"number\" | \"boolean\">;\n description: string;\n example: {\n expression: string;\n result: string;\n };\n name: string;\n params: {\n count?: number;\n description: string;\n };\n type: \"string\" | \"number\" | \"boolean\" | \"variable\";\n};\n\nexport const columnFunctionDescriptors: ColumnFunctionDescriptor[] = [\n /**\n * and\n */\n {\n accepts: [\"boolean\"],\n description:\n \"Applies boolean and operator across supplied parameters to returns a single boolean result\",\n example: {\n expression: 'and(ccy=\"EUR\",quantity=0)',\n result: \"true | false\",\n },\n name: \"and\",\n params: {\n description: \"( boolean, [ boolean* ] )\",\n },\n type: \"boolean\",\n },\n\n /**\n * concatenate()\n */\n {\n accepts: \"string\",\n description:\n \"Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.\",\n example: {\n expression: 'concatenate(\"example\", \"-test\")',\n result: '\"example-test\"',\n },\n name: \"concatenate\",\n params: {\n description: \"( string, string, [ string* ] )\",\n },\n type: \"string\",\n },\n /**\n * contains()\n */\n {\n accepts: [\"string\", \"string\"],\n description:\n \"Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>\",\n example: {\n expression: 'contains(\"Royal Bank of Scotland\", \"bank\")',\n result: \"true\",\n },\n name: \"contains\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n\n /**\n * left()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'left(\"USD Benchmark Report\", 3)',\n result: '\"USD\"',\n },\n name: \"left\",\n params: {\n count: 2,\n description: \"( string, number )\",\n },\n type: \"string\",\n },\n /**\n * len()\n */\n {\n accepts: \"string\",\n description:\n \"Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'len(\"example\")',\n result: \"7\",\n },\n name: \"len\",\n params: {\n description: \"(string)\",\n },\n type: \"number\",\n },\n /**\n * lower()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to lowercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'lower(\"examPLE\")',\n result: '\"example\"',\n },\n name: \"lower\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * or\n */\n {\n accepts: [\"boolean\"],\n description:\n \"Applies boolean or operator across supplied parameters to returns a single boolean result\",\n example: {\n expression: 'or(status=\"cancelled\",quantity=0)',\n result: \"true | false\",\n },\n name: \"or\",\n params: {\n description: \"( boolean, [ boolean* ] )\",\n },\n type: \"boolean\",\n },\n\n /**\n * upper()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to uppercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'upper(\"example\")',\n result: '\"EXAMPLE\"',\n },\n name: \"upper\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * right()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"right\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * replace()\n */\n {\n accepts: [\"string\", \"string\", \"string\"],\n description:\n \"Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"replace\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * text()\n */\n {\n accepts: \"number\",\n description: \"Converts a number to a string.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"text\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"starts\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"ends\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"min\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"max\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"sum\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"round\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"or\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"and\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description:\n \"Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. \",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"if\",\n params: {\n description: \"( filterExpression, expression1, expression 2)\",\n },\n type: \"variable\",\n },\n];\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"column-function-descriptors.js","sources":["../../src/column-expression-input/column-function-descriptors.ts"],"sourcesContent":["export type ColumnFunctionDescriptor = {\n accepts:\n | \"string\"\n | \"number\"\n | \"boolean\"\n | \"any\"\n | Array<\"string\" | \"number\" | \"boolean\">;\n description: string;\n example: {\n expression: string;\n result: string;\n };\n name: string;\n params: {\n count?: number;\n description: string;\n };\n type: \"string\" | \"number\" | \"boolean\" | \"variable\";\n};\n\nexport const columnFunctionDescriptors: ColumnFunctionDescriptor[] = [\n /**\n * and\n */\n {\n accepts: [\"boolean\"],\n description:\n \"Applies boolean and operator across supplied parameters to returns a single boolean result\",\n example: {\n expression: 'and(ccy=\"EUR\",quantity=0)',\n result: \"true | false\",\n },\n name: \"and\",\n params: {\n description: \"( boolean, [ boolean* ] )\",\n },\n type: \"boolean\",\n },\n\n /**\n * concatenate()\n */\n {\n accepts: \"string\",\n description:\n \"Returns multiple string values as a single joined string. Arguments may be string literal values, string columns or other string expressions. Non string arguments may also be included, these will be converted to strings.\",\n example: {\n expression: 'concatenate(\"example\", \"-test\")',\n result: '\"example-test\"',\n },\n name: \"concatenate\",\n params: {\n description: \"( string, string, [ string* ] )\",\n },\n type: \"string\",\n },\n /**\n * contains()\n */\n {\n accepts: [\"string\", \"string\"],\n description:\n \"Tests a string value to determine whether it contains a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> contains one or more occurrences of <target subscring>\",\n example: {\n expression: 'contains(\"Royal Bank of Scotland\", \"bank\")',\n result: \"true\",\n },\n name: \"contains\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n\n /**\n * left()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the leftmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'left(\"USD Benchmark Report\", 3)',\n result: '\"USD\"',\n },\n name: \"left\",\n params: {\n count: 2,\n description: \"( string, number )\",\n },\n type: \"string\",\n },\n /**\n * len()\n */\n {\n accepts: \"string\",\n description:\n \"Returns the number of characters in <string>. Argument may be a string literal, string column or other string expression.\",\n example: {\n expression: 'len(\"example\")',\n result: \"7\",\n },\n name: \"len\",\n params: {\n description: \"(string)\",\n },\n type: \"number\",\n },\n /**\n * lower()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to lowercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'lower(\"examPLE\")',\n result: '\"example\"',\n },\n name: \"lower\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * or\n */\n {\n accepts: [\"boolean\"],\n description:\n \"Applies boolean or operator across supplied parameters to returns a single boolean result\",\n example: {\n expression: 'or(status=\"cancelled\",quantity=0)',\n result: \"true | false\",\n },\n name: \"or\",\n params: {\n description: \"( boolean, [ boolean* ] )\",\n },\n type: \"boolean\",\n },\n\n /**\n * upper()\n */\n {\n accepts: \"string\",\n description:\n \"Convert a string value to uppercase. Argument may be a string column or other string expression.\",\n example: {\n expression: 'upper(\"example\")',\n result: '\"EXAMPLE\"',\n },\n name: \"upper\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * right()\n */\n {\n accepts: [\"string\", \"number\"],\n description:\n \"Returns the rightmost <number> characters from <string>. First argument may be a string literal, string column or other string expression.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"right\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * replace()\n */\n {\n accepts: [\"string\", \"string\", \"string\"],\n description:\n \"Replace characters within a string. Accepts three arguments: source text, text to replace and replacement text. Returns a copy of <source text> with any occurrences of <text to replace> replaced by <replacement text>\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"replace\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * text()\n */\n {\n accepts: \"number\",\n description: \"Converts a number to a string.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"text\",\n params: {\n description: \"( string )\",\n },\n type: \"string\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it starts with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> starts with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"starts\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n /**\n * starts()\n */\n {\n accepts: \"string\",\n description:\n \"Tests a string value to determine whether it ends with a given substring. Accepts two arguments: source text and target substring. Returns true if <source text> ends with <target subscring>.\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"ends\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"min\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"max\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"sum\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"number\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"round\",\n params: {\n description: \"( string )\",\n },\n type: \"number\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"or\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description: \"blah\",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"and\",\n params: {\n description: \"( string )\",\n },\n type: \"boolean\",\n },\n {\n accepts: \"any\",\n description:\n \"Return one of two possible result values, depending on the evaluation of a filter expression. If <filterExpression> resolves to true, result is <expression1>, otherwise <expression2>. \",\n example: {\n expression: \"blah\",\n result: \"blah\",\n },\n name: \"if\",\n params: {\n description: \"( filterExpression, expression1, expression 2)\",\n },\n type: \"variable\",\n },\n];\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnExpressionLanguage.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionLanguage.ts"],"sourcesContent":["import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst columnExpressionLanguage = LRLanguage.define({\n name: \"VuuColumnExpression\",\n parser: parser.configure({\n props: [\n styleTags({\n Column: tag.attributeValue,\n Function: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any,\n});\n\nexport const columnExpressionLanguageSupport = () => {\n return new LanguageSupport(\n columnExpressionLanguage /*, [exampleCompletion]*/,\n );\n};\n"],"names":["tag"],"mappings":";;;AAQA,MAAM,wBAAA,GAA2B,WAAW,MAAO,CAAA;AAAA,EACjD,IAAM,EAAA,qBAAA;AAAA,EACN,MAAA,EAAQ,OAAO,SAAU,CAAA;AAAA,IACvB,KAAO,EAAA;AAAA,MACL,SAAU,CAAA;AAAA,QACR,QAAQA,IAAI,CAAA,cAAA;AAAA,QACZ,UAAUA,IAAI,CAAA,YAAA;AAAA,QACd,QAAQA,IAAI,CAAA,MAAA;AAAA,QACZ,IAAIA,IAAI,CAAA,QAAA;AAAA,QACR,UAAUA,IAAI,CAAA
|
|
1
|
+
{"version":3,"file":"ColumnExpressionLanguage.js","sources":["../../../src/column-expression-input/column-language-parser/ColumnExpressionLanguage.ts"],"sourcesContent":["import {\n LanguageSupport,\n LRLanguage,\n styleTags,\n tags as tag,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst columnExpressionLanguage = LRLanguage.define({\n name: \"VuuColumnExpression\",\n parser: parser.configure({\n props: [\n styleTags({\n Column: tag.attributeValue,\n Function: tag.variableName,\n String: tag.string,\n Or: tag.emphasis,\n Operator: tag.operator,\n }),\n ],\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }) as any,\n});\n\nexport const columnExpressionLanguageSupport = () => {\n return new LanguageSupport(\n columnExpressionLanguage /*, [exampleCompletion]*/,\n );\n};\n"],"names":["tag"],"mappings":";;;AAQA,MAAM,wBAAA,GAA2B,WAAW,MAAO,CAAA;AAAA,EACjD,IAAM,EAAA,qBAAA;AAAA,EACN,MAAA,EAAQ,OAAO,SAAU,CAAA;AAAA,IACvB,KAAO,EAAA;AAAA,MACL,SAAU,CAAA;AAAA,QACR,QAAQA,IAAI,CAAA,cAAA;AAAA,QACZ,UAAUA,IAAI,CAAA,YAAA;AAAA,QACd,QAAQA,IAAI,CAAA,MAAA;AAAA,QACZ,IAAIA,IAAI,CAAA,QAAA;AAAA,QACR,UAAUA,IAAI,CAAA;AAAA,OACf;AAAA;AACH;AAAA,GAED;AACH,CAAC,CAAA;AAEM,MAAM,kCAAkC,MAAM;AACnD,EAAA,OAAO,IAAI,eAAA;AAAA,IACT;AAAA,GACF;AACF;;;;"}
|
|
@@ -7,7 +7,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
7
7
|
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
8
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
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);
|
|
10
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"),
|
|
10
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
|
|
11
11
|
var _expressions, _op, _expressions2, _expressions3, _op2, _expressions4, _op3, _expressions5, _expression, _callStack;
|
|
12
12
|
class LiteralExpressionImpl {
|
|
13
13
|
constructor(value) {
|
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":"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"}
|
package/esm/column-expression-input/column-language-parser/column-expression-parse-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-expression-parse-utils.js","sources":["../../../src/column-expression-input/column-language-parser/column-expression-parse-utils.ts"],"sourcesContent":["import type { SyntaxNode } from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst strictParser = parser.configure({ strict: true });\n\nconst RelationalOperands = [\"Number\", \"String\"];\n\nexport const ColumnNamedTerms: readonly string[] = [\n ...RelationalOperands,\n \"AndCondition\",\n \"ArithmeticExpression\",\n \"BooleanOperator\",\n \"RelationalOperatorOperator\",\n \"CallExpression\",\n \"CloseBrace\",\n \"Column\",\n \"Comma\",\n \"ConditionalExpression\",\n \"Divide\",\n \"Equal\",\n \"If\",\n \"Minus\",\n \"OpenBrace\",\n \"OrCondition\",\n \"ParenthesizedExpression\",\n \"Plus\",\n \"RelationalExpression\",\n \"RelationalOperator\",\n \"Times\",\n];\n\nexport const isCompleteExpression = (src: string) => {\n try {\n strictParser.parse(src);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !ColumnNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const isCompleteRelationalExpression = (node?: SyntaxNode) => {\n if (node?.name === \"RelationalExpression\") {\n const { firstChild } = node;\n const lastChild = lastNamedChild(node);\n if (\n firstChild?.name === \"Column\" &&\n typeof lastChild?.name === \"string\" &&\n RelationalOperands.includes(lastChild.name)\n ) {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;AAGA,MAAM,eAAe,MAAO,CAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"column-expression-parse-utils.js","sources":["../../../src/column-expression-input/column-language-parser/column-expression-parse-utils.ts"],"sourcesContent":["import type { SyntaxNode } from \"@vuu-ui/vuu-codemirror\";\nimport { parser } from \"./generated/column-parser\";\n\nconst strictParser = parser.configure({ strict: true });\n\nconst RelationalOperands = [\"Number\", \"String\"];\n\nexport const ColumnNamedTerms: readonly string[] = [\n ...RelationalOperands,\n \"AndCondition\",\n \"ArithmeticExpression\",\n \"BooleanOperator\",\n \"RelationalOperatorOperator\",\n \"CallExpression\",\n \"CloseBrace\",\n \"Column\",\n \"Comma\",\n \"ConditionalExpression\",\n \"Divide\",\n \"Equal\",\n \"If\",\n \"Minus\",\n \"OpenBrace\",\n \"OrCondition\",\n \"ParenthesizedExpression\",\n \"Plus\",\n \"RelationalExpression\",\n \"RelationalOperator\",\n \"Times\",\n];\n\nexport const isCompleteExpression = (src: string) => {\n try {\n strictParser.parse(src);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const lastNamedChild = (node: SyntaxNode): SyntaxNode | null => {\n let { lastChild } = node;\n while (lastChild && !ColumnNamedTerms.includes(lastChild.name)) {\n lastChild = lastChild.prevSibling;\n console.log(lastChild?.name);\n }\n return lastChild;\n};\n\nexport const isCompleteRelationalExpression = (node?: SyntaxNode) => {\n if (node?.name === \"RelationalExpression\") {\n const { firstChild } = node;\n const lastChild = lastNamedChild(node);\n if (\n firstChild?.name === \"Column\" &&\n typeof lastChild?.name === \"string\" &&\n RelationalOperands.includes(lastChild.name)\n ) {\n return true;\n }\n }\n\n return false;\n};\n"],"names":[],"mappings":";;AAGA,MAAM,eAAe,MAAO,CAAA,SAAA,CAAU,EAAE,MAAA,EAAQ,MAAM,CAAA;AAEtD,MAAM,kBAAA,GAAqB,CAAC,QAAA,EAAU,QAAQ,CAAA;AAEvC,MAAM,gBAAsC,GAAA;AAAA,EACjD,GAAG,kBAAA;AAAA,EACH,cAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA,4BAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,uBAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,yBAAA;AAAA,EACA,MAAA;AAAA,EACA,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF;AAEa,MAAA,oBAAA,GAAuB,CAAC,GAAgB,KAAA;AACnD,EAAI,IAAA;AACF,IAAA,YAAA,CAAa,MAAM,GAAG,CAAA;AACtB,IAAO,OAAA,IAAA;AAAA,WACA,GAAK,EAAA;AACZ,IAAO,OAAA,KAAA;AAAA;AAEX;AAEa,MAAA,cAAA,GAAiB,CAAC,IAAwC,KAAA;AACrE,EAAI,IAAA,EAAE,WAAc,GAAA,IAAA;AACpB,EAAA,OAAO,aAAa,CAAC,gBAAA,CAAiB,QAAS,CAAA,SAAA,CAAU,IAAI,CAAG,EAAA;AAC9D,IAAA,SAAA,GAAY,SAAU,CAAA,WAAA;AACtB,IAAQ,OAAA,CAAA,GAAA,CAAI,WAAW,IAAI,CAAA;AAAA;AAE7B,EAAO,OAAA,SAAA;AACT;AAEa,MAAA,8BAAA,GAAiC,CAAC,IAAsB,KAAA;AACnE,EAAI,IAAA,IAAA,EAAM,SAAS,sBAAwB,EAAA;AACzC,IAAM,MAAA,EAAE,YAAe,GAAA,IAAA;AACvB,IAAM,MAAA,SAAA,GAAY,eAAe,IAAI,CAAA;AACrC,IACE,IAAA,UAAA,EAAY,IAAS,KAAA,QAAA,IACrB,OAAO,SAAA,EAAW,IAAS,KAAA,QAAA,IAC3B,kBAAmB,CAAA,QAAA,CAAS,SAAU,CAAA,IAAI,CAC1C,EAAA;AACA,MAAO,OAAA,IAAA;AAAA;AACT;AAGF,EAAO,OAAA,KAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-parser.js","sources":["../../../../src/column-expression-input/column-language-parser/generated/column-parser.js"],"sourcesContent":["// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"&xOVQPOOO!fQPO'#C^OVQPO'#CcQ!pQPOOO#bQPO'#CkO#gQPO'#CrOOQO'#Cy'#CyO#lQPO,58}OVQPO,59QOVQPO,59QOOQO'#Cn'#CnOVQPO,59XOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO$bQPO1G.lO%ZQPO1G.sO!pQPO'#CmO%qQQO1G.qO%|QQO'#C{OOQO'#C{'#C{O&wQPO,59`OVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO'RQPO1G.zOOQO1G.z1G.zO'ZQQO'#C^O'eQQO1G.sO'{QQO1G.uOOQO1G.v1G.vO(WQPO<<GwO(_QPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(iQQO1G.lO(yQPOG22}OOQOLD(iLD(iO)QQPO,59QO)QQPO,59QO)QQPO,59X\",\n stateData: \")n~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXpQXqQXrQXsQXtQXuQXeQX~OjQXXQX~PnOZWO[WO]XO^XOpYOqYOrYOsYOtYOuYO~OW[O~OW]O~OX_O~P!pO]Yi^YipYiqYirYisYitYiuYieYi~OZWO[WOjYiXYi~P#sOpaiqairaisaitaiuaieai~OZWO[WO]XO^XOjaiXai~P$rOejOvhOwiO~OZmX[mX]mX^mXeoXpmXqmXrmXsmXtmXumXvoXwoX~OXmOekO~P!pOXuOekO~OvQXwQX~PnOZzO[zO]{O^{Ovaiwai~P$rOwiOecivci~OevO~P!pOXiaeia~P!pOZzO[zOvYiwYi~P#sOXyO~P!pORUOSUOTUOUUOWQO`SOnnO~O`UTn~\",\n goto: \"$epPPqPPPPqPPqPPPPqP!S!g!r!rPq!w#Y#]PPP#cP$[oUOQWXZ[]hijkvz{|hUOQWXZ]jkvz{|Ve[hi[ZRVgrsxR|cVf[hioTOQWXZ[]hijkvz{|R^TQlgRtlQROQVQS`WzQaXQbZUc[hiQg]Qo|QrjQskQw{RxvQd[QphRqi\",\n nodeNames: \"⚠ ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d\",\n tokenizers: [0, 1],\n topRules: {\"ColumnDefinitionExpression\":[0,1]},\n tokenPrec: 393\n})\n"],"names":[],"mappings":";;AAEa,MAAA,MAAA,GAAS,SAAS,WAAY,CAAA;AAAA,EACzC,OAAS,EAAA,EAAA;AAAA,EACT,MAAQ,EAAA,0cAAA;AAAA,EACR,SAAW,EAAA,2ZAAA;AAAA,EACX,IAAM,EAAA,4KAAA;AAAA,EACN,SAAW,EAAA,6RAAA;AAAA,EACX,OAAS,EAAA,EAAA;AAAA,EACT,YAAA,EAAc,CAAC,CAAC,CAAA;AAAA,EAChB,eAAiB,EAAA,CAAA;AAAA,EACjB,SAAW,EAAA,4gCAAA;AAAA,EACX,UAAA,EAAY,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACjB,UAAU,EAAC,4BAAA,EAA6B,CAAC,CAAA,EAAE,CAAC,CAAC,EAAA;AAAA,EAC7C,SAAW,EAAA
|
|
1
|
+
{"version":3,"file":"column-parser.js","sources":["../../../../src/column-expression-input/column-language-parser/generated/column-parser.js"],"sourcesContent":["// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"&xOVQPOOO!fQPO'#C^OVQPO'#CcQ!pQPOOO#bQPO'#CkO#gQPO'#CrOOQO'#Cy'#CyO#lQPO,58}OVQPO,59QOVQPO,59QOOQO'#Cn'#CnOVQPO,59XOVQPO,59VOVQPO'#CtOOQO,59^,59^OOQO1G.i1G.iOOQO1G.l1G.lO$bQPO1G.lO%ZQPO1G.sO!pQPO'#CmO%qQQO1G.qO%|QQO'#C{OOQO'#C{'#C{O&wQPO,59`OVQPO,59ZOVQPO,59[OVQPO7+$]OVQPO'#CuO'RQPO1G.zOOQO1G.z1G.zO'ZQQO'#C^O'eQQO1G.sO'{QQO1G.uOOQO1G.v1G.vO(WQPO<<GwO(_QPO,59aOOQO-E6s-E6sOOQO7+$f7+$fOVQPOAN=cO(iQQO1G.lO(yQPOG22}OOQOLD(iLD(iO)QQPO,59QO)QQPO,59QO)QQPO,59X\",\n stateData: \")n~OlOS~ORUOSUOTUOUUOWQO`SOnPO~OWgXZQX[QX]QX^QXpQXqQXrQXsQXtQXuQXeQX~OjQXXQX~PnOZWO[WO]XO^XOpYOqYOrYOsYOtYOuYO~OW[O~OW]O~OX_O~P!pO]Yi^YipYiqYirYisYitYiuYieYi~OZWO[WOjYiXYi~P#sOpaiqairaisaitaiuaieai~OZWO[WO]XO^XOjaiXai~P$rOejOvhOwiO~OZmX[mX]mX^mXeoXpmXqmXrmXsmXtmXumXvoXwoX~OXmOekO~P!pOXuOekO~OvQXwQX~PnOZzO[zO]{O^{Ovaiwai~P$rOwiOecivci~OevO~P!pOXiaeia~P!pOZzO[zOvYiwYi~P#sOXyO~P!pORUOSUOTUOUUOWQO`SOnnO~O`UTn~\",\n goto: \"$epPPqPPPPqPPqPPPPqP!S!g!r!rPq!w#Y#]PPP#cP$[oUOQWXZ[]hijkvz{|hUOQWXZ]jkvz{|Ve[hi[ZRVgrsxR|cVf[hioTOQWXZ[]hijkvz{|R^TQlgRtlQROQVQS`WzQaXQbZUc[hiQg]Qo|QrjQskQw{RxvQd[QphRqi\",\n nodeNames: \"⚠ ColumnDefinitionExpression Column Number String True False ParenthesizedExpression OpenBrace CloseBrace ArithmeticExpression Divide Times Plus Minus ConditionalExpression If RelationalExpression RelationalOperator AndCondition OrCondition Comma CallExpression Function ArgList\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \".^~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$jz{$o{|$t|}$y}!O%O!O!P%T!P!Q%c!Q![%h!^!_%s!_!`&Q!`!a&V!c!}&d#R#S&d#T#U&u#U#Y&d#Y#Z(Y#Z#]&d#]#^*j#^#c&d#c#d+f#d#h&d#h#i,b#i#o&d~#USl~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOu~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_OS~~$bP;=`<%l#m~$jOW~~$oOX~~$tO[~~$yO]~~%OOe~~%TO^~~%WP!Q![%Z~%`PR~!Q![%Z~%hOZ~~%mQR~!O!P%Z!Q![%h~%xPr~!_!`%{~&QOt~~&VOp~~&[Pq~!_!`&_~&dOs~P&iSnP!Q![&d!c!}&d#R#S&d#T#o&dR&zUnP!Q![&d!c!}&d#R#S&d#T#b&d#b#c'^#c#o&dR'cUnP!Q![&d!c!}&d#R#S&d#T#W&d#W#X'u#X#o&dR'|SvQnP!Q![&d!c!}&d#R#S&d#T#o&d~(_TnP!Q![&d!c!}&d#R#S&d#T#U(n#U#o&d~(sUnP!Q![&d!c!}&d#R#S&d#T#`&d#`#a)V#a#o&d~)[UnP!Q![&d!c!}&d#R#S&d#T#g&d#g#h)n#h#o&d~)sUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y*V#Y#o&d~*^SU~nP!Q![&d!c!}&d#R#S&d#T#o&d~*oUnP!Q![&d!c!}&d#R#S&d#T#Y&d#Y#Z+R#Z#o&d~+YS`~nP!Q![&d!c!}&d#R#S&d#T#o&dR+kUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g+}#g#o&dR,USwQnP!Q![&d!c!}&d#R#S&d#T#o&d~,gUnP!Q![&d!c!}&d#R#S&d#T#f&d#f#g,y#g#o&d~-OUnP!Q![&d!c!}&d#R#S&d#T#i&d#i#j-b#j#o&d~-gUnP!Q![&d!c!}&d#R#S&d#T#X&d#X#Y-y#Y#o&d~.QST~nP!Q![&d!c!}&d#R#S&d#T#o&d\",\n tokenizers: [0, 1],\n topRules: {\"ColumnDefinitionExpression\":[0,1]},\n tokenPrec: 393\n})\n"],"names":[],"mappings":";;AAEa,MAAA,MAAA,GAAS,SAAS,WAAY,CAAA;AAAA,EACzC,OAAS,EAAA,EAAA;AAAA,EACT,MAAQ,EAAA,0cAAA;AAAA,EACR,SAAW,EAAA,2ZAAA;AAAA,EACX,IAAM,EAAA,4KAAA;AAAA,EACN,SAAW,EAAA,6RAAA;AAAA,EACX,OAAS,EAAA,EAAA;AAAA,EACT,YAAA,EAAc,CAAC,CAAC,CAAA;AAAA,EAChB,eAAiB,EAAA,CAAA;AAAA,EACjB,SAAW,EAAA,4gCAAA;AAAA,EACX,UAAA,EAAY,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACjB,UAAU,EAAC,4BAAA,EAA6B,CAAC,CAAA,EAAE,CAAC,CAAC,EAAA;AAAA,EAC7C,SAAW,EAAA;AACb,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"functionDocInfo.js","sources":["../../src/column-expression-input/functionDocInfo.ts"],"sourcesContent":["import { createEl } from \"@vuu-ui/vuu-utils\";\nimport { ColumnFunctionDescriptor } from \"./column-function-descriptors\";\n\nexport const functionDocInfo = ({\n name,\n description,\n example,\n params,\n type,\n}: ColumnFunctionDescriptor) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", name);\n const paramElement = createEl(\"span\", \"param-list\", params.description);\n const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n headingElement.appendChild(paramElement);\n headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, description);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n if (example) {\n const exampleElement = createEl(\"div\", \"example-container\");\n const expressionElement = createEl(\n \"div\",\n \"example-expression\",\n example.expression,\n );\n const resultElement = createEl(\"div\", \"example-result\", example.result);\n\n exampleElement.appendChild(expressionElement);\n\n rootElement.appendChild(exampleElement);\n rootElement.appendChild(resultElement);\n }\n\n return rootElement;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA
|
|
1
|
+
{"version":3,"file":"functionDocInfo.js","sources":["../../src/column-expression-input/functionDocInfo.ts"],"sourcesContent":["import { createEl } from \"@vuu-ui/vuu-utils\";\nimport { ColumnFunctionDescriptor } from \"./column-function-descriptors\";\n\nexport const functionDocInfo = ({\n name,\n description,\n example,\n params,\n type,\n}: ColumnFunctionDescriptor) => {\n const rootElement = createEl(\"div\", \"vuuFunctionDoc\");\n const headingElement = createEl(\"div\", \"function-heading\");\n\n const nameElement = createEl(\"span\", \"function-name\", name);\n const paramElement = createEl(\"span\", \"param-list\", params.description);\n const typeElement = createEl(\"span\", \"function-type\", type);\n\n headingElement.appendChild(nameElement);\n headingElement.appendChild(paramElement);\n headingElement.appendChild(typeElement);\n\n const child2 = createEl(\"p\", undefined, description);\n\n rootElement.appendChild(headingElement);\n rootElement.appendChild(child2);\n\n if (example) {\n const exampleElement = createEl(\"div\", \"example-container\");\n const expressionElement = createEl(\n \"div\",\n \"example-expression\",\n example.expression,\n );\n const resultElement = createEl(\"div\", \"example-result\", example.result);\n\n exampleElement.appendChild(expressionElement);\n\n rootElement.appendChild(exampleElement);\n rootElement.appendChild(resultElement);\n }\n\n return rootElement;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAC9B,EAAM,MAAA,WAAA,GAAc,QAAS,CAAA,KAAA,EAAO,gBAAgB,CAAA;AACpD,EAAM,MAAA,cAAA,GAAiB,QAAS,CAAA,KAAA,EAAO,kBAAkB,CAAA;AAEzD,EAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAQ,EAAA,eAAA,EAAiB,IAAI,CAAA;AAC1D,EAAA,MAAM,YAAe,GAAA,QAAA,CAAS,MAAQ,EAAA,YAAA,EAAc,OAAO,WAAW,CAAA;AACtE,EAAA,MAAM,WAAc,GAAA,QAAA,CAAS,MAAQ,EAAA,eAAA,EAAiB,IAAI,CAAA;AAE1D,EAAA,cAAA,CAAe,YAAY,WAAW,CAAA;AACtC,EAAA,cAAA,CAAe,YAAY,YAAY,CAAA;AACvC,EAAA,cAAA,CAAe,YAAY,WAAW,CAAA;AAEtC,EAAA,MAAM,MAAS,GAAA,QAAA,CAAS,GAAK,EAAA,KAAA,CAAA,EAAW,WAAW,CAAA;AAEnD,EAAA,WAAA,CAAY,YAAY,cAAc,CAAA;AACtC,EAAA,WAAA,CAAY,YAAY,MAAM,CAAA;AAE9B,EAAA,IAAI,OAAS,EAAA;AACX,IAAM,MAAA,cAAA,GAAiB,QAAS,CAAA,KAAA,EAAO,mBAAmB,CAAA;AAC1D,IAAA,MAAM,iBAAoB,GAAA,QAAA;AAAA,MACxB,KAAA;AAAA,MACA,oBAAA;AAAA,MACA,OAAQ,CAAA;AAAA,KACV;AACA,IAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,KAAO,EAAA,gBAAA,EAAkB,QAAQ,MAAM,CAAA;AAEtE,IAAA,cAAA,CAAe,YAAY,iBAAiB,CAAA;AAE5C,IAAA,WAAA,CAAY,YAAY,cAAc,CAAA;AACtC,IAAA,WAAA,CAAY,YAAY,aAAa,CAAA;AAAA;AAGvC,EAAO,OAAA,WAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlighting.js","sources":["../../src/column-expression-input/highlighting.ts"],"sourcesContent":["import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n {\n tag: tags.attributeValue,\n color: \"var(--vuuFilterEditor-variableColor);font-weight: bold\",\n },\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n"],"names":[],"mappings":";;AAMA,MAAM,gBAAA,GAAmB,eAAe,MAAO,CAAA;AAAA,EAC7C;AAAA,IACE,KAAK,IAAK,CAAA,cAAA;AAAA,IACV,KAAO,EAAA
|
|
1
|
+
{"version":3,"file":"highlighting.js","sources":["../../src/column-expression-input/highlighting.ts"],"sourcesContent":["import {\n HighlightStyle,\n syntaxHighlighting,\n tags,\n} from \"@vuu-ui/vuu-codemirror\";\n\nconst myHighlightStyle = HighlightStyle.define([\n {\n tag: tags.attributeValue,\n color: \"var(--vuuFilterEditor-variableColor);font-weight: bold\",\n },\n { tag: tags.variableName, color: \"var(--vuuFilterEditor-variableColor)\" },\n { tag: tags.comment, color: \"green\", fontStyle: \"italic\" },\n]);\n\nexport const vuuHighlighting = syntaxHighlighting(myHighlightStyle);\n"],"names":[],"mappings":";;AAMA,MAAM,gBAAA,GAAmB,eAAe,MAAO,CAAA;AAAA,EAC7C;AAAA,IACE,KAAK,IAAK,CAAA,cAAA;AAAA,IACV,KAAO,EAAA;AAAA,GACT;AAAA,EACA,EAAE,GAAA,EAAK,IAAK,CAAA,YAAA,EAAc,OAAO,sCAAuC,EAAA;AAAA,EACxE,EAAE,GAAK,EAAA,IAAA,CAAK,SAAS,KAAO,EAAA,OAAA,EAAS,WAAW,QAAS;AAC3D,CAAC,CAAA;AAEY,MAAA,eAAA,GAAkB,mBAAmB,gBAAgB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sources":["../../src/column-expression-input/theme.ts"],"sourcesContent":["import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n border: \"solid 1px var(--salt-container-primary-borderColor)\",\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-completionLabel\": {\n color: \"var(--vuu-color-gray-50)\",\n },\n \".cm-completionMatchedText\": {\n color: \"var(--vuu-color-gray-80)\",\n fontWeight: 700,\n textDecoration: \"none\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n borderRadius: \"4px\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n \"&.cm-tooltip-autocomplete li .cm-completionDetail\": {\n color: \"var(--vuuFilterEditor-suggestion-detailColor)\",\n },\n },\n },\n { dark: false },\n);\n"],"names":[],"mappings":";;AAEO,MAAM,WAAW,UAAW,CAAA,KAAA;AAAA,EACjC;AAAA,IACE,GAAK,EAAA;AAAA,MACH,MAAQ,EAAA,qDAAA;AAAA,MACR,KAAO,EAAA,8BAAA;AAAA,MACP,eAAiB,EAAA
|
|
1
|
+
{"version":3,"file":"theme.js","sources":["../../src/column-expression-input/theme.ts"],"sourcesContent":["import { EditorView } from \"@vuu-ui/vuu-codemirror\";\n\nexport const vuuTheme = EditorView.theme(\n {\n \"&\": {\n border: \"solid 1px var(--salt-container-primary-borderColor)\",\n color: \"var(--vuuFilterEditor-color)\",\n backgroundColor: \"var(--vuuFilterEditor-background)\",\n },\n \".cm-content\": {\n caretColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-cursor\": {\n borderLeftColor: \"var(--vuuFilterEditor-cursorColor)\",\n },\n \"&.cm-focused .cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-selectionBackground, ::selection\": {\n backgroundColor: \"var(--vuuFilterEditor-selectionBackground)\",\n },\n \".cm-scroller\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n },\n \".cm-completionLabel\": {\n color: \"var(--vuu-color-gray-50)\",\n },\n \".cm-completionMatchedText\": {\n color: \"var(--vuu-color-gray-80)\",\n fontWeight: 700,\n textDecoration: \"none\",\n },\n \".cm-tooltip\": {\n background: \"var(--vuuFilterEditor-tooltipBackground)\",\n border: \"var(--vuuFilterEditor-tooltipBorder)\",\n borderRadius: \"4px\",\n boxShadow: \"var(--vuuFilterEditor-tooltipElevation)\",\n \"&.cm-tooltip-autocomplete > ul\": {\n fontFamily: \"var(--vuuFilterEditor-fontFamily)\",\n fontSize: \"var(--vuuFilterEditor-fontSize)\",\n maxHeight: \"240px\",\n },\n \"&.cm-tooltip-autocomplete > ul > li\": {\n height: \"var(--vuuFilterEditor-suggestion-height)\",\n padding: \"0 3px\",\n lineHeight: \"var(--vuuFilterEditor-suggestion-height)\",\n },\n \"&.cm-tooltip-autocomplete li[aria-selected]\": {\n background: \"var(--vuuFilterEditor-suggestion-selectedBackground)\",\n color: \"var(--vuuFilterEditor-suggestion-selectedColor)\",\n },\n \"&.cm-tooltip-autocomplete li .cm-completionDetail\": {\n color: \"var(--vuuFilterEditor-suggestion-detailColor)\",\n },\n },\n },\n { dark: false },\n);\n"],"names":[],"mappings":";;AAEO,MAAM,WAAW,UAAW,CAAA,KAAA;AAAA,EACjC;AAAA,IACE,GAAK,EAAA;AAAA,MACH,MAAQ,EAAA,qDAAA;AAAA,MACR,KAAO,EAAA,8BAAA;AAAA,MACP,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,aAAe,EAAA;AAAA,MACb,UAAY,EAAA;AAAA,KACd;AAAA,IACA,yBAA2B,EAAA;AAAA,MACzB,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,mDAAqD,EAAA;AAAA,MACnD,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,sCAAwC,EAAA;AAAA,MACtC,eAAiB,EAAA;AAAA,KACnB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,UAAY,EAAA;AAAA,KACd;AAAA,IACA,qBAAuB,EAAA;AAAA,MACrB,KAAO,EAAA;AAAA,KACT;AAAA,IACA,2BAA6B,EAAA;AAAA,MAC3B,KAAO,EAAA,0BAAA;AAAA,MACP,UAAY,EAAA,GAAA;AAAA,MACZ,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,aAAe,EAAA;AAAA,MACb,UAAY,EAAA,0CAAA;AAAA,MACZ,MAAQ,EAAA,sCAAA;AAAA,MACR,YAAc,EAAA,KAAA;AAAA,MACd,SAAW,EAAA,yCAAA;AAAA,MACX,gCAAkC,EAAA;AAAA,QAChC,UAAY,EAAA,mCAAA;AAAA,QACZ,QAAU,EAAA,iCAAA;AAAA,QACV,SAAW,EAAA;AAAA,OACb;AAAA,MACA,qCAAuC,EAAA;AAAA,QACrC,MAAQ,EAAA,0CAAA;AAAA,QACR,OAAS,EAAA,OAAA;AAAA,QACT,UAAY,EAAA;AAAA,OACd;AAAA,MACA,6CAA+C,EAAA;AAAA,QAC7C,UAAY,EAAA,sDAAA;AAAA,QACZ,KAAO,EAAA;AAAA,OACT;AAAA,MACA,mDAAqD,EAAA;AAAA,QACnD,KAAO,EAAA;AAAA;AACT;AACF,GACF;AAAA,EACA,EAAE,MAAM,KAAM;AAChB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnAutoComplete.js","sources":["../../src/column-expression-input/useColumnAutoComplete.ts"],"sourcesContent":["import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst completionDone = (onSubmit?: () => void): Completion => ({\n apply: () => {\n onSubmit?.();\n },\n label: \"Done\",\n boost: 10,\n});\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState,\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {},\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs,\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void,\n) => {\n const lastChild = getLastChild(node, context);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>,\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {},\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs,\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider],\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n switch (nodeBefore.name) {\n case \"If\": {\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider,\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n },\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state,\n ) as ColumnExpressionOperator;\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n\n const prefix =\n lastArgument?.name === \"OpenBrace\" || lastArgument?.name === \"Comma\"\n ? undefined\n : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n completionDone(onSubmit.current),\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n return {\n from: context.pos,\n options: [completionDone(onSubmit.current)],\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [completionDone(onSubmit.current)];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName },\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current,\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text,\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current,\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider],\n ) as CompletionSource;\n};\n"],"names":["makeSuggestions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useColumnAutoComplete.js","sources":["../../src/column-expression-input/useColumnAutoComplete.ts"],"sourcesContent":["import {\n booleanJoinSuggestions,\n Completion,\n CompletionContext,\n CompletionSource,\n EditorState,\n getNamedParentNode,\n getPreviousNode,\n getValue,\n SyntaxNode,\n syntaxTree,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { MutableRefObject, useCallback } from \"react\";\nimport {\n ColumnNamedTerms,\n isCompleteExpression,\n isCompleteRelationalExpression,\n} from \"./column-language-parser\";\nimport {\n ColumnExpressionOperator,\n ColumnExpressionSuggestionOptions,\n ColumnExpressionSuggestionType,\n IExpressionSuggestionProvider,\n} from \"./useColumnExpressionEditor\";\nimport { lastNamedChild } from \"./column-language-parser\";\n\nexport type ApplyCompletion = (mode?: \"add\" | \"replace\") => void;\n\nexport type Operator = \"\";\n\nconst applyPrefix = (completions: Completion[], prefix?: string) =>\n prefix\n ? completions.map((completion) => ({\n ...completion,\n apply:\n typeof completion.apply === \"function\"\n ? completion.apply\n : `${prefix}${completion.apply ?? completion.label}`,\n }))\n : completions;\n\nconst isOperator = (node?: SyntaxNode): node is SyntaxNode =>\n node === undefined\n ? false\n : [\"Times\", \"Divide\", \"Plus\", \"Minus\"].includes(node.name);\n\nconst completionDone = (onSubmit?: () => void): Completion => ({\n apply: () => {\n onSubmit?.();\n },\n label: \"Done\",\n boost: 10,\n});\n\nconst getLastChild = (node: SyntaxNode, context: CompletionContext) => {\n let { lastChild: childNode } = node;\n const { pos } = context;\n while (childNode) {\n const isBeforeCursor = childNode.from < pos;\n if (isBeforeCursor && ColumnNamedTerms.includes(childNode.name)) {\n if (childNode.name === \"ParenthesizedExpression\") {\n // extract the parenthesized expression\n const expression = childNode.firstChild?.nextSibling;\n if (expression) {\n childNode = expression;\n }\n }\n return childNode;\n } else {\n childNode = childNode.prevSibling;\n }\n }\n};\nconst getFunctionName = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"ArgList\") {\n const functionNode = node.prevSibling;\n if (functionNode) {\n return getValue(functionNode, state);\n }\n } else if (node.name === \"OpenBrace\") {\n const maybeFunction = node.parent?.prevSibling;\n if (maybeFunction?.name === \"Function\") {\n return getValue(maybeFunction, state);\n }\n }\n};\n\nconst getRelationalOperator = (node: SyntaxNode, state: EditorState) => {\n if (node.name === \"RelationalExpression\") {\n const lastNode = lastNamedChild(node);\n if (lastNode?.name === \"RelationalOperator\") {\n return getValue(lastNode, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"RelationalOperator\") {\n return getValue(prevNode, state) as ColumnExpressionOperator;\n }\n }\n};\n\nconst getColumnName = (\n node: SyntaxNode,\n state: EditorState,\n): string | undefined => {\n if (node.name === \"RelationalExpression\") {\n if (node.firstChild?.name === \"Column\") {\n return getValue(node.firstChild, state);\n }\n } else {\n const prevNode = node.prevSibling;\n if (prevNode?.name === \"Column\") {\n return getValue(prevNode, state);\n } else if (prevNode?.name === \"RelationalOperator\") {\n return getColumnName(prevNode, state);\n }\n }\n};\n\nconst makeSuggestions = async (\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {},\n) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs,\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n};\n\nconst handleConditionalExpression = (\n node: SyntaxNode,\n context: CompletionContext,\n suggestionProvider: IExpressionSuggestionProvider,\n maybeComplete?: boolean,\n onSubmit?: () => void,\n) => {\n const lastChild = getLastChild(node, context);\n switch (lastChild?.name) {\n case \"If\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \"( \",\n });\n case \"OpenBrace\":\n return makeSuggestions(context, suggestionProvider, \"expression\");\n case \"Condition\":\n return makeSuggestions(context, suggestionProvider, \"expression\", {\n prefix: \", \",\n });\n case \"CloseBrace\":\n if (maybeComplete) {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n }\n }\n};\n\nconst promptToSave = (context: CompletionContext, onSubmit: () => void) => {\n const options: Completion[] = [completionDone(onSubmit)];\n return { from: context.pos, options };\n};\n\nexport const useColumnAutoComplete = (\n suggestionProvider: IExpressionSuggestionProvider,\n onSubmit: MutableRefObject<ApplyCompletion>,\n) => {\n const makeSuggestions = useCallback(\n async (\n context: CompletionContext,\n suggestionType: ColumnExpressionSuggestionType,\n optionalArgs: ColumnExpressionSuggestionOptions = {},\n ) => {\n const options = await suggestionProvider.getSuggestions(\n suggestionType,\n optionalArgs,\n );\n const { startsWith = \"\" } = optionalArgs;\n return { from: context.pos - startsWith.length, options };\n },\n [suggestionProvider],\n );\n\n return useCallback(\n async (context: CompletionContext) => {\n const { state, pos } = context;\n const word = context.matchBefore(/\\w*/) ?? {\n from: 0,\n to: 0,\n text: undefined,\n };\n\n const tree = syntaxTree(state);\n const nodeBefore = tree.resolveInner(pos, -1);\n const text = state.doc.toString();\n const maybeComplete = isCompleteExpression(text);\n\n switch (nodeBefore.name) {\n case \"If\": {\n return makeSuggestions(context, \"expression\", { prefix: \"( \" });\n }\n case \"Condition\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n // is this the first term ?\n const prevChild = getPreviousNode(lastChild);\n if (prevChild?.name !== \"RelationalOperator\") {\n return makeSuggestions(context, \"condition-operator\", {\n columnName: getValue(lastChild, state),\n });\n }\n } else if (lastChild?.name === \"RelationalOperator\") {\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n case \"ConditionalExpression\":\n return handleConditionalExpression(\n nodeBefore,\n context,\n suggestionProvider,\n );\n case \"RelationalExpression\":\n {\n if (isCompleteRelationalExpression(nodeBefore)) {\n return {\n from: context.pos,\n options: booleanJoinSuggestions.concat({\n label: \", <truthy expression>, <falsy expression>\",\n apply: \", \",\n }),\n };\n } else {\n const operator = getRelationalOperator(nodeBefore, state);\n const columnName = getColumnName(nodeBefore, state);\n if (!operator) {\n const options = await suggestionProvider.getSuggestions(\n \"condition-operator\",\n {\n columnName,\n },\n );\n return { from: context.pos, options };\n } else {\n return makeSuggestions(context, \"expression\");\n }\n }\n }\n break;\n\n case \"RelationalOperator\":\n // we need the type of the expression on the other side of the operator\n return makeSuggestions(context, \"expression\");\n\n case \"String\":\n {\n // we only encounter a string as the right hand operand of a conditional expression\n const operator = getRelationalOperator(\n nodeBefore,\n state,\n ) as ColumnExpressionOperator;\n const columnName = getColumnName(nodeBefore, state);\n // are we inside the string or immediately after it\n const { from, to } = nodeBefore;\n if (to - from === 2 && context.pos === from + 1) {\n // We are in an empty string, i.e between two quotes\n if (columnName && operator) {\n return makeSuggestions(context, \"columnValue\", {\n columnName,\n operator,\n startsWith: word.text,\n });\n }\n } else if (to - from > 2 && context.pos === to) {\n // NOte we couls also offer AND/OR to extend the condition\n return makeSuggestions(context, \"expression\", {\n prefix: \", \",\n });\n }\n }\n break;\n\n case \"ArithmeticExpression\":\n {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n return makeSuggestions(context, \"expression\");\n } else if (isOperator(lastChild)) {\n const operator = lastChild.name as ColumnExpressionOperator;\n return makeSuggestions(context, \"column\", { operator });\n }\n }\n\n break;\n case \"OpenBrace\":\n {\n // Might be a function expression, might be parenthesized\n const functionName = getFunctionName(nodeBefore, state);\n // If not function, what came before - if it's an operator\n // we restrict to numerics\n return makeSuggestions(context, \"expression\", { functionName });\n }\n break;\n case \"ArgList\": {\n const functionName = getFunctionName(nodeBefore, state);\n const lastArgument = getLastChild(nodeBefore, context);\n\n const prefix =\n lastArgument?.name === \"OpenBrace\" || lastArgument?.name === \"Comma\"\n ? undefined\n : \",\";\n let options = await suggestionProvider.getSuggestions(\"expression\", {\n functionName,\n });\n options = prefix ? applyPrefix(options, \", \") : options;\n\n // TODO per function check for number of arguments expected\n if (\n lastArgument?.name !== \"OpenBrace\" &&\n lastArgument?.name !== \"Comma\"\n ) {\n options = [\n {\n apply: \") \",\n boost: 10,\n label: \"Done - no more arguments\",\n } as Completion,\n ].concat(options);\n }\n return { from: context.pos, options };\n }\n case \"Equal\":\n if (text.trim() === \"=\") {\n return makeSuggestions(context, \"expression\");\n }\n break;\n case \"ParenthesizedExpression\":\n case \"ColumnDefinitionExpression\":\n if (context.pos === 0) {\n return makeSuggestions(context, \"expression\");\n } else {\n const lastChild = getLastChild(nodeBefore, context);\n if (lastChild?.name === \"Column\") {\n if (maybeComplete) {\n // We come in here is the columns IS complete, too (ie has space after)\n const options: Completion[] = [\n completionDone(onSubmit.current),\n ];\n const columnName = getValue(lastChild, state);\n const columnOptions: Completion[] =\n await suggestionProvider.getSuggestions(\"operator\", {\n columnName,\n });\n\n return {\n from: context.pos,\n options: options.concat(columnOptions),\n };\n }\n } else if (lastChild?.name === \"CallExpression\") {\n if (maybeComplete) {\n return {\n from: context.pos,\n options: [completionDone(onSubmit.current)],\n };\n }\n } else if (lastChild?.name === \"ArithmeticExpression\") {\n if (maybeComplete) {\n let options: Completion[] = [completionDone(onSubmit.current)];\n\n const lastExpressionChild = getLastChild(lastChild, context);\n if (lastExpressionChild?.name === \"Column\") {\n const columnName = getValue(lastExpressionChild, state);\n // TODO need to exclude columns already included in expression\n\n const suggestions = await suggestionProvider.getSuggestions(\n \"operator\",\n { columnName },\n );\n options = options.concat(suggestions);\n }\n\n return {\n from: context.pos,\n options,\n };\n }\n } else if (lastChild?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n lastChild,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current,\n );\n }\n break;\n }\n case \"Column\":\n {\n const isPartialMatch = await suggestionProvider.isPartialMatch(\n \"expression\",\n undefined,\n word.text,\n );\n\n if (isPartialMatch) {\n return makeSuggestions(context, \"expression\", {\n startsWith: word.text,\n });\n }\n }\n break;\n case \"Comma\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return makeSuggestions(context, \"expression\");\n }\n }\n break;\n\n case \"CloseBrace\":\n {\n const parentNode = getNamedParentNode(nodeBefore);\n if (parentNode?.name === \"ConditionalExpression\") {\n return handleConditionalExpression(\n parentNode,\n context,\n suggestionProvider,\n maybeComplete,\n onSubmit.current,\n );\n } else if (parentNode?.name === \"ArgList\") {\n if (maybeComplete) {\n return promptToSave(context, onSubmit.current);\n }\n }\n }\n break;\n\n default: {\n if (nodeBefore?.prevSibling?.name === \"FilterClause\") {\n console.log(\"looks like we ight be a or|and operator\");\n }\n }\n }\n },\n [makeSuggestions, onSubmit, suggestionProvider],\n ) as CompletionSource;\n};\n"],"names":["makeSuggestions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useColumnExpressionEditor.js","sources":["../../src/column-expression-input/useColumnExpressionEditor.ts"],"sourcesContent":["import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEventHandler,\n MutableRefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { ColumnExpressionInputProps } from \"./ColumnExpressionInput\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions,\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined,\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (/*completion: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion,\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/,\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmitRef = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmitRef);\n\n const [createState, clearInput, submit] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpression = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: source,\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source);\n }\n }),\n // Enforces single line view\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr,\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmitRef.current = () => {\n submitExpression();\n };\n\n return [createState, clearInput, submitExpression];\n }, [completionFn, onChange, onSubmitExpression, source]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n const handleBlur = useCallback<FocusEventHandler>(() => {\n submit();\n }, [submit]);\n\n return { editorRef, clearInput, onBlur: handleBlur };\n};\n"],"names":["source","clearInput","createState"],"mappings":";;;;;;;;;;AAqEA,MAAM,OAAA,GAAU,CAAC,GAA8D,KAAA;AAC7E,EAAI,IAAA,GAAA,CAAI,WAAW,KAAW,CAAA,EAAA;AAC5B,IAAA,MAAM,MAAM,wBAAwB,CAAA
|
|
1
|
+
{"version":3,"file":"useColumnExpressionEditor.js","sources":["../../src/column-expression-input/useColumnExpressionEditor.ts"],"sourcesContent":["import {\n autocompletion,\n Completion,\n defaultKeymap,\n EditorState,\n EditorView,\n ensureSyntaxTree,\n keymap,\n minimalSetup,\n startCompletion,\n} from \"@vuu-ui/vuu-codemirror\";\nimport { createEl } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEventHandler,\n MutableRefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport { columnExpressionLanguageSupport } from \"./column-language-parser\";\nimport {\n ColumnDefinitionExpression,\n walkTree,\n} from \"./column-language-parser/ColumnExpressionTreeWalker\";\nimport { ColumnExpressionInputProps } from \"./ColumnExpressionInput\";\nimport { vuuHighlighting } from \"./highlighting\";\nimport { vuuTheme } from \"./theme\";\nimport {\n ApplyCompletion,\n useColumnAutoComplete,\n} from \"./useColumnAutoComplete\";\n\nexport type ColumnExpressionOperator = \"Times\" | \"Divide\" | \"Minus\" | \"Plus\";\n\nexport type ColumnExpressionSuggestionType =\n | \"column\"\n | \"columnValue\"\n | \"expression\"\n | \"condition-operator\"\n | \"operator\"\n | \"relational-operator\";\n\nexport type ColumnExpressionSuggestionOptions = {\n columnName?: string;\n functionName?: string;\n operator?: ColumnExpressionOperator;\n prefix?: string;\n startsWith?: string;\n selection?: string[];\n};\n\n// TODO move this somewhere neutral\nexport interface IExpressionSuggestionProvider {\n getSuggestions: (\n valueType: ColumnExpressionSuggestionType,\n options?: ColumnExpressionSuggestionOptions,\n ) => Promise<Completion[]>;\n isPartialMatch: (\n valueType: ColumnExpressionSuggestionType,\n columnName?: string,\n text?: string | undefined,\n ) => Promise<boolean>;\n}\n\nexport interface ExpressionSuggestionConsumer {\n suggestionProvider: IExpressionSuggestionProvider;\n}\n\nconst getView = (ref: MutableRefObject<EditorView | undefined>): EditorView => {\n if (ref.current == undefined) {\n throw Error(\"EditorView not defined\");\n }\n return ref.current;\n};\n\nconst getOptionClass = (/*completion: Completion*/) => {\n return \"vuuSuggestion\";\n};\n\nconst noop = () => console.log(\"noooop\");\n\nconst hasExpressionType = (\n completion: Completion,\n): completion is Completion & { expressionType: string } =>\n \"expressionType\" in completion;\n\nconst injectOptionContent = (\n completion: Completion /*, state: EditorState*/,\n) => {\n if (hasExpressionType(completion)) {\n const div = createEl(\"div\", \"expression-type-container\");\n const span = createEl(\"span\", \"expression-type\", completion.expressionType);\n div.appendChild(span);\n return div;\n } else {\n return null;\n }\n};\n\nexport const useColumnExpressionEditor = ({\n onChange,\n onSubmitExpression,\n source,\n suggestionProvider,\n}: ColumnExpressionInputProps) => {\n const editorRef = useRef<HTMLDivElement>(null);\n const onSubmitRef = useRef<ApplyCompletion>(noop);\n const viewRef = useRef<EditorView>();\n const completionFn = useColumnAutoComplete(suggestionProvider, onSubmitRef);\n\n const [createState, clearInput, submit] = useMemo(() => {\n const parseExpression = ():\n | [string, ColumnDefinitionExpression]\n | [\"\", undefined] => {\n const view = getView(viewRef);\n const source = view.state.doc.toString();\n const tree = ensureSyntaxTree(view.state, view.state.doc.length, 5000);\n if (tree) {\n const expression = walkTree(tree, source);\n return [source, expression];\n } else {\n return [\"\", undefined];\n }\n };\n\n const clearInput = () => {\n getView(viewRef).setState(createState());\n };\n\n const submitExpression = () => {\n const [source, expression] = parseExpression();\n onSubmitExpression?.(source, expression);\n };\n\n const showSuggestions = (key: string) => {\n return keymap.of([\n {\n key,\n run() {\n startCompletion(getView(viewRef));\n return true;\n },\n },\n ]);\n };\n\n const createState = (): EditorState =>\n EditorState.create({\n doc: source,\n extensions: [\n minimalSetup,\n autocompletion({\n addToOptions: [\n {\n render: injectOptionContent,\n position: 70,\n },\n ],\n override: [completionFn],\n optionClass: getOptionClass,\n }),\n columnExpressionLanguageSupport(),\n keymap.of(defaultKeymap),\n showSuggestions(\"ArrowDown\"),\n EditorView.updateListener.of((v) => {\n const view = getView(viewRef);\n if (v.docChanged) {\n startCompletion(view);\n const source = view.state.doc.toString();\n onChange?.(source);\n }\n }),\n // Enforces single line view\n EditorState.transactionFilter.of((tr) =>\n tr.newDoc.lines > 1 ? [] : tr,\n ),\n vuuTheme,\n vuuHighlighting,\n ],\n });\n\n onSubmitRef.current = () => {\n submitExpression();\n };\n\n return [createState, clearInput, submitExpression];\n }, [completionFn, onChange, onSubmitExpression, source]);\n\n useEffect(() => {\n if (!editorRef.current) {\n throw Error(\"editor not in dom\");\n }\n\n viewRef.current = new EditorView({\n state: createState(),\n parent: editorRef.current,\n });\n\n return () => {\n viewRef.current?.destroy();\n };\n }, [completionFn, createState]);\n\n const handleBlur = useCallback<FocusEventHandler>(() => {\n submit();\n }, [submit]);\n\n return { editorRef, clearInput, onBlur: handleBlur };\n};\n"],"names":["source","clearInput","createState"],"mappings":"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"}
|