Compare commits

...

3 Commits

Author SHA1 Message Date
Dominik Prokop 43e3efc98a Migrate to new import pattern
- Update all consumers to import from @grafana/schema/dashboard/v2beta1
- Update raw dashboard type imports to use @grafana/schema/dashboard/v0
- Add v2beta1/index.ts re-export file for the sub-path
- Consolidate duplicate imports to fix lint errors
2025-12-16 13:10:17 +01:00
Dominik Prokop d853bd598d Add development build support for schema sub-paths
- Add webpack NormalModuleReplacementPlugin to resolve sub-paths from source
- Add TypeScript paths mappings for monorepo type-checking
- Add Jest moduleNameMapper for test resolution
2025-12-16 11:13:18 +01:00
Dominik Prokop 1c94a7ddd5 Add versioned dashboard schema sub-path exports
- Create dashboard/v0 sub-path for raw dashboard types
- Create dashboard/v2beta1 sub-path for v2 schema types
- Add exports and typesVersions to package.json via prepare-npm-package.js
- typesVersions provides backwards compatibility for moduleResolution: node
- Add rollup build targets for both sub-paths
2025-12-16 10:34:46 +01:00
65 changed files with 248 additions and 157 deletions
+2
View File
@@ -67,6 +67,8 @@ module.exports = {
// near-membrane-dom won't work in a nodejs environment.
'@locker/near-membrane-dom': '<rootDir>/public/test/mocks/nearMembraneDom.ts',
'^@grafana/schema/dist/esm/(.*)$': '<rootDir>/packages/grafana-schema/src/$1',
'^@grafana/schema/dashboard/v0$': '<rootDir>/packages/grafana-schema/src/schema/dashboard/v0/index',
'^@grafana/schema/dashboard/v2beta1$': '<rootDir>/packages/grafana-schema/src/schema/dashboard/v2beta1/index',
// prevent systemjs amd extra from breaking tests.
'systemjs/dist/extras/amd': '<rootDir>/public/test/mocks/systemjsAMDExtra.ts',
'@bsull/augurs': '<rootDir>/public/test/mocks/augurs.ts',
+40
View File
@@ -48,4 +48,44 @@ export default [
},
treeshake: false,
},
// Build sub-path exports for dashboard v0
{
input: {
'schema/dashboard/v0': fileURLToPath(new URL('src/schema/dashboard/v0/index.ts', import.meta.url)),
},
plugins: [noderesolve, esbuild],
output: [
{
format: 'esm',
dir: path.dirname(pkg.publishConfig.module),
entryFileNames: '[name].mjs',
},
{
format: 'cjs',
dir: path.dirname(pkg.publishConfig.main),
entryFileNames: '[name].cjs',
},
],
treeshake: false,
},
// Build sub-path exports for dashboard v2beta1
{
input: {
'schema/dashboard/v2beta1': fileURLToPath(new URL('src/schema/dashboard/v2beta1/index.ts', import.meta.url)),
},
plugins: [noderesolve, esbuild],
output: [
{
format: 'esm',
dir: path.dirname(pkg.publishConfig.module),
entryFileNames: '[name].mjs',
},
{
format: 'cjs',
dir: path.dirname(pkg.publishConfig.main),
entryFileNames: '[name].cjs',
},
],
treeshake: false,
},
];
@@ -0,0 +1,3 @@
// Re-export raw dashboard types for v0 (legacy) dashboard schema
// This allows imports like: import { AnnotationPanelFilter, DashboardLink } from '@grafana/schema/dashboard/v0'
export * from '../../../raw/dashboard/x/dashboard_types.gen';
@@ -0,0 +1,4 @@
// Re-export all types and values from types.spec.gen and types.status.gen for sub-path imports
// This allows imports like: import { Spec, Status } from '@grafana/schema/dashboard/v2beta1'
export * from './types.spec.gen';
export * from './types.status.gen';
@@ -7,7 +7,7 @@ import { FixedSizeList } from 'react-window';
import { GrafanaTheme2 } from '@grafana/data';
import { Trans, t } from '@grafana/i18n';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import {
Alert,
Button,
@@ -1,7 +1,7 @@
import memoizeOne from 'memoize-one';
import { useEffect, useState } from 'react';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';
import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';
import { isDashboardV2Resource } from 'app/features/dashboard/api/utils';
@@ -7,7 +7,7 @@ import { AppEvents, locationUtil } from '@grafana/data';
import { t } from '@grafana/i18n';
import { config, getBackendSrv, isFetchError, locationService } from '@grafana/runtime';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { isProvisionedFolderCheck } from 'app/api/clients/folder/v1beta1/utils';
import { appEvents } from 'app/core/app_events';
import { setStarred } from 'app/core/reducers/navBarTree';
@@ -11,7 +11,7 @@ import {
SceneObjectState,
VizPanel,
} from '@grafana/scenes';
import { ConditionalRenderingDataKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { ConditionalRenderingDataKind } from '@grafana/schema/dashboard/v2beta1';
import { Combobox, ComboboxOption } from '@grafana/ui';
import { dashboardEditActions } from '../../edit-pane/shared';
@@ -3,7 +3,7 @@ import { ReactElement, useCallback, useEffect, useMemo, useState } from 'react';
import { rangeUtil, SelectableValue } from '@grafana/data';
import { t } from '@grafana/i18n';
import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectState } from '@grafana/scenes';
import { ConditionalRenderingTimeRangeSizeKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { ConditionalRenderingTimeRangeSizeKind } from '@grafana/schema/dashboard/v2beta1';
import { Field, Select } from '@grafana/ui';
import { dashboardEditActions } from '../../edit-pane/shared';
@@ -8,10 +8,10 @@ import {
SceneObjectState,
VariableDependencyConfig,
} from '@grafana/scenes';
import {
import type {
ConditionalRenderingVariableKind,
ConditionalRenderingVariableSpec,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { Box, Combobox, ComboboxOption, Field, Input, Stack } from '@grafana/ui';
import { dashboardEditActions } from '../../edit-pane/shared';
@@ -1,9 +1,9 @@
import { Registry, RegistryItem } from '@grafana/data';
import {
import type {
ConditionalRenderingDataKind,
ConditionalRenderingTimeRangeSizeKind,
ConditionalRenderingVariableKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { ConditionalRenderingData } from './ConditionalRenderingData';
import { ConditionalRenderingTimeRangeSize } from './ConditionalRenderingTimeRangeSize';
@@ -10,7 +10,7 @@ import {
SceneObjectRef,
SceneObjectState,
} from '@grafana/scenes';
import { ConditionalRenderingGroupKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { ConditionalRenderingGroupKind } from '@grafana/schema/dashboard/v2beta1';
import { Stack } from '@grafana/ui';
import { ConditionalRenderingChangedEvent, dashboardEditActions } from '../../edit-pane/shared';
@@ -2,7 +2,7 @@ import { locationUtil, UrlQueryMap } from '@grafana/data';
import { t } from '@grafana/i18n';
import { config, getBackendSrv, getDataSourceSrv, isFetchError, locationService } from '@grafana/runtime';
import { sceneGraph } from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { GetRepositoryFilesWithPathApiResponse, provisioningAPIv0alpha1 } from 'app/api/clients/provisioning/v0alpha1';
import { StateManagerBase } from 'app/core/services/StateManagerBase';
import { contextSrv } from 'app/core/services/context_srv';
@@ -5,7 +5,7 @@ import { memo, useContext, useEffect, useMemo } from 'react';
import { Trans, t } from '@grafana/i18n';
import { locationService } from '@grafana/runtime';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { ModalsContext, Modal, Button, useStyles2 } from '@grafana/ui';
import { Prompt } from 'app/core/components/FormPrompt/Prompt';
import { contextSrv } from 'app/core/services/context_srv';
@@ -2,13 +2,13 @@
import type { AdHocVariableModel, TextBoxVariableModel, TypedVariableModel } from '@grafana/data';
import { Dashboard, Panel, VariableOption } from '@grafana/schema';
import {
import type {
AdHocFilterWithLabels,
AdhocVariableSpec,
Spec as DashboardV2Spec,
TextVariableSpec,
VariableKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { ResponseTransformers } from 'app/features/dashboard/api/ResponseTransformers';
import { isDashboardV2Spec } from 'app/features/dashboard/api/utils';
import { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';
@@ -4,7 +4,7 @@ import { selectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { config, isFetchError } from '@grafana/runtime';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { Alert, Box, Button, Stack } from '@grafana/ui';
import { Diffs } from '../settings/version-history/utils';
@@ -4,7 +4,7 @@ import { locationUtil } from '@grafana/data';
import { t } from '@grafana/i18n';
import { locationService } from '@grafana/runtime';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { appEvents } from 'app/core/app_events';
import { useAppNotification } from 'app/core/copy/appNotification';
import { updateDashboardName } from 'app/core/reducers/navBarTree';
@@ -16,7 +16,7 @@ import {
VizPanel,
} from '@grafana/scenes';
import { Dashboard, DashboardLink, LibraryPanel } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { appEvents } from 'app/core/app_events';
import { ScrollRefElement } from 'app/core/components/NativeScrollbar';
import { LS_PANEL_COPY_KEY } from 'app/core/constants';
@@ -3,15 +3,15 @@ import { defaults, each, sortBy } from 'lodash';
import { DataSourceRef, PanelPluginMeta, VariableOption, VariableRefresh } from '@grafana/data';
import { getDataSourceSrv } from '@grafana/runtime';
import { Panel } from '@grafana/schema';
import {
Spec as DashboardV2Spec,
import type {
PanelKind,
PanelQueryKind,
AnnotationQueryKind,
QueryVariableKind,
LibraryPanelRef,
LibraryPanelKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
Spec as DashboardV2Spec,
} from '@grafana/schema/dashboard/v2beta1';
import { notifyApp } from 'app/core/actions';
import config from 'app/core/config';
import { createErrorNotification } from 'app/core/copy/appNotification';
@@ -8,7 +8,7 @@ import {
VizPanel,
SceneGridItemLike,
} from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { GRID_CELL_VMARGIN } from 'app/core/constants';
import { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';
@@ -17,7 +17,7 @@ import {
SceneGridLayoutDragStartEvent,
SceneObject,
} from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { useStyles2 } from '@grafana/ui';
import { GRID_COLUMN_COUNT } from 'app/core/constants';
import DashboardEmpty from 'app/features/dashboard/dashgrid/DashboardEmpty/DashboardEmpty';
@@ -11,7 +11,7 @@ import {
SceneGridItemLike,
SceneGridLayout,
} from '@grafana/scenes';
import { RowsLayoutRowKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { RowsLayoutRowKind } from '@grafana/schema/dashboard/v2beta1';
import { appEvents } from 'app/core/app_events';
import { LS_ROW_COPY_KEY } from 'app/core/constants';
import store from 'app/core/store';
@@ -8,7 +8,7 @@ import {
SceneObjectState,
VizPanel,
} from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { dashboardEditActions, ObjectsReorderedOnCanvasEvent } from '../../edit-pane/shared';
import { serializeRowsLayout } from '../../serialization/layoutSerializers/RowsLayoutSerializer';
@@ -11,7 +11,7 @@ import {
SceneGridItemLike,
SceneGridLayout,
} from '@grafana/scenes';
import { TabsLayoutTabKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { TabsLayoutTabKind } from '@grafana/schema/dashboard/v2beta1';
import { appEvents } from 'app/core/app_events';
import { LS_TAB_COPY_KEY } from 'app/core/constants';
import store from 'app/core/store';
@@ -8,7 +8,7 @@ import {
SceneObjectUrlValues,
VizPanel,
} from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { dashboardEditActions, ObjectsReorderedOnCanvasEvent } from '../../edit-pane/shared';
import { serializeTabsLayout } from '../../serialization/layoutSerializers/TabsLayoutSerializer';
@@ -1,5 +1,5 @@
import { SceneObject, VizPanel } from '@grafana/scenes';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor';
import { LayoutRegistryItem } from './LayoutRegistryItem';
@@ -1,5 +1,5 @@
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { AnnoKeyDashboardSnapshotOriginalUrl, ObjectMeta } from 'app/features/apiserver/types';
import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';
import { isDashboardV2Spec } from 'app/features/dashboard/api/utils';
@@ -1,9 +1,9 @@
import { AnnotationQuery } from '@grafana/data';
import {
AnnotationQueryKind,
type AnnotationQueryKind,
defaultAnnotationQuerySpec,
defaultDataQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { getRuntimePanelDataSource } from './layoutSerializers/utils';
@@ -2,14 +2,14 @@ import { t } from '@grafana/i18n';
import { config } from '@grafana/runtime';
import { VariableModel, defaultDashboard } from '@grafana/schema';
import {
AdhocVariableKind,
type AdhocVariableKind,
type GroupByVariableKind,
type Spec as DashboardV2Spec,
defaultAdhocVariableSpec,
defaultSpec as defaultDashboardV2Spec,
defaultGroupByVariableSpec,
defaultTimeSettingsSpec,
GroupByVariableKind,
Spec as DashboardV2Spec,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { AnnoKeyFolder } from 'app/features/apiserver/types';
import { DashboardWithAccessInfo } from 'app/features/dashboard/api/types';
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
@@ -1,8 +1,8 @@
import {
Spec as DashboardV2Spec,
type AutoGridLayoutItemKind,
type Spec as DashboardV2Spec,
defaultAutoGridLayoutSpec,
AutoGridLayoutItemKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { AutoGridItem } from '../../scene/layout-auto-grid/AutoGridItem';
import { AutoGridLayout } from '../../scene/layout-auto-grid/AutoGridLayout';
@@ -1,6 +1,5 @@
import { SceneGridItemLike, SceneGridLayout, VizPanel } from '@grafana/scenes';
import {
Spec as DashboardV2Spec,
import type {
GridLayoutItemKind,
GridLayoutKind,
RepeatOptions,
@@ -8,7 +7,8 @@ import {
GridLayoutItemSpec,
PanelKind,
LibraryPanelKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
Spec as DashboardV2Spec,
} from '@grafana/schema/dashboard/v2beta1';
import { DashboardGridItem } from '../../scene/layout-default/DashboardGridItem';
import { DefaultGridLayoutManager } from '../../scene/layout-default/DefaultGridLayoutManager';
@@ -1,4 +1,4 @@
import { Spec as DashboardV2Spec, RowsLayoutRowKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { RowsLayoutRowKind, Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { RowItem } from '../../scene/layout-rows/RowItem';
import { RowsLayoutManager } from '../../scene/layout-rows/RowsLayoutManager';
@@ -1,4 +1,4 @@
import { Spec as DashboardV2Spec, TabsLayoutTabKind } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { TabsLayoutTabKind, Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { TabItem } from '../../scene/layout-tabs/TabItem';
import { TabsLayoutManager } from '../../scene/layout-tabs/TabsLayoutManager';
@@ -1,5 +1,5 @@
import { Registry, RegistryItem } from '@grafana/data';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { DashboardLayoutManager } from '../../scene/types/DashboardLayoutManager';
@@ -9,19 +9,19 @@ import {
VizPanelMenu,
VizPanelState,
} from '@grafana/scenes';
import { DataSourceRef } from '@grafana/schema/dist/esm/index.gen';
import {
Spec as DashboardV2Spec,
AutoGridLayoutItemKind,
RowsLayoutRowKind,
LibraryPanelKind,
PanelKind,
PanelQueryKind,
QueryVariableKind,
TabsLayoutTabKind,
DataQueryKind,
type Spec as DashboardV2Spec,
type AutoGridLayoutItemKind,
type RowsLayoutRowKind,
type LibraryPanelKind,
type PanelKind,
type PanelQueryKind,
type QueryVariableKind,
type TabsLayoutTabKind,
type DataQueryKind,
defaultPanelQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { DataSourceRef } from '@grafana/schema/dist/esm/index.gen';
import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource';
import { ConditionalRenderingGroup } from '../../conditional-rendering/group/ConditionalRenderingGroup';
@@ -13,22 +13,22 @@ import {
VariableSort as OldVariableSort,
} from '@grafana/schema';
import {
AdhocVariableKind,
ConstantVariableKind,
CustomVariableKind,
DataQueryKind,
DatasourceVariableKind,
IntervalVariableKind,
QueryVariableKind,
TextVariableKind,
GroupByVariableKind,
type AdhocVariableKind,
type ConstantVariableKind,
type CustomVariableKind,
type DataQueryKind,
type DatasourceVariableKind,
type IntervalVariableKind,
type QueryVariableKind,
type TextVariableKind,
type GroupByVariableKind,
type VariableOption,
type AdHocFilterWithLabels,
type SwitchVariableKind,
defaultVariableHide,
VariableOption,
defaultDataQueryKind,
AdHocFilterWithLabels,
SwitchVariableKind,
defaultIntervalVariableSpec,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { getDefaultDatasource } from 'app/features/dashboard/api/ResponseTransformers';
import { getIntervalsQueryFromNewIntervalModel } from '../utils/utils';
@@ -20,11 +20,19 @@ import {
TextBoxVariable,
} from '@grafana/scenes';
import {
AdhocVariableKind,
ConstantVariableKind,
CustomVariableKind,
Spec as DashboardV2Spec,
DatasourceVariableKind,
type AdhocVariableKind,
type ConstantVariableKind,
type CustomVariableKind,
type Spec as DashboardV2Spec,
type DatasourceVariableKind,
type GroupByVariableKind,
type IntervalVariableKind,
type LibraryPanelKind,
type PanelKind,
type QueryVariableKind,
type SwitchVariableKind,
type TextVariableKind,
type AnnotationQueryKind,
defaultAdhocVariableKind,
defaultConstantVariableKind,
defaultCustomVariableKind,
@@ -35,16 +43,8 @@ import {
defaultTextVariableKind,
defaultSwitchVariableKind,
defaultTimeSettingsSpec,
GroupByVariableKind,
IntervalVariableKind,
LibraryPanelKind,
PanelKind,
QueryVariableKind,
SwitchVariableKind,
TextVariableKind,
defaultDataQueryKind,
AnnotationQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { DEFAULT_ANNOTATION_COLOR } from '@grafana/ui';
import {
AnnoKeyCreatedBy,
@@ -14,41 +14,41 @@ import {
VizPanel,
} from '@grafana/scenes';
import { DataSourceRef, VariableRefresh } from '@grafana/schema';
import { sortedDeepCloneWithoutNulls } from 'app/core/utils/object';
import {
Spec as DashboardV2Spec,
type Spec as DashboardV2Spec,
type PanelKind,
type PanelQueryKind,
type TransformationKind,
type FieldConfigSource,
type DataTransformerConfig,
type PanelQuerySpec,
type DataQueryKind,
type QueryOptionsSpec,
type QueryVariableKind,
type TextVariableKind,
type IntervalVariableKind,
type DatasourceVariableKind,
type CustomVariableKind,
type ConstantVariableKind,
type GroupByVariableKind,
type AdhocVariableKind,
type AnnotationQueryKind,
type DataLink,
type LibraryPanelKind,
type Element,
type DashboardCursorSync,
type FieldColor,
type SwitchVariableKind,
defaultSpec as defaultDashboardV2Spec,
defaultFieldConfigSource,
PanelKind,
PanelQueryKind,
TransformationKind,
FieldConfigSource,
DataTransformerConfig,
PanelQuerySpec,
DataQueryKind,
QueryOptionsSpec,
QueryVariableKind,
TextVariableKind,
IntervalVariableKind,
DatasourceVariableKind,
CustomVariableKind,
ConstantVariableKind,
GroupByVariableKind,
AdhocVariableKind,
AnnotationQueryKind,
DataLink,
LibraryPanelKind,
Element,
DashboardCursorSync,
FieldColor,
defaultFieldConfig,
defaultDataQueryKind,
SwitchVariableKind,
defaultTimeSettingsSpec,
defaultDashboardLinkType,
defaultDashboardLink,
} from '../../../../../packages/grafana-schema/src/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { sortedDeepCloneWithoutNulls } from 'app/core/utils/object';
import { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet';
import { DashboardScene, DashboardSceneState } from '../scene/DashboardScene';
import { PanelTimeRange } from '../scene/panel-timerange/PanelTimeRange';
@@ -7,7 +7,7 @@ import {
MappingType as MappingTypeV1,
ThresholdsMode as ThresholdsModeV1,
} from '@grafana/schema';
import {
import type {
DashboardCursorSync,
VariableHide,
VariableRefresh,
@@ -15,7 +15,7 @@ import {
FieldConfigSource,
SpecialValueMatch,
ThresholdsMode,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
export function transformVariableRefreshToEnumV1(refresh?: VariableRefresh): VariableRefreshV1 {
switch (refresh) {
@@ -6,18 +6,18 @@ import {
FieldColorModeId as FieldColorModeIdV1,
DataTopic,
} from '@grafana/schema';
import { DataTransformerConfig } from '@grafana/schema/dist/esm/raw/dashboard/x/dashboard_types.gen';
import {
DashboardCursorSync,
type DashboardCursorSync,
type VariableHide,
type VariableRefresh,
type VariableSort,
type FieldColorModeId as FieldColorModeIdV2,
defaultSpec as defaultDashboardV2Spec,
defaultVariableHide,
defaultVariableRefresh,
defaultVariableSort,
VariableHide,
VariableRefresh,
VariableSort,
FieldColorModeId as FieldColorModeIdV2,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { DataTransformerConfig } from '@grafana/schema/dist/esm/raw/dashboard/x/dashboard_types.gen';
// used for QueryVariableKind's query prop - in schema V2 we've deprecated string type and support only DataQuery
export const LEGACY_STRING_VALUE_KEY = '__legacyStringValue';
@@ -5,7 +5,7 @@ import { GrafanaTheme2, PageLayoutType } from '@grafana/data';
import { Trans, t } from '@grafana/i18n';
import { SceneComponentProps, SceneObjectBase, sceneUtils } from '@grafana/scenes';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { Alert, Box, Button, CodeEditor, Stack, useStyles2 } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
import { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';
@@ -14,7 +14,7 @@ import { selectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { config, getDataSourceSrv } from '@grafana/runtime';
import { VizPanel } from '@grafana/scenes';
import { AnnotationPanelFilter } from '@grafana/schema/src/raw/dashboard/x/dashboard_types.gen';
import { AnnotationPanelFilter } from '@grafana/schema/dashboard/v0';
import {
Button,
Checkbox,
@@ -3,7 +3,7 @@ import { AsyncState } from 'react-use/lib/useAsync';
import { selectors as e2eSelectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { Alert, Label, RadioButtonGroup, Stack, Switch } from '@grafana/ui';
import { DashboardJson } from 'app/features/manage-dashboards/types';
@@ -8,7 +8,7 @@ import { Trans, t } from '@grafana/i18n';
import { config } from '@grafana/runtime';
import { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { Button, ClipboardButton, CodeEditor, Field, Modal, Stack, Switch } from '@grafana/ui';
import { ObjectMeta } from 'app/features/apiserver/types';
import { transformDashboardV2SpecToV1 } from 'app/features/dashboard/api/ResponseTransformers';
@@ -5,6 +5,7 @@ import { selectors as e2eSelectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { SceneComponentProps, sceneGraph, SceneObjectBase, SceneObjectRef, VizPanel } from '@grafana/scenes';
import { Dashboard } from '@grafana/schema';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { Button, ClipboardButton, Field, Input, Modal, RadioButtonGroup, Stack } from '@grafana/ui';
import { notifyApp } from 'app/core/actions';
import { createSuccessNotification } from 'app/core/copy/appNotification';
@@ -12,7 +13,6 @@ import { getTrackingSource, shareDashboardType } from 'app/features/dashboard/co
import { getDashboardSnapshotSrv, SnapshotSharingOptions } from 'app/features/dashboard/services/SnapshotSrv';
import { dispatch } from 'app/store/store';
import { Spec as DashboardV2Spec } from '../../../../../packages/grafana-schema/src/schema/dashboard/v2';
import { DashboardScene } from '../scene/DashboardScene';
import { transformSceneToSaveModel, trimDashboardForSnapshot } from '../serialization/transformSceneToSaveModel';
import {
@@ -1,10 +1,6 @@
import { locationUtil } from '@grafana/data';
import { locationService, reportInteraction } from '@grafana/runtime';
import {
AnnotationQueryKind,
Spec as DashboardV2Spec,
defaultDataQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
import { AnnotationQueryKind, Spec as DashboardV2Spec, defaultDataQueryKind } from '@grafana/schema/dashboard/v2beta1';
import { Form } from 'app/core/components/Form/Form';
import { getDashboardAPI } from 'app/features/dashboard/api/dashboard_api';
import { SaveDashboardCommand } from 'app/features/dashboard/components/SaveDashboard/types';
@@ -3,7 +3,7 @@ import {
defaultQueryGroupKind,
defaultPanelQueryKind,
defaultVizConfigKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { isPanelKindV2 } from './validation';
@@ -1,10 +1,10 @@
import {
import type {
PanelKind,
QueryGroupKind,
VizConfigKind,
PanelQueryKind,
TransformationKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
function isObject(value: unknown): value is Record<string, unknown> {
return typeof value === 'object' && value !== null && !Array.isArray(value);
@@ -13,13 +13,11 @@ import {
MappingType as MappingTypeV1,
SpecialValueMatch as SpecialValueMatchV1,
} from '@grafana/schema';
import { DashboardLink, DataTransformerConfig } from '@grafana/schema/dashboard/v0';
import {
AnnotationQueryKind,
Spec as DashboardV2Spec,
DataLink,
DatasourceVariableKind,
defaultSpec as defaultDashboardV2Spec,
defaultTimeSettingsSpec,
PanelQueryKind,
QueryVariableKind,
TransformationKind,
@@ -37,15 +35,17 @@ import {
LibraryPanelKind,
PanelKind,
GridLayoutItemKind,
defaultDataQueryKind,
RowsLayoutRowKind,
GridLayoutKind,
Spec as DashboardV2Spec,
defaultSpec as defaultDashboardV2Spec,
defaultTimeSettingsSpec,
defaultDataQueryKind,
defaultDashboardLinkType,
defaultDashboardLink,
defaultFieldConfigSource,
defaultPanelQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
import { DashboardLink, DataTransformerConfig } from '@grafana/schema/src/raw/dashboard/x/dashboard_types.gen';
} from '@grafana/schema/dashboard/v2beta1';
import { isWeekStart, WeekStart } from '@grafana/ui';
import {
AnnoKeyCreatedBy,
@@ -1,5 +1,5 @@
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { isResource } from 'app/features/apiserver/guards';
import { Resource, ResourceList } from 'app/features/apiserver/types';
import { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';
@@ -1,5 +1,5 @@
import { Dashboard } from '@grafana/schema';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { DashboardDTO } from 'app/types/dashboard';
import { UnifiedDashboardAPI } from './UnifiedDashboardAPI';
+1 -1
View File
@@ -1,5 +1,5 @@
import { UrlQueryMap } from '@grafana/data';
import { Status } from '@grafana/schema/src/schema/dashboard/v2';
import type { Status } from '@grafana/schema/dashboard/v2beta1';
import { ListOptions, Resource, ResourceList } from 'app/features/apiserver/types';
import { DeleteDashboardResponse } from 'app/features/manage-dashboards/types';
import { AnnotationsPermissions, SaveDashboardResponseDTO } from 'app/types/dashboard';
+2 -3
View File
@@ -1,7 +1,6 @@
import { config, locationService } from '@grafana/runtime';
import { Dashboard } from '@grafana/schema/dist/esm/index.gen';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import { Status } from '@grafana/schema/src/schema/dashboard/v2';
import { Dashboard } from '@grafana/schema';
import type { Spec as DashboardV2Spec, Status } from '@grafana/schema/dashboard/v2beta1';
import { Resource } from 'app/features/apiserver/types';
import { DashboardDataDTO, DashboardDTO } from 'app/types/dashboard';
+1 -1
View File
@@ -1,7 +1,7 @@
import { locationUtil, UrlQueryMap } from '@grafana/data';
import { t } from '@grafana/i18n';
import { Dashboard } from '@grafana/schema';
import { Status } from '@grafana/schema/src/schema/dashboard/v2';
import type { Status } from '@grafana/schema/dashboard/v2beta1';
import { getFolderByUidFacade } from 'app/api/clients/folder/v1beta1/hooks';
import { getMessageFromError, getStatusFromError } from 'app/core/utils/errors';
import { ScopedResourceClient } from 'app/features/apiserver/client';
+1 -2
View File
@@ -1,7 +1,6 @@
import { locationUtil } from '@grafana/data';
import { t } from '@grafana/i18n';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import { Status } from '@grafana/schema/src/schema/dashboard/v2';
import type { Spec as DashboardV2Spec, Status } from '@grafana/schema/dashboard/v2beta1';
import { getFolderByUidFacade } from 'app/api/clients/folder/v1beta1/hooks';
import { getMessageFromError, getStatusFromError } from 'app/core/utils/errors';
import { ScopedResourceClient } from 'app/features/apiserver/client';
@@ -13,7 +13,7 @@ import {
import { selectors } from '@grafana/e2e-selectors';
import { Trans, t } from '@grafana/i18n';
import { getDataSourceSrv, locationService } from '@grafana/runtime';
import { AnnotationPanelFilter } from '@grafana/schema/src/raw/dashboard/x/dashboard_types.gen';
import { AnnotationPanelFilter } from '@grafana/schema/dashboard/v0';
import { Button, Checkbox, Field, FieldSet, Input, MultiSelect, Select, useStyles2, Stack, Alert } from '@grafana/ui';
import { ColorValueEditor } from 'app/core/components/OptionsUI/color';
import config from 'app/core/config';
@@ -6,7 +6,7 @@ import { Props as AutoSizerProps } from 'react-virtualized-auto-sizer';
import { render } from 'test/test-utils';
import { selectors as e2eSelectors } from '@grafana/e2e-selectors/src';
import { Dashboard, DashboardCursorSync, FieldConfigSource, Panel, ThresholdsMode } from '@grafana/schema/src';
import { Dashboard, DashboardCursorSync, FieldConfigSource, Panel, ThresholdsMode } from '@grafana/schema';
import { getRouteComponentProps } from 'app/core/navigation/mocks/routeProps';
import { DashboardInitPhase, DashboardMeta, DashboardRoutes } from 'app/types/dashboard';
import { StoreState } from 'app/types/store';
@@ -4,7 +4,7 @@ import moment from 'moment'; // eslint-disable-line no-restricted-imports
import { AppEvents, dateMath, UrlQueryMap, UrlQueryValue } from '@grafana/data';
import { getBackendSrv, isFetchError, locationService } from '@grafana/runtime';
import { Spec as DashboardV2Spec } from '@grafana/schema/dist/esm/schema/dashboard/v2';
import type { Spec as DashboardV2Spec } from '@grafana/schema/dashboard/v2beta1';
import { backendSrv } from 'app/core/services/backend_srv';
import impressionSrv from 'app/core/services/impression_srv';
import kbn from 'app/core/utils/kbn';
@@ -1,5 +1,5 @@
import { PanelModel } from '@grafana/data';
import { FieldColorModeId, ThresholdsMode } from '@grafana/schema/src';
import { FieldColorModeId, ThresholdsMode } from '@grafana/schema/dashboard/v0';
import { DashboardModel } from '../state/DashboardModel';
import { createDashboardModelFixture, createPanelSaveModel } from '../state/__fixtures__/dashboardFixtures';
@@ -1,10 +1,10 @@
import { VariableModel } from '@grafana/schema/dist/esm/index';
import {
import type {
AdhocVariableKind,
DatasourceVariableKind,
QueryVariableKind,
VariableKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
} from '@grafana/schema/dashboard/v2beta1';
import { VariableModel } from '@grafana/schema/dist/esm/index';
import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';
import { DashboardModel } from '../state/DashboardModel';
@@ -1,11 +1,11 @@
import { DataSourceInstanceSettings } from '@grafana/data';
import { getBackendSrv, getDataSourceSrv, isFetchError } from '@grafana/runtime';
import {
Spec as DashboardV2Spec,
import type {
QueryVariableKind,
PanelQueryKind,
AnnotationQueryKind,
} from '@grafana/schema/dist/esm/schema/dashboard/v2';
Spec as DashboardV2Spec,
} from '@grafana/schema/dashboard/v2beta1';
import { notifyApp } from 'app/core/actions';
import { createErrorNotification } from 'app/core/copy/appNotification';
import { browseDashboardsAPI, ImportInputs } from 'app/features/browse-dashboards/api/browseDashboardsAPI';
@@ -1,4 +1,4 @@
import { Dashboard } from '@grafana/schema/src/veneer/dashboard.types';
import { Dashboard } from '@grafana/schema';
import { ExternalDashboard } from '../dashboard/components/DashExportModal/DashboardExporter';
+40
View File
@@ -29,6 +29,46 @@ try {
types: './dist/*',
default: './dist/*',
};
// Support @grafana/scenes that imports from dist/esm paths which webpack transforms to src paths
// (see webpack.common.js NormalModuleReplacementPlugin that replaces @grafana/schema/dist/esm with @grafana/schema/src)
exports['./src/*'] = {
types: './src/*',
default: './src/*',
};
// Add sub-path exports for dashboard v0
exports['./dashboard/v0'] = {
import: {
types: './dist/types/schema/dashboard/v0/index.d.ts',
default: './dist/esm/schema/dashboard/v0.mjs',
},
require: {
types: './dist/types/schema/dashboard/v0/index.d.ts',
default: './dist/cjs/schema/dashboard/v0.cjs',
},
};
// Add sub-path exports for dashboard v2beta1
exports['./dashboard/v2beta1'] = {
import: {
types: './dist/types/schema/dashboard/v2beta1/index.d.ts',
default: './dist/esm/schema/dashboard/v2beta1.mjs',
},
require: {
types: './dist/types/schema/dashboard/v2beta1/index.d.ts',
default: './dist/cjs/schema/dashboard/v2beta1.cjs',
},
};
// Add typesVersions for backwards compatibility with moduleResolution: "node"
// This allows TypeScript to resolve types for sub-path imports even without
// modern moduleResolution settings (bundler/node16/nodenext)
pkgJson.update({
typesVersions: {
'*': {
'dashboard/v0': ['./dist/types/schema/dashboard/v0/index.d.ts'],
'dashboard/v2beta1': ['./dist/types/schema/dashboard/v2beta1/index.d.ts'],
},
},
});
}
// Fix for @grafana/i18n so eslint-plugin can be imported by consumers
+6
View File
@@ -65,6 +65,12 @@ module.exports = {
new webpack.NormalModuleReplacementPlugin(/^@grafana\/schema\/dist\/esm\/(.*)$/, (resource) => {
resource.request = resource.request.replace('@grafana/schema/dist/esm', '@grafana/schema/src');
}),
new webpack.NormalModuleReplacementPlugin(/^@grafana\/schema\/dashboard\/v0$/, (resource) => {
resource.request = '@grafana/schema/src/schema/dashboard/v0/index';
}),
new webpack.NormalModuleReplacementPlugin(/^@grafana\/schema\/dashboard\/v2beta1$/, (resource) => {
resource.request = '@grafana/schema/src/schema/dashboard/v2beta1/index';
}),
new CorsWorkerPlugin(),
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
+3 -1
View File
@@ -14,7 +14,9 @@
"moduleResolution": "bundler",
"tsBuildInfoFile": "./tsconfig.tsbuildinfo",
"paths": {
"@grafana/schema/dist/esm/*": ["../packages/grafana-schema/src/*"]
"@grafana/schema/dist/esm/*": ["../packages/grafana-schema/src/*"],
"@grafana/schema/dashboard/v0": ["../packages/grafana-schema/src/schema/dashboard/v0/index"],
"@grafana/schema/dashboard/v2beta1": ["../packages/grafana-schema/src/schema/dashboard/v2beta1/index"]
}
},
"ts-node": {