Remove unnecessary export types and reorganize types (#99)

* fix re-export types in translation

* Fix more types

* reorganize type in chart package

* Fix unit tests

* remove Array<> in favor of []
This commit is contained in:
Krist Wongsuphasawat 2019-02-15 12:44:09 -08:00 committed by Yongjie Zhao
parent dba200aa84
commit 80290426ec
36 changed files with 234 additions and 209 deletions

View File

@ -7,7 +7,8 @@ import {
SupersetClientClass, SupersetClientClass,
} from '@superset-ui/connection'; } from '@superset-ui/connection';
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton'; import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
import { FormData, AnnotationLayerMetadata } from '../query/FormData'; import { AnnotationLayerMetadata } from '../types/Annotation';
import { FormData } from '../types/FormData';
export type SliceIdAndOrFormData = export type SliceIdAndOrFormData =
| { | {
@ -29,14 +30,14 @@ interface ChartData {
queryData: object; queryData: object;
} }
export interface ChartClientConfig { export default class ChartClient {
client?: SupersetClientInterface | SupersetClientClass;
}
export class ChartClient {
readonly client: SupersetClientInterface | SupersetClientClass; readonly client: SupersetClientInterface | SupersetClientClass;
constructor(config: ChartClientConfig = {}) { constructor(
config: {
client?: SupersetClientInterface | SupersetClientClass;
} = {},
) {
const { client = SupersetClient } = config; const { client = SupersetClient } = config;
this.client = client; this.client = client;
} }
@ -102,7 +103,7 @@ export class ChartClient {
return Promise.reject(new Error('This feature is not implemented yet.')); return Promise.reject(new Error('This feature is not implemented yet.'));
} }
loadAnnotations(annotationLayers?: Array<AnnotationLayerMetadata>): Promise<AnnotationData> { loadAnnotations(annotationLayers?: AnnotationLayerMetadata[]): Promise<AnnotationData> {
if (Array.isArray(annotationLayers) && annotationLayers.length > 0) { if (Array.isArray(annotationLayers) && annotationLayers.length > 0) {
return Promise.all(annotationLayers.map(layer => this.loadAnnotation(layer))).then(results => return Promise.all(annotationLayers.map(layer => this.loadAnnotation(layer))).then(results =>
annotationLayers.reduce((prev, layer, i) => { annotationLayers.reduce((prev, layer, i) => {

View File

@ -1,12 +1,7 @@
export { ChartClient, ChartClientConfig } from './clients/ChartClient'; export { default as ChartClient } from './clients/ChartClient';
export { default as ChartMetadata, ChartMetadataConfig } from './models/ChartMetadata'; export { default as ChartMetadata } from './models/ChartMetadata';
export { export { default as ChartPlugin } from './models/ChartPlugin';
default as ChartPlugin, export { default as ChartProps } from './models/ChartProps';
ChartPluginConfig,
BuildQueryFunction,
TransformPropsFunction,
} from './models/ChartPlugin';
export { default as ChartProps, ChartPropsConfig } from './models/ChartProps';
export { default as createLoadableRenderer } from './components/createLoadableRenderer'; export { default as createLoadableRenderer } from './components/createLoadableRenderer';
export { default as reactify } from './components/reactify'; export { default as reactify } from './components/reactify';
@ -21,6 +16,10 @@ export {
default as getChartTransformPropsRegistry, default as getChartTransformPropsRegistry,
} from './registries/ChartTransformPropsRegistrySingleton'; } from './registries/ChartTransformPropsRegistrySingleton';
export { QueryContext, buildQueryContext } from './query/buildQueryContext'; export { default as buildQueryContext } from './query/buildQueryContext';
export { DatasourceType, DatasourceKey } from './query/DatasourceKey'; export { default as DatasourceKey } from './query/DatasourceKey';
export { FormData } from './query/FormData';
export * from './types/Annotation';
export * from './types/Datasource';
export * from './types/FormData';
export * from './types/Query';

View File

@ -2,28 +2,26 @@ interface LookupTable {
[key: string]: boolean; [key: string]: boolean;
} }
export interface ChartMetadataConfig {
name: string;
canBeAnnotationTypes?: Array<string>;
credits?: Array<string>;
description?: string;
show?: boolean;
supportedAnnotationTypes?: Array<string>;
thumbnail: string;
useLegacyApi?: boolean;
}
export default class ChartMetadata { export default class ChartMetadata {
name: string; name: string;
canBeAnnotationTypesLookup: LookupTable; canBeAnnotationTypesLookup: LookupTable;
credits: Array<string>; credits: string[];
description: string; description: string;
show: boolean; show: boolean;
supportedAnnotationTypes: Array<string>; supportedAnnotationTypes: string[];
thumbnail: string; thumbnail: string;
useLegacyApi: boolean; useLegacyApi: boolean;
constructor(config: ChartMetadataConfig) { constructor(config: {
name: string;
canBeAnnotationTypes?: string[];
credits?: string[];
description?: string;
show?: boolean;
supportedAnnotationTypes?: string[];
thumbnail: string;
useLegacyApi?: boolean;
}) {
const { const {
name, name,
canBeAnnotationTypes = [], canBeAnnotationTypes = [],

View File

@ -1,12 +1,12 @@
import { isRequired, Plugin } from '@superset-ui/core'; import { isRequired, Plugin } from '@superset-ui/core';
import ChartMetadata from './ChartMetadata'; import ChartMetadata from './ChartMetadata';
import ChartProps from './ChartProps'; import ChartProps from './ChartProps';
import { FormData } from '../query/FormData';
import { QueryContext } from '../query/buildQueryContext';
import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton'; import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton';
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton'; import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton'; import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton';
import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton'; import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton';
import { FormData } from '../types/FormData';
import { QueryContext } from '../types/Query';
const IDENTITY = (x: any) => x; const IDENTITY = (x: any) => x;
@ -21,7 +21,7 @@ export type TransformPropsFunction = (
[key: string]: any; [key: string]: any;
}; };
export interface ChartPluginConfig<T extends FormData> { interface ChartPluginConfig<T extends FormData> {
metadata: ChartMetadata; metadata: ChartMetadata;
// use buildQuery for immediate value // use buildQuery for immediate value
buildQuery?: BuildQueryFunction<T>; buildQuery?: BuildQueryFunction<T>;

View File

@ -12,11 +12,11 @@ type SnakeCaseDatasource = PlainObject;
type CamelCaseFormData = PlainObject; type CamelCaseFormData = PlainObject;
type SnakeCaseFormData = PlainObject; type SnakeCaseFormData = PlainObject;
type QueryData = PlainObject; type QueryData = PlainObject;
type Filters = Array<any>; type Filters = any[];
type HandlerFunction = (...args: any[]) => void; type HandlerFunction = (...args: any[]) => void;
type ChartPropsSelector = (c: ChartPropsConfig) => ChartProps; type ChartPropsSelector = (c: ChartPropsConfig) => ChartProps;
export interface ChartPropsConfig { interface ChartPropsConfig {
annotationData?: AnnotationData; annotationData?: AnnotationData;
datasource?: SnakeCaseDatasource; datasource?: SnakeCaseDatasource;
filters?: Filters; filters?: Filters;

View File

@ -1,9 +1,6 @@
export enum DatasourceType { import { DatasourceType } from '../types/Datasource';
Table = 'table',
Druid = 'druid',
}
export class DatasourceKey { export default class DatasourceKey {
readonly id: number; readonly id: number;
readonly type: DatasourceType; readonly type: DatasourceType;

View File

@ -1,61 +1,9 @@
import { Column } from './Column'; import { FormData } from '../types/FormData';
import { FormData } from './FormData'; import { MetricKey, Metric, FormDataMetric, AdhocMetric, ExpressionType } from '../types/Metric';
export const LABEL_MAX_LENGTH = 43; export const LABEL_MAX_LENGTH = 43;
// Note that the values of MetricKeys are lower_snake_case because they're export default class Metrics {
// used as keys of form data jsons.
export enum MetricKey {
METRIC = 'metric',
METRICS = 'metrics',
PERCENT_METRICS = 'percent_metrics',
RIGHT_AXIS_METRIC = 'metric_2',
SECONDARY_METRIC = 'secondary_metric',
X = 'x',
Y = 'y',
SIZE = 'size',
}
export enum Aggregate {
AVG = 'AVG',
COUNT = 'COUNT ',
COUNT_DISTINCT = 'COUNT_DISTINCT',
MAX = 'MAX',
MIN = 'MIN',
SUM = 'SUM',
}
export enum ExpressionType {
SIMPLE = 'SIMPLE',
SQL = 'SQL',
}
interface AdhocMetricSimple {
expressionType: ExpressionType.SIMPLE;
column: Column;
aggregate: Aggregate;
}
interface AdhocMetricSQL {
expressionType: ExpressionType.SQL;
sqlExpression: string;
}
export type AdhocMetric = {
label?: string;
optionName?: string;
} & (AdhocMetricSimple | AdhocMetricSQL);
// Type of metrics in form data
export type FormDataMetric = string | AdhocMetric;
// Type of Metric the client provides to server after unifying various forms
// of metrics in form data
export type Metric = {
label: string;
} & Partial<AdhocMetric>;
export class Metrics {
// Use Array to maintain insertion order for metrics that are order sensitive // Use Array to maintain insertion order for metrics that are order sensitive
private metrics: Metric[]; private metrics: Metric[];

View File

@ -1,18 +1,11 @@
import { buildQueryObject, QueryObject } from './buildQueryObject'; import buildQueryObject from './buildQueryObject';
import { DatasourceKey, DatasourceType } from './DatasourceKey'; import DatasourceKey from './DatasourceKey';
import { FormData } from './FormData'; import { FormData } from '../types/FormData';
import { QueryContext, QueryObject } from '../types/Query';
const WRAP_IN_ARRAY = (baseQueryObject: QueryObject) => [baseQueryObject]; const WRAP_IN_ARRAY = (baseQueryObject: QueryObject) => [baseQueryObject];
export interface QueryContext { export default function buildQueryContext(
datasource: {
id: number;
type: DatasourceType;
};
queries: Array<QueryObject>;
}
export function buildQueryContext(
formData: FormData, formData: FormData,
buildQuery: (baseQueryObject: QueryObject) => QueryObject[] = WRAP_IN_ARRAY, buildQuery: (baseQueryObject: QueryObject) => QueryObject[] = WRAP_IN_ARRAY,
): QueryContext { ): QueryContext {

View File

@ -1,11 +1,9 @@
import { FormData, getGranularity } from './FormData'; import Metrics from './Metrics';
import { Metric, Metrics } from './Metric'; import { QueryObject } from '../types/Query';
import { FormData } from '../types/FormData';
// TODO: fill out the rest of the query object function getGranularity(formData: FormData): string {
export interface QueryObject { return 'granularity_sqla' in formData ? formData.granularity_sqla : formData.granularity;
granularity: string;
groupby?: string[];
metrics?: Metric[];
} }
// Build the common segments of all query objects (e.g. the granularity field derived from // Build the common segments of all query objects (e.g. the granularity field derived from
@ -13,7 +11,7 @@ export interface QueryObject {
// buildQuery method for each viz type (see `wordcloud/buildQuery.ts` for an example). // buildQuery method for each viz type (see `wordcloud/buildQuery.ts` for an example).
// Note the type of the formData argument passed in here is the type of the formData for a // Note the type of the formData argument passed in here is the type of the formData for a
// specific viz, which is a subtype of the generic formData shared among all viz types. // specific viz, which is a subtype of the generic formData shared among all viz types.
export function buildQueryObject<T extends FormData>(formData: T): QueryObject { export default function buildQueryObject<T extends FormData>(formData: T): QueryObject {
return { return {
granularity: getGranularity(formData), granularity: getGranularity(formData),
metrics: new Metrics(formData).getMetrics(), metrics: new Metrics(formData).getMetrics(),

View File

@ -0,0 +1,6 @@
/* eslint-disable import/prefer-default-export */
export type AnnotationLayerMetadata = {
name: string;
sourceType?: string;
};

View File

@ -0,0 +1,6 @@
/* eslint-disable import/prefer-default-export */
export enum DatasourceType {
Table = 'table',
Druid = 'druid',
}

View File

@ -1,6 +1,8 @@
/* eslint camelcase: 0 */ /* eslint camelcase: 0 */
/* eslint-disable import/prefer-default-export */
// FormData uses snake_cased keys. // FormData uses snake_cased keys.
import { FormDataMetric, MetricKey } from './Metric'; import { FormDataMetric, MetricKey } from './Metric';
import { AnnotationLayerMetadata } from './Annotation';
// Type signature and utility functions for formData shared by all viz types // Type signature and utility functions for formData shared by all viz types
// It will be gradually filled out as we build out the query object // It will be gradually filled out as we build out the query object
@ -11,15 +13,10 @@ import { FormDataMetric, MetricKey } from './Metric';
// unified into a proper Metric type during buildQuery (see `/query/Metrics.ts`). // unified into a proper Metric type during buildQuery (see `/query/Metrics.ts`).
type Metrics = Partial<Record<MetricKey, FormDataMetric | FormDataMetric[]>>; type Metrics = Partial<Record<MetricKey, FormDataMetric | FormDataMetric[]>>;
export type AnnotationLayerMetadata = {
name: string;
sourceType?: string;
};
type BaseFormData = { type BaseFormData = {
datasource: string; datasource: string;
viz_type: string; viz_type: string;
annotation_layers?: Array<AnnotationLayerMetadata>; annotation_layers?: AnnotationLayerMetadata[];
} & Metrics; } & Metrics;
// FormData is either sqla-based or druid-based // FormData is either sqla-based or druid-based
@ -32,7 +29,3 @@ type DruidFormData = {
} & BaseFormData; } & BaseFormData;
export type FormData = SqlaFormData | DruidFormData; export type FormData = SqlaFormData | DruidFormData;
export function getGranularity(formData: FormData): string {
return 'granularity_sqla' in formData ? formData.granularity_sqla : formData.granularity;
}

View File

@ -0,0 +1,53 @@
import { Column } from './Column';
// Note that the values of MetricKeys are lower_snake_case because they're
// used as keys of form data jsons.
export enum MetricKey {
METRIC = 'metric',
METRICS = 'metrics',
PERCENT_METRICS = 'percent_metrics',
RIGHT_AXIS_METRIC = 'metric_2',
SECONDARY_METRIC = 'secondary_metric',
X = 'x',
Y = 'y',
SIZE = 'size',
}
export enum Aggregate {
AVG = 'AVG',
COUNT = 'COUNT ',
COUNT_DISTINCT = 'COUNT_DISTINCT',
MAX = 'MAX',
MIN = 'MIN',
SUM = 'SUM',
}
export enum ExpressionType {
SIMPLE = 'SIMPLE',
SQL = 'SQL',
}
interface AdhocMetricSimple {
expressionType: ExpressionType.SIMPLE;
column: Column;
aggregate: Aggregate;
}
interface AdhocMetricSQL {
expressionType: ExpressionType.SQL;
sqlExpression: string;
}
export type AdhocMetric = {
label?: string;
optionName?: string;
} & (AdhocMetricSimple | AdhocMetricSQL);
// Type of metrics in form data
export type FormDataMetric = string | AdhocMetric;
// Type of Metric the client provides to server after unifying various forms
// of metrics in form data
export type Metric = {
label: string;
} & Partial<AdhocMetric>;

View File

@ -0,0 +1,26 @@
import ChartProps from '../models/ChartProps';
import { DatasourceType } from './Datasource';
import { FormData } from './FormData';
import { Metric } from './Metric';
export interface QueryObject {
granularity: string;
groupby?: string[];
metrics?: Metric[];
}
export interface QueryContext {
datasource: {
id: number;
type: DatasourceType;
};
queries: QueryObject[];
}
export type BuildQueryFunction<T extends FormData> = (formData: T) => QueryContext;
export type TransformPropsFunction = (
chartProps: ChartProps,
) => {
[key: string]: any;
};

View File

@ -20,7 +20,7 @@ describe('ChartPlugin', () => {
describe('new ChartPlugin()', () => { describe('new ChartPlugin()', () => {
const FakeChart = () => 'test'; const FakeChart = () => 'test';
const buildQuery = (formData: FormData) => ({ const buildQuery = (_: FormData) => ({
datasource: { id: 1, type: DatasourceType.Table }, datasource: { id: 1, type: DatasourceType.Table },
queries: [{ granularity: 'day' }], queries: [{ granularity: 'day' }],
}); });

View File

@ -1,4 +1,4 @@
import { DatasourceKey } from '../../src/query/DatasourceKey'; import { DatasourceKey } from '../../src';
describe('DatasourceKey', () => { describe('DatasourceKey', () => {
const tableKey = '5__table'; const tableKey = '5__table';

View File

@ -1,11 +1,6 @@
import { ColumnType } from '../../src/query/Column'; import { ColumnType } from '../../src/types/Column';
import { import { AdhocMetric, Aggregate, ExpressionType } from '../../src/types/Metric';
AdhocMetric, import Metrics, { LABEL_MAX_LENGTH } from '../../src/query/Metrics';
Aggregate,
ExpressionType,
LABEL_MAX_LENGTH,
Metrics,
} from '../../src/query/Metric';
describe('Metrics', () => { describe('Metrics', () => {
let metrics: Metrics; let metrics: Metrics;

View File

@ -1,4 +1,4 @@
import { buildQueryContext } from '../../src/query/buildQueryContext'; import { buildQueryContext } from '../../src';
describe('queryContextBuilder', () => { describe('queryContextBuilder', () => {
it('should build datasource for table sources', () => { it('should build datasource for table sources', () => {

View File

@ -1,4 +1,5 @@
import { buildQueryObject, QueryObject } from '../../src/query/buildQueryObject'; import buildQueryObject from '../../src/query/buildQueryObject';
import { QueryObject } from '../../src';
describe('queryObjectBuilder', () => { describe('queryObjectBuilder', () => {
let query: QueryObject; let query: QueryObject;

View File

@ -1,11 +1,10 @@
import * as CategoricalColorNamespace from './CategoricalColorNamespace'; import * as CategoricalColorNamespace from './CategoricalColorNamespace';
export { CategoricalColorNamespace }; export { CategoricalColorNamespace };
export { ColorSchemeConfig } from './ColorScheme';
export { default as CategoricalColorScale } from './CategoricalColorScale'; export { default as CategoricalColorScale } from './CategoricalColorScale';
export { default as CategoricalScheme } from './CategoricalScheme'; export { default as CategoricalScheme } from './CategoricalScheme';
export { default as getCategoricalSchemeRegistry } from './CategoricalSchemeRegistrySingleton'; export { default as getCategoricalSchemeRegistry } from './CategoricalSchemeRegistrySingleton';
export { default as getSequentialSchemeRegistry } from './SequentialSchemeRegistrySingleton'; export { default as getSequentialSchemeRegistry } from './SequentialSchemeRegistrySingleton';
export { default as SequentialScheme, SequentialSchemeConfig } from './SequentialScheme'; export { default as SequentialScheme } from './SequentialScheme';
export const BRAND_COLOR = '#00A699'; export const BRAND_COLOR = '#00A699';

View File

@ -1,5 +1,5 @@
import { ClientConfig, SupersetClientClass } from './SupersetClientClass'; import SupersetClientClass from './SupersetClientClass';
import { RequestConfig, SupersetClientResponse } from './types'; import { ClientConfig, RequestConfig, SupersetClientInterface } from './types';
let singletonClient: SupersetClientClass | undefined; let singletonClient: SupersetClientClass | undefined;
@ -11,20 +11,6 @@ function getInstance(maybeClient: SupersetClientClass | undefined): SupersetClie
return maybeClient; return maybeClient;
} }
export interface SupersetClientInterface {
configure: (config?: ClientConfig) => SupersetClientClass;
delete: (request: RequestConfig) => Promise<SupersetClientResponse>;
get: (request: RequestConfig) => Promise<SupersetClientResponse>;
getInstance: (maybeClient?: SupersetClientClass) => SupersetClientClass;
init: (force?: boolean) => Promise<string | undefined>;
isAuthenticated: () => boolean;
post: (request: RequestConfig) => Promise<SupersetClientResponse>;
put: (request: RequestConfig) => Promise<SupersetClientResponse>;
reAuthenticate: () => Promise<string | undefined>;
request: (request: RequestConfig) => Promise<SupersetClientResponse>;
reset: () => void;
}
const SupersetClient: SupersetClientInterface = { const SupersetClient: SupersetClientInterface = {
configure: (config?: ClientConfig): SupersetClientClass => { configure: (config?: ClientConfig): SupersetClientClass => {
singletonClient = new SupersetClientClass(config); singletonClient = new SupersetClientClass(config);

View File

@ -1,29 +1,19 @@
import callApi from './callApi'; import callApi from './callApi';
import { import {
ClientConfig,
ClientTimeout, ClientTimeout,
Credentials, Credentials,
CsrfPromise,
CsrfToken,
Headers, Headers,
Host, Host,
Mode, Mode,
SupersetClientResponse, Protocol,
RequestConfig, RequestConfig,
SupersetClientResponse,
} from './types'; } from './types';
type CsrfToken = string; export default class SupersetClientClass {
type CsrfPromise = Promise<string | undefined>;
type Protocol = 'http:' | 'https:';
export interface ClientConfig {
credentials?: Credentials;
csrfToken?: CsrfToken;
headers?: Headers;
host?: Host;
protocol?: Protocol;
mode?: Mode;
timeout?: ClientTimeout;
}
export class SupersetClientClass {
credentials: Credentials; credentials: Credentials;
csrfToken?: CsrfToken; csrfToken?: CsrfToken;
csrfPromise?: CsrfPromise; csrfPromise?: CsrfPromise;

View File

@ -1,4 +1,4 @@
export { default as callApi } from './callApi'; export { default as callApi } from './callApi';
export { default as SupersetClient, SupersetClientInterface } from './SupersetClient'; export { default as SupersetClient } from './SupersetClient';
export { SupersetClientClass } from './SupersetClientClass'; export { default as SupersetClientClass } from './SupersetClientClass';
export * from './types'; export * from './types';

View File

@ -1,3 +1,5 @@
import SupersetClientClass from './SupersetClientClass';
export type Body = RequestInit['body']; export type Body = RequestInit['body'];
export type Cache = RequestInit['cache']; export type Cache = RequestInit['cache'];
export type Credentials = RequestInit['credentials']; export type Credentials = RequestInit['credentials'];
@ -61,4 +63,32 @@ export interface JsonTextResponse {
text?: string; text?: string;
} }
export type CsrfToken = string;
export type CsrfPromise = Promise<string | undefined>;
export type Protocol = 'http:' | 'https:';
export interface ClientConfig {
credentials?: Credentials;
csrfToken?: CsrfToken;
headers?: Headers;
host?: Host;
protocol?: Protocol;
mode?: Mode;
timeout?: ClientTimeout;
}
export interface SupersetClientInterface {
configure: (config?: ClientConfig) => SupersetClientClass;
delete: (request: RequestConfig) => Promise<SupersetClientResponse>;
get: (request: RequestConfig) => Promise<SupersetClientResponse>;
getInstance: (maybeClient?: SupersetClientClass) => SupersetClientClass;
init: (force?: boolean) => Promise<string | undefined>;
isAuthenticated: () => boolean;
post: (request: RequestConfig) => Promise<SupersetClientResponse>;
put: (request: RequestConfig) => Promise<SupersetClientResponse>;
reAuthenticate: () => Promise<string | undefined>;
request: (request: RequestConfig) => Promise<SupersetClientResponse>;
reset: () => void;
}
export type SupersetClientResponse = Response | JsonTextResponse; export type SupersetClientResponse = Response | JsonTextResponse;

View File

@ -1,7 +1,7 @@
import fetchMock from 'fetch-mock'; import fetchMock from 'fetch-mock';
import { BigNumber } from 'bignumber.js'; import { BigNumber } from 'bignumber.js';
import { SupersetClientClass, ClientConfig } from '../src/SupersetClientClass'; import { SupersetClientClass, ClientConfig } from '../src';
import throwIfCalled from './utils/throwIfCalled'; import throwIfCalled from './utils/throwIfCalled';
import { LOGIN_GLOB } from './fixtures/constants'; import { LOGIN_GLOB } from './fixtures/constants';

View File

@ -1,13 +1,12 @@
export { default as ExtensibleFunction } from './models/ExtensibleFunction'; export { default as ExtensibleFunction } from './models/ExtensibleFunction';
export { default as Plugin } from './models/Plugin'; export { default as Plugin } from './models/Plugin';
export { default as Preset, PresetConfig } from './models/Preset'; export { default as Preset } from './models/Preset';
export { default as Registry, RegistryConfig, OverwritePolicy } from './models/Registry'; export { default as Registry } from './models/Registry';
export { export { default as RegistryWithDefaultKey } from './models/RegistryWithDefaultKey';
default as RegistryWithDefaultKey,
RegistryWithDefaultKeyConfig,
} from './models/RegistryWithDefaultKey';
export { default as convertKeysToCamelCase } from './utils/convertKeysToCamelCase'; export { default as convertKeysToCamelCase } from './utils/convertKeysToCamelCase';
export { default as isDefined } from './utils/isDefined'; export { default as isDefined } from './utils/isDefined';
export { default as isRequired } from './utils/isRequired'; export { default as isRequired } from './utils/isRequired';
export { default as makeSingleton } from './utils/makeSingleton'; export { default as makeSingleton } from './utils/makeSingleton';
export * from './types';

View File

@ -1,19 +1,19 @@
import Plugin from './Plugin'; import Plugin from './Plugin';
export interface PresetConfig {
name?: string;
description?: string;
presets?: Preset[];
plugins?: Plugin[];
}
export default class Preset { export default class Preset {
name: string; name: string;
description: string; description: string;
presets: Preset[]; presets: Preset[];
plugins: Plugin[]; plugins: Plugin[];
constructor(config: PresetConfig = {}) { constructor(
config: {
name?: string;
description?: string;
presets?: Preset[];
plugins?: Plugin[];
} = {},
) {
const { name = '', description = '', presets = [], plugins = [] } = config; const { name = '', description = '', presets = [], plugins = [] } = config;
this.name = name; this.name = name;
this.description = description; this.description = description;

View File

@ -1,10 +1,5 @@
/* eslint no-console: 0 */ /* eslint no-console: 0 */
import { OverwritePolicy } from '../types';
export enum OverwritePolicy {
ALLOW = 'ALLOW',
PROHIBIT = 'PROHIBIT',
WARN = 'WARN',
}
interface ItemWithValue<T> { interface ItemWithValue<T> {
value: T; value: T;

View File

@ -1,6 +1,6 @@
import Registry, { RegistryConfig } from './Registry'; import Registry, { RegistryConfig } from './Registry';
export interface RegistryWithDefaultKeyConfig extends RegistryConfig { interface RegistryWithDefaultKeyConfig extends RegistryConfig {
initialDefaultKey?: string; initialDefaultKey?: string;
setFirstItemAsDefault?: boolean; setFirstItemAsDefault?: boolean;
} }

View File

@ -0,0 +1,7 @@
/* eslint-disable import/prefer-default-export */
export enum OverwritePolicy {
ALLOW = 'ALLOW',
PROHIBIT = 'PROHIBIT',
WARN = 'WARN',
}

View File

@ -1,6 +1,6 @@
/* eslint no-console: 0 */ /* eslint no-console: 0 */
import mockConsole from 'jest-mock-console'; import mockConsole from 'jest-mock-console';
import Registry, { OverwritePolicy } from '../../src/models/Registry'; import { Registry, OverwritePolicy } from '../../src';
describe('Registry', () => { describe('Registry', () => {
it('exists', () => { it('exists', () => {

View File

@ -1,5 +1,11 @@
import UntypedJed from 'jed'; import UntypedJed from 'jed';
import { Jed, LanguagePack } from './jed'; import { TranslatorConfig } from './types';
interface Jed {
translate(input: string): Jed;
ifPlural(value: number, plural: string): Jed;
fetch(...args: any[]): string;
}
const DEFAULT_LANGUAGE_PACK = { const DEFAULT_LANGUAGE_PACK = {
domain: 'superset', domain: 'superset',
@ -14,12 +20,6 @@ const DEFAULT_LANGUAGE_PACK = {
}, },
}; };
export { LanguagePack };
export interface TranslatorConfig {
languagePack?: LanguagePack;
}
export default class Translator { export default class Translator {
i18n: Jed; i18n: Jed;

View File

@ -1,5 +1,6 @@
/* eslint no-console: 0 */ /* eslint no-console: 0 */
import Translator, { TranslatorConfig } from './Translator'; import Translator from './Translator';
import { TranslatorConfig } from './types';
let singleton: Translator; let singleton: Translator;
let isConfigured = false; let isConfigured = false;

View File

@ -1,2 +1,2 @@
export { configure, t, tn } from './TranslatorSingleton'; export { configure, t, tn } from './TranslatorSingleton';
export { TranslatorConfig, LanguagePack } from './Translator'; export * from './types';

View File

@ -20,3 +20,7 @@ export interface Jed {
ifPlural(value: number, plural: string): Jed; ifPlural(value: number, plural: string): Jed;
fetch(...args: any[]): string; fetch(...args: any[]): string;
} }
export interface TranslatorConfig {
languagePack?: LanguagePack;
}