From bbff282b89e408bd08c2440ebd15584dc8913f84 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Thu, 31 Oct 2019 15:54:10 -0700 Subject: [PATCH] GEL: wrap arrow utils in async load (#20134) --- .../features/expressions/ExpressionDatasource.ts | 13 ++++++++++--- public/app/features/expressions/util.ts | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/public/app/features/expressions/ExpressionDatasource.ts b/public/app/features/expressions/ExpressionDatasource.ts index 99632b762d4..d9c900f0c9a 100644 --- a/public/app/features/expressions/ExpressionDatasource.ts +++ b/public/app/features/expressions/ExpressionDatasource.ts @@ -10,10 +10,9 @@ import { ExpressionQueryEditor } from './ExpressionQueryEditor'; import { Observable, from } from 'rxjs'; import { config } from '@grafana/runtime'; import { getBackendSrv } from 'app/core/services/backend_srv'; -import { gelResponseToDataFrames } from './util'; /** - * This is a singleton that is not actually instanciated + * This is a singleton that is not actually instantiated */ export class ExpressionDatasourceApi extends DataSourceApi { constructor(instanceSettings: DataSourceInstanceSettings) { @@ -53,11 +52,19 @@ export class ExpressionDatasourceApi extends DataSourceApi { queries: queries, }) .then((rsp: any) => { - return { data: gelResponseToDataFrames(rsp) } as DataQueryResponse; + return this.toDataQueryResponse(rsp); }); return from(req); } + /** + * This makes the arrow libary loading async. + */ + async toDataQueryResponse(rsp: any): Promise { + const { gelResponseToDataFrames } = await import(/* webpackChunkName: "apache-arrow-util" */ './util'); + return { data: gelResponseToDataFrames(rsp) }; + } + testDatasource() { return Promise.resolve({}); } diff --git a/public/app/features/expressions/util.ts b/public/app/features/expressions/util.ts index ca3166101c2..4beb0feadc3 100644 --- a/public/app/features/expressions/util.ts +++ b/public/app/features/expressions/util.ts @@ -1,7 +1,7 @@ import { DataFrame, FieldType, Field, Vector } from '@grafana/data'; import { Table, ArrowType } from 'apache-arrow'; -export function base64StringToArrowTable(text: string) { +export function base64StringToArrowTable(text: string): Table { const b64 = atob(text); const arr = Uint8Array.from(b64, c => { return c.charCodeAt(0);