From 490925b1b55ab85f919044ba0bff640fd8694417 Mon Sep 17 00:00:00 2001
From: Dalton <daltojohnso@users.noreply.github.com>
Date: Tue, 11 Oct 2022 10:00:25 -0400
Subject: [PATCH] Move some parameter utils to `metabase-lib` (#25863)

* Move parameter target utils to metabase-lib

* Move parameter-type utils to metabase-lib

* Move parameter constants to metabase-lib

* Use Parameter interface, not UiParameter type, in operator utils

* Move operator utils to metabase-lib

* Move filter utils to metabase-lib
---
 .../lib}/parameters/constants.ts              |  0
 .../lib}/parameters/utils/filters.js          |  7 +++-
 .../parameters/utils/filters.unit.spec.js     |  0
 .../lib}/parameters/utils/operators.ts        | 15 +++++---
 .../parameters/utils/operators.unit.spec.ts   |  0
 .../lib/parameters/utils/parameter-type.ts    | 36 ++++++++++++++++++
 .../utils/parameter-type.unit.spec.js         |  0
 .../lib}/parameters/utils/targets.ts          |  0
 .../parameters/utils/targets.unit.spec.ts     |  0
 .../metabase-lib/lib/queries/utils/card.js    |  2 +-
 .../DateRelativeWidget/DateRelativeWidget.tsx |  2 +-
 .../DashCardCardParameterMapper.jsx           |  4 +-
 frontend/src/metabase/dashboard/utils.js      |  2 +-
 frontend/src/metabase/lib/click-behavior.js   |  4 +-
 .../FormattedParameterValue.tsx               |  2 +-
 .../components/ParameterValueWidget.jsx       | 16 ++++----
 .../ParameterFieldWidget.jsx                  |  2 +-
 .../src/metabase/parameters/utils/cards.ts    |  8 ++--
 .../parameters/utils/dashboard-options.js     |  4 +-
 .../metabase/parameters/utils/dashboards.ts   |  8 ++--
 .../parameters/utils/date-formatting.ts       |  2 +-
 .../metabase/parameters/utils/formatting.ts   |  3 +-
 .../parameters/utils/linked-filters.js        |  4 +-
 .../parameters/utils/mapping-options.js       |  3 +-
 .../src/metabase/parameters/utils/mbql.js     |  9 +++--
 .../parameters/utils/parameter-type.ts        | 38 +------------------
 .../parameters/utils/parameter-values.js      |  2 +-
 .../parameters/utils/template-tag-options.js  |  9 +++--
 .../utils/template-tag-options.unit.spec.js   |  2 +-
 frontend/src/metabase/parameters/utils/ui.ts  |  4 +-
 30 files changed, 101 insertions(+), 87 deletions(-)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/constants.ts (100%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/filters.js (91%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/filters.unit.spec.js (100%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/operators.ts (82%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/operators.unit.spec.ts (100%)
 create mode 100644 frontend/src/metabase-lib/lib/parameters/utils/parameter-type.ts
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/parameter-type.unit.spec.js (100%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/targets.ts (100%)
 rename frontend/src/{metabase => metabase-lib/lib}/parameters/utils/targets.unit.spec.ts (100%)

diff --git a/frontend/src/metabase/parameters/constants.ts b/frontend/src/metabase-lib/lib/parameters/constants.ts
similarity index 100%
rename from frontend/src/metabase/parameters/constants.ts
rename to frontend/src/metabase-lib/lib/parameters/constants.ts
diff --git a/frontend/src/metabase/parameters/utils/filters.js b/frontend/src/metabase-lib/lib/parameters/utils/filters.js
similarity index 91%
rename from frontend/src/metabase/parameters/utils/filters.js
rename to frontend/src/metabase-lib/lib/parameters/utils/filters.js
index f4fdd857748..a49903fd6d2 100644
--- a/frontend/src/metabase/parameters/utils/filters.js
+++ b/frontend/src/metabase-lib/lib/parameters/utils/filters.js
@@ -1,6 +1,9 @@
 import TemplateTagVariable from "metabase-lib/lib/variables/TemplateTagVariable";
-import { getParameterType, getParameterSubType } from "./parameter-type";
-import { getParameterOperatorName } from "./operators";
+import {
+  getParameterType,
+  getParameterSubType,
+} from "metabase-lib/lib/parameters/utils/parameter-type";
+import { getParameterOperatorName } from "metabase-lib/lib/parameters/utils/operators";
 
 export function fieldFilterForParameter(parameter) {
   const type = getParameterType(parameter);
diff --git a/frontend/src/metabase/parameters/utils/filters.unit.spec.js b/frontend/src/metabase-lib/lib/parameters/utils/filters.unit.spec.js
similarity index 100%
rename from frontend/src/metabase/parameters/utils/filters.unit.spec.js
rename to frontend/src/metabase-lib/lib/parameters/utils/filters.unit.spec.js
diff --git a/frontend/src/metabase/parameters/utils/operators.ts b/frontend/src/metabase-lib/lib/parameters/utils/operators.ts
similarity index 82%
rename from frontend/src/metabase/parameters/utils/operators.ts
rename to frontend/src/metabase-lib/lib/parameters/utils/operators.ts
index 5ecf1a147a0..082fb883ed9 100644
--- a/frontend/src/metabase/parameters/utils/operators.ts
+++ b/frontend/src/metabase-lib/lib/parameters/utils/operators.ts
@@ -1,12 +1,15 @@
-import { UiParameter } from "metabase/parameters/types";
+import { Parameter } from "metabase-types/types/Parameter";
 
 import {
   doesOperatorExist,
   getOperatorByTypeAndName,
 } from "metabase-lib/lib/operators/utils";
 import { NUMBER, STRING, PRIMARY_KEY } from "metabase-lib/lib/types/constants";
-import { PARAMETER_OPERATOR_TYPES } from "../constants";
-import { getParameterType, getParameterSubType } from "./parameter-type";
+import {
+  getParameterType,
+  getParameterSubType,
+} from "metabase-lib/lib/parameters/utils/parameter-type";
+import { PARAMETER_OPERATOR_TYPES } from "metabase-lib/lib/parameters/constants";
 
 type OperatorType = "date" | "number" | "string";
 
@@ -28,7 +31,7 @@ export function getParameterOperatorName(maybeOperatorName?: string) {
   return doesOperatorExist(maybeOperatorName) ? maybeOperatorName : "=";
 }
 
-export function deriveFieldOperatorFromParameter(parameter: UiParameter) {
+export function deriveFieldOperatorFromParameter(parameter: Parameter) {
   const type = getParameterType(parameter);
   const subtype = getParameterSubType(parameter);
   const operatorType = getParameterOperatorType(type);
@@ -71,7 +74,7 @@ export function buildTypedOperatorOptions(
   });
 }
 
-export function getNumberParameterArity(parameter: UiParameter) {
+export function getNumberParameterArity(parameter: Parameter) {
   switch (parameter.type) {
     case "number/=":
     case "number/!=":
@@ -83,7 +86,7 @@ export function getNumberParameterArity(parameter: UiParameter) {
   }
 }
 
-export function getStringParameterArity(parameter: UiParameter) {
+export function getStringParameterArity(parameter: Parameter) {
   switch (parameter.type) {
     case "string/=":
     case "string/!=":
diff --git a/frontend/src/metabase/parameters/utils/operators.unit.spec.ts b/frontend/src/metabase-lib/lib/parameters/utils/operators.unit.spec.ts
similarity index 100%
rename from frontend/src/metabase/parameters/utils/operators.unit.spec.ts
rename to frontend/src/metabase-lib/lib/parameters/utils/operators.unit.spec.ts
diff --git a/frontend/src/metabase-lib/lib/parameters/utils/parameter-type.ts b/frontend/src/metabase-lib/lib/parameters/utils/parameter-type.ts
new file mode 100644
index 00000000000..66e5f462dc6
--- /dev/null
+++ b/frontend/src/metabase-lib/lib/parameters/utils/parameter-type.ts
@@ -0,0 +1,36 @@
+import _ from "underscore";
+import { Parameter } from "metabase-types/types/Parameter";
+
+export function getParameterType(parameter: Parameter | string) {
+  return typeof parameter === "string"
+    ? splitType(parameter)[0]
+    : parameter.sectionId || splitType(parameter)[0];
+}
+
+export function getParameterSubType(parameter: Parameter) {
+  const [, subtype] = splitType(parameter);
+  return subtype;
+}
+
+function splitType(parameterOrType: Parameter | string) {
+  const parameterType = _.isString(parameterOrType)
+    ? parameterOrType
+    : parameterOrType?.type || "";
+
+  return parameterType.split("/");
+}
+
+export function isDateParameter(parameter: Parameter | string) {
+  const type = getParameterType(parameter);
+  return type === "date";
+}
+
+export function isNumberParameter(parameter: Parameter) {
+  const type = getParameterType(parameter);
+  return type === "number";
+}
+
+export function isStringParameter(parameter: Parameter) {
+  const type = getParameterType(parameter);
+  return type === "string";
+}
diff --git a/frontend/src/metabase/parameters/utils/parameter-type.unit.spec.js b/frontend/src/metabase-lib/lib/parameters/utils/parameter-type.unit.spec.js
similarity index 100%
rename from frontend/src/metabase/parameters/utils/parameter-type.unit.spec.js
rename to frontend/src/metabase-lib/lib/parameters/utils/parameter-type.unit.spec.js
diff --git a/frontend/src/metabase/parameters/utils/targets.ts b/frontend/src/metabase-lib/lib/parameters/utils/targets.ts
similarity index 100%
rename from frontend/src/metabase/parameters/utils/targets.ts
rename to frontend/src/metabase-lib/lib/parameters/utils/targets.ts
diff --git a/frontend/src/metabase/parameters/utils/targets.unit.spec.ts b/frontend/src/metabase-lib/lib/parameters/utils/targets.unit.spec.ts
similarity index 100%
rename from frontend/src/metabase/parameters/utils/targets.unit.spec.ts
rename to frontend/src/metabase-lib/lib/parameters/utils/targets.unit.spec.ts
diff --git a/frontend/src/metabase-lib/lib/queries/utils/card.js b/frontend/src/metabase-lib/lib/queries/utils/card.js
index fce09619917..8328ccc2321 100644
--- a/frontend/src/metabase-lib/lib/queries/utils/card.js
+++ b/frontend/src/metabase-lib/lib/queries/utils/card.js
@@ -2,9 +2,9 @@ import _ from "underscore";
 import { updateIn } from "icepick";
 
 import { normalizeParameterValue } from "metabase/parameters/utils/parameter-values";
-import { deriveFieldOperatorFromParameter } from "metabase/parameters/utils/operators";
 
 import Utils from "metabase/lib/utils";
+import { deriveFieldOperatorFromParameter } from "metabase-lib/lib/parameters/utils/operators";
 import * as Q_DEPRECATED from "metabase-lib/lib/queries/utils"; // legacy
 
 export const STRUCTURED_QUERY_TEMPLATE = {
diff --git a/frontend/src/metabase/components/DateRelativeWidget/DateRelativeWidget.tsx b/frontend/src/metabase/components/DateRelativeWidget/DateRelativeWidget.tsx
index 034ca00bb52..219f375f04d 100644
--- a/frontend/src/metabase/components/DateRelativeWidget/DateRelativeWidget.tsx
+++ b/frontend/src/metabase/components/DateRelativeWidget/DateRelativeWidget.tsx
@@ -3,7 +3,7 @@ import { t } from "ttag";
 import cx from "classnames";
 import _ from "underscore";
 
-import { DATE_MBQL_FILTER_MAPPING } from "metabase/parameters/constants";
+import { DATE_MBQL_FILTER_MAPPING } from "metabase-lib/lib/parameters/constants";
 
 type Shortcut = {
   name: string;
diff --git a/frontend/src/metabase/dashboard/components/DashCardCardParameterMapper.jsx b/frontend/src/metabase/dashboard/components/DashCardCardParameterMapper.jsx
index 95b81bc6ebf..97694da2be1 100644
--- a/frontend/src/metabase/dashboard/components/DashCardCardParameterMapper.jsx
+++ b/frontend/src/metabase/dashboard/components/DashCardCardParameterMapper.jsx
@@ -9,8 +9,6 @@ import Icon from "metabase/components/Icon";
 import Tooltip from "metabase/components/Tooltip";
 import TippyPopover from "metabase/components/Popover/TippyPopover";
 import ParameterTargetList from "metabase/parameters/components/ParameterTargetList";
-import { isVariableTarget } from "metabase/parameters/utils/targets";
-import { isDateParameter } from "metabase/parameters/utils/parameter-type";
 import { getMetadata } from "metabase/selectors/metadata";
 import {
   getNativeDashCardEmptyMappingText,
@@ -18,6 +16,8 @@ import {
   isVirtualDashCard,
   showVirtualDashCardInfoText,
 } from "metabase/dashboard/utils";
+import { isDateParameter } from "metabase-lib/lib/parameters/utils/parameter-type";
+import { isVariableTarget } from "metabase-lib/lib/parameters/utils/targets";
 import Question from "metabase-lib/lib/Question";
 
 import {
diff --git a/frontend/src/metabase/dashboard/utils.js b/frontend/src/metabase/dashboard/utils.js
index 017841da17a..b2f6e4c5b8d 100644
--- a/frontend/src/metabase/dashboard/utils.js
+++ b/frontend/src/metabase/dashboard/utils.js
@@ -5,7 +5,7 @@ import {
   isDateParameter,
   isNumberParameter,
   isStringParameter,
-} from "metabase/parameters/utils/parameter-type";
+} from "metabase-lib/lib/parameters/utils/parameter-type";
 import { isNative } from "metabase-lib/lib/queries/utils";
 
 export function syncParametersAndEmbeddingParams(before, after) {
diff --git a/frontend/src/metabase/lib/click-behavior.js b/frontend/src/metabase/lib/click-behavior.js
index f76ac2c5d4e..ec5dabb0ddc 100644
--- a/frontend/src/metabase/lib/click-behavior.js
+++ b/frontend/src/metabase/lib/click-behavior.js
@@ -4,11 +4,11 @@ import { t, ngettext, msgid } from "ttag";
 
 import { parseTimestamp } from "metabase/lib/time";
 import { formatDateTimeForParameter } from "metabase/lib/formatting/date";
+import { isValidImplicitActionClickBehavior } from "metabase/writeback/utils";
 import {
   dimensionFilterForParameter,
   variableFilterForParameter,
-} from "metabase/parameters/utils/filters";
-import { isValidImplicitActionClickBehavior } from "metabase/writeback/utils";
+} from "metabase-lib/lib/parameters/utils/filters";
 import { isa, isDate } from "metabase-lib/lib/types/utils/isa";
 import { TYPE } from "metabase-lib/lib/types/constants";
 import Question from "metabase-lib/lib/Question";
diff --git a/frontend/src/metabase/parameters/components/FormattedParameterValue/FormattedParameterValue.tsx b/frontend/src/metabase/parameters/components/FormattedParameterValue/FormattedParameterValue.tsx
index 87332d3637d..5b666ddc14d 100644
--- a/frontend/src/metabase/parameters/components/FormattedParameterValue/FormattedParameterValue.tsx
+++ b/frontend/src/metabase/parameters/components/FormattedParameterValue/FormattedParameterValue.tsx
@@ -1,9 +1,9 @@
 import React from "react";
 
 import { formatParameterValue } from "metabase/parameters/utils/formatting";
-import { isDateParameter } from "metabase/parameters/utils/parameter-type";
 import { UiParameter, FieldFilterUiParameter } from "metabase/parameters/types";
 import ParameterFieldWidgetValue from "metabase/parameters/components/widgets/ParameterFieldWidget/ParameterFieldWidgetValue/ParameterFieldWidgetValue";
+import { isDateParameter } from "metabase-lib/lib/parameters/utils/parameter-type";
 
 type FormattedParameterValueProps = {
   parameter: UiParameter;
diff --git a/frontend/src/metabase/parameters/components/ParameterValueWidget.jsx b/frontend/src/metabase/parameters/components/ParameterValueWidget.jsx
index 57a355ce7e0..d7716aa0388 100644
--- a/frontend/src/metabase/parameters/components/ParameterValueWidget.jsx
+++ b/frontend/src/metabase/parameters/components/ParameterValueWidget.jsx
@@ -8,14 +8,6 @@ import {
   getParameterIconName,
   getParameterWidgetTitle,
 } from "metabase/parameters/utils/ui";
-import {
-  isDateParameter,
-  isNumberParameter,
-} from "metabase/parameters/utils/parameter-type";
-import {
-  getNumberParameterArity,
-  getStringParameterArity,
-} from "metabase/parameters/utils/operators";
 
 import PopoverWithTrigger from "metabase/components/PopoverWithTrigger";
 import Icon from "metabase/components/Icon";
@@ -30,6 +22,14 @@ import WidgetStatusIcon from "metabase/parameters/components/WidgetStatusIcon";
 import FormattedParameterValue from "metabase/parameters/components/FormattedParameterValue";
 import NumberInputWidget from "metabase/parameters/components/widgets/NumberInputWidget";
 import StringInputWidget from "metabase/parameters/components/widgets/StringInputWidget";
+import {
+  getNumberParameterArity,
+  getStringParameterArity,
+} from "metabase-lib/lib/parameters/utils/operators";
+import {
+  isDateParameter,
+  isNumberParameter,
+} from "metabase-lib/lib/parameters/utils/parameter-type";
 
 import ParameterFieldWidget from "./widgets/ParameterFieldWidget/ParameterFieldWidget";
 import S from "./ParameterWidget.css";
diff --git a/frontend/src/metabase/parameters/components/widgets/ParameterFieldWidget/ParameterFieldWidget.jsx b/frontend/src/metabase/parameters/components/widgets/ParameterFieldWidget/ParameterFieldWidget.jsx
index 28d7dc4f931..9f17e85a7af 100644
--- a/frontend/src/metabase/parameters/components/widgets/ParameterFieldWidget/ParameterFieldWidget.jsx
+++ b/frontend/src/metabase/parameters/components/widgets/ParameterFieldWidget/ParameterFieldWidget.jsx
@@ -5,12 +5,12 @@ import { t } from "ttag";
 import _ from "underscore";
 
 import FieldValuesWidget from "metabase/components/FieldValuesWidget";
-import { deriveFieldOperatorFromParameter } from "metabase/parameters/utils/operators";
 import {
   WidgetRoot,
   Footer,
   UpdateButton,
 } from "metabase/parameters/components/widgets/Widget.styled";
+import { deriveFieldOperatorFromParameter } from "metabase-lib/lib/parameters/utils/operators";
 import {
   getFilterArgumentFormatOptions,
   isEqualsOperator,
diff --git a/frontend/src/metabase/parameters/utils/cards.ts b/frontend/src/metabase/parameters/utils/cards.ts
index 0461c73dae3..fdd470051fb 100644
--- a/frontend/src/metabase/parameters/utils/cards.ts
+++ b/frontend/src/metabase/parameters/utils/cards.ts
@@ -1,9 +1,5 @@
 import _ from "underscore";
 
-import {
-  getParameterTargetField,
-  getTemplateTagFromTarget,
-} from "metabase/parameters/utils/targets";
 import {
   getValuePopulatedParameters,
   hasParameterValue,
@@ -12,6 +8,10 @@ import { ParameterWithTarget, UiParameter } from "metabase/parameters/types";
 import { Parameter, ParameterTarget } from "metabase-types/types/Parameter";
 import { Card } from "metabase-types/types/Card";
 import { TemplateTag } from "metabase-types/types/Query";
+import {
+  getParameterTargetField,
+  getTemplateTagFromTarget,
+} from "metabase-lib/lib/parameters/utils/targets";
 import Question from "metabase-lib/lib/Question";
 import Metadata from "metabase-lib/lib/metadata/Metadata";
 
diff --git a/frontend/src/metabase/parameters/utils/dashboard-options.js b/frontend/src/metabase/parameters/utils/dashboard-options.js
index 77d1d75ebe2..504dd37c0c3 100644
--- a/frontend/src/metabase/parameters/utils/dashboard-options.js
+++ b/frontend/src/metabase/parameters/utils/dashboard-options.js
@@ -1,6 +1,6 @@
 import { t } from "ttag";
-import { ID_OPTION } from "../constants";
-import { buildTypedOperatorOptions } from "./operators";
+import { ID_OPTION } from "metabase-lib/lib/parameters/constants";
+import { buildTypedOperatorOptions } from "metabase-lib/lib/parameters/utils/operators";
 
 export function getDashboardParameterSections() {
   return [
diff --git a/frontend/src/metabase/parameters/utils/dashboards.ts b/frontend/src/metabase/parameters/utils/dashboards.ts
index 2da098659ef..391e4412f84 100644
--- a/frontend/src/metabase/parameters/utils/dashboards.ts
+++ b/frontend/src/metabase/parameters/utils/dashboards.ts
@@ -1,10 +1,6 @@
 import _ from "underscore";
 
 import { generateParameterId } from "metabase/parameters/utils/parameter-id";
-import {
-  getParameterTargetField,
-  isVariableTarget,
-} from "metabase/parameters/utils/targets";
 import { isFieldFilterParameter } from "metabase/parameters/utils/parameter-type";
 import { slugify } from "metabase/lib/formatting";
 import {
@@ -24,6 +20,10 @@ import {
   DashboardOrderedCard,
 } from "metabase-types/api";
 import { SavedCard } from "metabase-types/types/Card";
+import {
+  getParameterTargetField,
+  isVariableTarget,
+} from "metabase-lib/lib/parameters/utils/targets";
 import Question from "metabase-lib/lib/Question";
 import Metadata from "metabase-lib/lib/metadata/Metadata";
 import Field from "metabase-lib/lib/metadata/Field";
diff --git a/frontend/src/metabase/parameters/utils/date-formatting.ts b/frontend/src/metabase/parameters/utils/date-formatting.ts
index a714ffab56e..2c96e2fde4c 100644
--- a/frontend/src/metabase/parameters/utils/date-formatting.ts
+++ b/frontend/src/metabase/parameters/utils/date-formatting.ts
@@ -2,10 +2,10 @@ import { t } from "ttag";
 import _ from "underscore";
 import moment from "moment-timezone";
 
-import { DATE_MBQL_FILTER_MAPPING } from "metabase/parameters/constants";
 import { dateParameterValueToMBQL } from "metabase/parameters/utils/mbql";
 import { DATE_OPERATORS } from "metabase/query_builder/components/filters/pickers/DatePicker/DatePicker";
 import { EXCLUDE_OPERATORS } from "metabase/query_builder/components/filters/pickers/DatePicker/ExcludeDatePicker";
+import { DATE_MBQL_FILTER_MAPPING } from "metabase-lib/lib/parameters/constants";
 import {
   generateTimeFilterValuesDescriptions,
   getRelativeDatetimeInterval,
diff --git a/frontend/src/metabase/parameters/utils/formatting.ts b/frontend/src/metabase/parameters/utils/formatting.ts
index d09ba988e6e..a16ff249751 100644
--- a/frontend/src/metabase/parameters/utils/formatting.ts
+++ b/frontend/src/metabase/parameters/utils/formatting.ts
@@ -1,9 +1,10 @@
 import { ngettext, msgid } from "ttag";
 
 import { formatValue } from "metabase/lib/formatting";
+import { getParameterType } from "metabase-lib/lib/parameters/utils/parameter-type";
 
 import { UiParameter } from "../types";
-import { getParameterType, isFieldFilterParameter } from "./parameter-type";
+import { isFieldFilterParameter } from "./parameter-type";
 import { formatDateValue } from "./date-formatting";
 
 function inferValueType(parameter: UiParameter) {
diff --git a/frontend/src/metabase/parameters/utils/linked-filters.js b/frontend/src/metabase/parameters/utils/linked-filters.js
index e3482340045..fcf817b5d19 100644
--- a/frontend/src/metabase/parameters/utils/linked-filters.js
+++ b/frontend/src/metabase/parameters/utils/linked-filters.js
@@ -1,8 +1,8 @@
 import {
   TYPE_SUPPORTS_LINKED_FILTERS,
   FIELD_FILTER_PARAMETER_TYPES,
-} from "metabase/parameters/constants";
-import { getParameterType } from "metabase/parameters/utils/parameter-type";
+} from "metabase-lib/lib/parameters/constants";
+import { getParameterType } from "metabase-lib/lib/parameters/utils/parameter-type";
 
 export function canUseLinkedFilters(parameter) {
   const type = getParameterType(parameter);
diff --git a/frontend/src/metabase/parameters/utils/mapping-options.js b/frontend/src/metabase/parameters/utils/mapping-options.js
index 96417c70734..cb756ff3365 100644
--- a/frontend/src/metabase/parameters/utils/mapping-options.js
+++ b/frontend/src/metabase/parameters/utils/mapping-options.js
@@ -2,12 +2,11 @@ import { tag_names } from "cljs/metabase.shared.parameters.parameters";
 import { isActionCard } from "metabase/writeback/utils";
 import Question from "metabase-lib/lib/Question";
 import { ExpressionDimension } from "metabase-lib/lib/Dimension";
-
 import {
   dimensionFilterForParameter,
   getTagOperatorFilterForParameter,
   variableFilterForParameter,
-} from "./filters";
+} from "metabase-lib/lib/parameters/utils/filters";
 
 function buildStructuredQuerySectionOptions(section) {
   return section.items.map(({ dimension }) => ({
diff --git a/frontend/src/metabase/parameters/utils/mbql.js b/frontend/src/metabase/parameters/utils/mbql.js
index 2155af0f805..a6a124f18e7 100644
--- a/frontend/src/metabase/parameters/utils/mbql.js
+++ b/frontend/src/metabase/parameters/utils/mbql.js
@@ -10,9 +10,12 @@ import Dimension, {
   FieldDimension,
   TemplateTagDimension,
 } from "metabase-lib/lib/Dimension";
-import { getParameterSubType, isDateParameter } from "./parameter-type";
-import { getParameterOperatorName } from "./operators";
-import { isDimensionTarget } from "./targets";
+import { isDimensionTarget } from "metabase-lib/lib/parameters/utils/targets";
+import {
+  getParameterSubType,
+  isDateParameter,
+} from "metabase-lib/lib/parameters/utils/parameter-type";
+import { getParameterOperatorName } from "metabase-lib/lib/parameters/utils/operators";
 import { hasParameterValue } from "./parameter-values";
 
 const withTemporalUnit = (fieldRef, unit) => {
diff --git a/frontend/src/metabase/parameters/utils/parameter-type.ts b/frontend/src/metabase/parameters/utils/parameter-type.ts
index 372f754505b..599e485f1f2 100644
--- a/frontend/src/metabase/parameters/utils/parameter-type.ts
+++ b/frontend/src/metabase/parameters/utils/parameter-type.ts
@@ -1,42 +1,8 @@
 import _ from "underscore";
-import { FIELD_FILTER_PARAMETER_TYPES } from "metabase/parameters/constants";
-
 import { FieldFilterUiParameter } from "metabase/parameters/types";
 import { Parameter } from "metabase-types/types/Parameter";
-
-export function getParameterType(parameter: Parameter | string) {
-  return typeof parameter === "string"
-    ? splitType(parameter)[0]
-    : parameter.sectionId || splitType(parameter)[0];
-}
-
-export function getParameterSubType(parameter: Parameter) {
-  const [, subtype] = splitType(parameter);
-  return subtype;
-}
-
-function splitType(parameterOrType: Parameter | string) {
-  const parameterType = _.isString(parameterOrType)
-    ? parameterOrType
-    : parameterOrType?.type || "";
-
-  return parameterType.split("/");
-}
-
-export function isDateParameter(parameter: Parameter | string) {
-  const type = getParameterType(parameter);
-  return type === "date";
-}
-
-export function isNumberParameter(parameter: Parameter) {
-  const type = getParameterType(parameter);
-  return type === "number";
-}
-
-export function isStringParameter(parameter: Parameter) {
-  const type = getParameterType(parameter);
-  return type === "string";
-}
+import { FIELD_FILTER_PARAMETER_TYPES } from "metabase-lib/lib/parameters/constants";
+import { getParameterType } from "metabase-lib/lib/parameters/utils/parameter-type";
 
 export function isFieldFilterParameter(
   parameter: Parameter,
diff --git a/frontend/src/metabase/parameters/utils/parameter-values.js b/frontend/src/metabase/parameters/utils/parameter-values.js
index 5fc888df945..f42cd4f8556 100644
--- a/frontend/src/metabase/parameters/utils/parameter-values.js
+++ b/frontend/src/metabase/parameters/utils/parameter-values.js
@@ -1,4 +1,4 @@
-import { getParameterType } from "./parameter-type";
+import { getParameterType } from "metabase-lib/lib/parameters/utils/parameter-type";
 
 export function getValuePopulatedParameters(parameters, parameterValues) {
   return parameterValues
diff --git a/frontend/src/metabase/parameters/utils/template-tag-options.js b/frontend/src/metabase/parameters/utils/template-tag-options.js
index 86a43c46408..dc2f90e5af5 100644
--- a/frontend/src/metabase/parameters/utils/template-tag-options.js
+++ b/frontend/src/metabase/parameters/utils/template-tag-options.js
@@ -4,9 +4,12 @@ import {
   OPTIONS_WITH_OPERATOR_SUBTYPES,
   PARAMETER_OPERATOR_TYPES,
   ID_OPTION,
-} from "../constants";
-import { getOperatorDisplayName, buildTypedOperatorOptions } from "./operators";
-import { fieldFilterForParameter } from "./filters";
+} from "metabase-lib/lib/parameters/constants";
+import {
+  getOperatorDisplayName,
+  buildTypedOperatorOptions,
+} from "metabase-lib/lib/parameters/utils/operators";
+import { fieldFilterForParameter } from "metabase-lib/lib/parameters/utils/filters";
 
 export function getParameterOptions() {
   return [
diff --git a/frontend/src/metabase/parameters/utils/template-tag-options.unit.spec.js b/frontend/src/metabase/parameters/utils/template-tag-options.unit.spec.js
index 1f42b365cbb..b415c6131f1 100644
--- a/frontend/src/metabase/parameters/utils/template-tag-options.unit.spec.js
+++ b/frontend/src/metabase/parameters/utils/template-tag-options.unit.spec.js
@@ -1,5 +1,5 @@
 import _ from "underscore";
-import { PARAMETER_OPERATOR_TYPES } from "../constants";
+import { PARAMETER_OPERATOR_TYPES } from "metabase-lib/lib/parameters/constants";
 import {
   getParameterOptions,
   getParameterOptionsForField,
diff --git a/frontend/src/metabase/parameters/utils/ui.ts b/frontend/src/metabase/parameters/utils/ui.ts
index 671963df4d5..32154c7f8e2 100644
--- a/frontend/src/metabase/parameters/utils/ui.ts
+++ b/frontend/src/metabase/parameters/utils/ui.ts
@@ -2,8 +2,8 @@ import _ from "underscore";
 import { UiParameter } from "metabase/parameters/types";
 import { isEqualsOperator } from "metabase-lib/lib/operators/utils";
 
-import { getParameterType } from "./parameter-type";
-import { deriveFieldOperatorFromParameter } from "./operators";
+import { getParameterType } from "metabase-lib/lib/parameters/utils/parameter-type";
+import { deriveFieldOperatorFromParameter } from "metabase-lib/lib/parameters/utils/operators";
 
 export function getParameterIconName(parameter: UiParameter) {
   const type = getParameterType(parameter);
-- 
GitLab