@deephaven/app-utils 0.94.1-beta.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AppDashboards.d.ts +2 -1
- package/dist/components/AppDashboards.d.ts.map +1 -1
- package/dist/components/AppDashboards.js.map +1 -1
- package/dist/components/AuthBootstrap.js.map +1 -1
- package/dist/components/ConnectionBootstrap.js.map +1 -1
- package/dist/plugins/PluginUtils.d.ts +1 -1
- package/dist/plugins/PluginUtils.d.ts.map +1 -1
- package/dist/plugins/PluginUtils.js.map +1 -1
- package/dist/storage/LayoutStorage.d.ts +2 -2
- package/dist/storage/LayoutStorage.d.ts.map +1 -1
- package/dist/storage/LayoutStorage.js.map +1 -1
- package/dist/storage/LocalWorkspaceStorage.d.ts +2 -2
- package/dist/storage/LocalWorkspaceStorage.d.ts.map +1 -1
- package/dist/storage/LocalWorkspaceStorage.js.map +1 -1
- package/dist/storage/UserLayoutUtils.d.ts +3 -2
- package/dist/storage/UserLayoutUtils.d.ts.map +1 -1
- package/dist/storage/UserLayoutUtils.js.map +1 -1
- package/dist/storage/grpc/GrpcFileStorage.d.ts +1 -1
- package/dist/storage/grpc/GrpcFileStorage.d.ts.map +1 -1
- package/dist/storage/grpc/GrpcFileStorage.js.map +1 -1
- package/dist/storage/grpc/GrpcFileStorageTable.d.ts +2 -2
- package/dist/storage/grpc/GrpcFileStorageTable.d.ts.map +1 -1
- package/dist/storage/grpc/GrpcFileStorageTable.js.map +1 -1
- package/dist/storage/grpc/GrpcLayoutStorage.d.ts +2 -1
- package/dist/storage/grpc/GrpcLayoutStorage.d.ts.map +1 -1
- package/dist/storage/grpc/GrpcLayoutStorage.js.map +1 -1
- package/package.json +22 -22
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type ItemConfig, type Settings as LayoutSettings } from '@deephaven/golden-layout';
|
|
2
|
+
import type LayoutManager from '@deephaven/golden-layout';
|
|
2
3
|
interface AppDashboardsProps {
|
|
3
4
|
dashboards: {
|
|
4
5
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppDashboards.d.ts","sourceRoot":"","sources":["../../src/components/AppDashboards.tsx"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"AppDashboards.d.ts","sourceRoot":"","sources":["../../src/components/AppDashboards.tsx"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,IAAI,cAAc,EAChC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAG1D,UAAU,kBAAkB;IAC1B,UAAU,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,cAAc,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IACJ,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,oBAAoB,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5D,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,EAC5B,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,OAAO,EACP,cAAmC,GACpC,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA+ClC;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppDashboards.js","names":["React","useCallback","classNames","DashboardUtils","LazyDashboard","useObjectFetcher","LoadingOverlay","jsx","_jsx","AppDashboards","_ref","dashboards","activeDashboard","onLayoutInitialized","onGoldenLayoutChange","plugins","emptyDashboard","fetchObject","hydratePanel","hydrateProps","id","metadata","_objectSpread","fetch","_fetch","_asyncToGenerator","apply","arguments","localDashboardId","e","hydrate","className","children","map","d","active","isActive","layoutConfig","layoutSettings","key"],"sources":["../../src/components/AppDashboards.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n DashboardUtils,\n DehydratedDashboardPanelProps,\n LazyDashboard,\n} from '@deephaven/dashboard';\nimport { useObjectFetcher } from '@deephaven/jsapi-bootstrap';\nimport
|
|
1
|
+
{"version":3,"file":"AppDashboards.js","names":["React","useCallback","classNames","DashboardUtils","LazyDashboard","useObjectFetcher","LoadingOverlay","jsx","_jsx","AppDashboards","_ref","dashboards","activeDashboard","onLayoutInitialized","onGoldenLayoutChange","plugins","emptyDashboard","fetchObject","hydratePanel","hydrateProps","id","metadata","_objectSpread","fetch","_fetch","_asyncToGenerator","apply","arguments","localDashboardId","e","hydrate","className","children","map","d","active","isActive","layoutConfig","layoutSettings","key"],"sources":["../../src/components/AppDashboards.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport classNames from 'classnames';\nimport {\n DashboardUtils,\n type DehydratedDashboardPanelProps,\n LazyDashboard,\n} from '@deephaven/dashboard';\nimport { useObjectFetcher } from '@deephaven/jsapi-bootstrap';\nimport {\n type ItemConfig,\n type Settings as LayoutSettings,\n} from '@deephaven/golden-layout';\nimport type LayoutManager from '@deephaven/golden-layout';\nimport { LoadingOverlay } from '@deephaven/components';\n\ninterface AppDashboardsProps {\n dashboards: {\n id: string;\n layoutConfig: ItemConfig[];\n layoutSettings?: Partial<LayoutSettings>;\n key?: string;\n }[];\n activeDashboard: string;\n onLayoutInitialized?: () => void;\n onGoldenLayoutChange: (goldenLayout: LayoutManager) => void;\n plugins: JSX.Element[];\n emptyDashboard?: JSX.Element;\n}\n\nexport function AppDashboards({\n dashboards,\n activeDashboard,\n onLayoutInitialized,\n onGoldenLayoutChange,\n plugins,\n emptyDashboard = <LoadingOverlay />,\n}: AppDashboardsProps): JSX.Element {\n const fetchObject = useObjectFetcher();\n\n const hydratePanel = useCallback(\n (hydrateProps: DehydratedDashboardPanelProps, id: string) => {\n const { metadata } = hydrateProps;\n try {\n if (metadata != null) {\n return {\n fetch: async () => fetchObject(metadata),\n ...hydrateProps,\n localDashboardId: id,\n };\n }\n } catch (e: unknown) {\n // Ignore being unable to get the variable descriptor, do the default dashboard hydration\n }\n return DashboardUtils.hydrate(hydrateProps, id);\n },\n [fetchObject]\n );\n\n return (\n <div className=\"tab-content\">\n {dashboards.map(d => (\n <div\n key={d.id}\n className={classNames('tab-pane', {\n active: d.id === activeDashboard,\n })}\n >\n <LazyDashboard\n id={d.id}\n key={d.key}\n isActive={d.id === activeDashboard}\n emptyDashboard={emptyDashboard}\n layoutConfig={d.layoutConfig}\n layoutSettings={d.layoutSettings}\n onLayoutInitialized={onLayoutInitialized}\n onGoldenLayoutChange={onGoldenLayoutChange}\n hydrate={hydratePanel}\n plugins={plugins}\n />\n </div>\n ))}\n </div>\n );\n}\n\nexport default AppDashboards;\n"],"mappings":";;;;;;;AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,SACEC,cAAc,EAEdC,aAAa,QACR,sBAAsB;AAC7B,SAASC,gBAAgB,QAAQ,4BAA4B;AAM7D,SAASC,cAAc,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAgBvD,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAOO;EAAA,IAPN;IAC5BC,UAAU;IACVC,eAAe;IACfC,mBAAmB;IACnBC,oBAAoB;IACpBC,OAAO;IACPC,cAAc,gBAAGR,IAAA,CAACF,cAAc,IAAE;EAChB,CAAC,GAAAI,IAAA;EACnB,IAAMO,WAAW,GAAGZ,gBAAgB,CAAC,CAAC;EAEtC,IAAMa,YAAY,GAAGjB,WAAW,CAC9B,CAACkB,YAA2C,EAAEC,EAAU,KAAK;IAC3D,IAAM;MAAEC;IAAS,CAAC,GAAGF,YAAY;IACjC,IAAI;MACF,IAAIE,QAAQ,IAAI,IAAI,EAAE;QACpB,OAAAC,aAAA,CAAAA,aAAA;UACEC,KAAK;YAAA,IAAAC,MAAA,GAAAC,iBAAA,CAAE;cAAA,OAAYR,WAAW,CAACI,QAAQ,CAAC;YAAA;YAAA,SAAAE,MAAA;cAAA,OAAAC,MAAA,CAAAE,KAAA,OAAAC,SAAA;YAAA;YAAA,OAAAJ,KAAA;UAAA;QAAA,GACrCJ,YAAY;UACfS,gBAAgB,EAAER;QAAE;MAExB;IACF,CAAC,CAAC,OAAOS,CAAU,EAAE;MACnB;IAAA;IAEF,OAAO1B,cAAc,CAAC2B,OAAO,CAACX,YAAY,EAAEC,EAAE,CAAC;EACjD,CAAC,EACD,CAACH,WAAW,CACd,CAAC;EAED,oBACET,IAAA;IAAKuB,SAAS,EAAC,aAAa;IAAAC,QAAA,EACzBrB,UAAU,CAACsB,GAAG,CAACC,CAAC,iBACf1B,IAAA;MAEEuB,SAAS,EAAE7B,UAAU,CAAC,UAAU,EAAE;QAChCiC,MAAM,EAAED,CAAC,CAACd,EAAE,KAAKR;MACnB,CAAC,CAAE;MAAAoB,QAAA,eAEHxB,IAAA,CAACJ,aAAa;QACZgB,EAAE,EAAEc,CAAC,CAACd,EAAG;QAETgB,QAAQ,EAAEF,CAAC,CAACd,EAAE,KAAKR,eAAgB;QACnCI,cAAc,EAAEA,cAAe;QAC/BqB,YAAY,EAAEH,CAAC,CAACG,YAAa;QAC7BC,cAAc,EAAEJ,CAAC,CAACI,cAAe;QACjCzB,mBAAmB,EAAEA,mBAAoB;QACzCC,oBAAoB,EAAEA,oBAAqB;QAC3CgB,OAAO,EAAEZ,YAAa;QACtBH,OAAO,EAAEA;MAAQ,GARZmB,CAAC,CAACK,GASR;IAAC,GAhBGL,CAAC,CAACd,EAiBJ,CACN;EAAC,CACC,CAAC;AAEV;AAEA,eAAeX,aAAa"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthBootstrap.js","names":["React","useContext","useEffect","useMemo","useState","AuthPluginAnonymous","AuthPluginParent","AuthPluginPsk","LoadingOverlay","useClient","getErrorMessage","PluginsContext","getAuthPluginComponent","LoginNotifier","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CORE_AUTH_PLUGINS","Map","AuthPlugin","AuthBootstrap","_ref","children","client","plugins","authConfig","setAuthConfig","error","setError","initAuthConfigValues","isCanceled","loadAuthConfigValues","_loadAuthConfigValues","apply","arguments","_asyncToGenerator","newAuthConfigValues","getAuthConfigValues","e","AuthComponent","undefined","isLoading","errorMessage","authConfigValues"],"sources":["../../src/components/AuthBootstrap.tsx"],"sourcesContent":["import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport {\n AuthConfigMap,\n AuthPluginAnonymous,\n AuthPluginParent,\n AuthPluginPsk,\n} from '@deephaven/auth-plugins';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { getAuthPluginComponent } from '../plugins';\nimport LoginNotifier from './LoginNotifier';\n\nexport type AuthBootstrapProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\n/** Core auth plugins that are always loaded */\nconst CORE_AUTH_PLUGINS = new Map([\n [\n '@deephaven/auth-plugins.AuthPluginParent',\n { AuthPlugin: AuthPluginParent },\n ],\n ['@deephaven/auth-plugins.AuthPluginPsk', { AuthPlugin: AuthPluginPsk }],\n [\n '@deephaven/auth-plugins.AuthPluginAnonymous',\n { AuthPlugin: AuthPluginAnonymous },\n ],\n]);\n\n/**\n * AuthBootstrap component. Handles displaying the auth plugin and authenticating.\n */\nexport function AuthBootstrap({ children }: AuthBootstrapProps): JSX.Element {\n const client = useClient();\n // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load\n // We want to load the auth config values in parallel with the plugins\n const plugins = useContext(PluginsContext);\n const [authConfig, setAuthConfig] = useState<AuthConfigMap>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initAuthConfigValues() {\n let isCanceled = false;\n async function loadAuthConfigValues(): Promise<void> {\n try {\n const newAuthConfigValues = (await client.getAuthConfigValues()) as [\n string,\n string,\n ][];\n if (!isCanceled) {\n setAuthConfig(new Map(newAuthConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadAuthConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const AuthComponent = useMemo(() => {\n if (plugins == null || authConfig == null) {\n return undefined;\n }\n\n try {\n return getAuthPluginComponent(plugins, authConfig, CORE_AUTH_PLUGINS);\n } catch (e) {\n setError(e);\n }\n }, [authConfig, plugins]);\n\n const isLoading = AuthComponent == null || authConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n return (\n <AuthComponent authConfigValues={authConfig}>\n <>\n <LoginNotifier />\n {children}\n </>\n </AuthComponent>\n );\n}\n\nexport default AuthBootstrap;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AACvE,SAEEC,mBAAmB,EACnBC,gBAAgB,EAChBC,aAAa,QACR,yBAAyB;AAChC,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,4BAA4B;AACtD,SAASC,eAAe,QAAQ,kBAAkB;AAClD,SAASC,cAAc,QAAQ,mBAAmB;AAAC,SAC1CC,sBAAsB;AAAA,OACxBC,aAAa;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AASpB;AACA,IAAMC,iBAAiB,GAAG,IAAIC,GAAG,CAAC,CAChC,CACE,0CAA0C,EAC1C;EAAEC,UAAU,EAAEhB;AAAiB,CAAC,CACjC,EACD,CAAC,uCAAuC,EAAE;EAAEgB,UAAU,EAAEf;AAAc,CAAC,CAAC,EACxE,CACE,6CAA6C,EAC7C;EAAEe,UAAU,EAAEjB;AAAoB,CAAC,CACpC,CACF,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASkB,aAAaA,CAAAC,IAAA,EAAgD;EAAA,IAA/C;IAAEC;EAA6B,CAAC,GAAAD,IAAA;EAC5D,IAAME,MAAM,GAAGjB,SAAS,CAAC,CAAC;EAC1B;EACA;EACA,IAAMkB,OAAO,GAAG1B,UAAU,CAACU,cAAc,CAAC;EAC1C,IAAM,CAACiB,UAAU,EAAEC,aAAa,CAAC,GAAGzB,QAAQ,CAAgB,CAAC;EAC7D,IAAM,CAAC0B,KAAK,EAAEC,QAAQ,CAAC,GAAG3B,QAAQ,CAAU,CAAC;EAE7CF,SAAS,CACP,SAAS8B,oBAAoBA,CAAA,EAAG;IAC9B,IAAIC,UAAU,GAAG,KAAK;IAAC,SACRC,oBAAoBA,CAAA;MAAA,OAAAC,qBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,sBAAA;MAAAA,qBAAA,GAAAG,iBAAA,CAAnC,aAAqD;QACnD,IAAI;UACF,IAAMC,mBAAmB,SAAUb,MAAM,CAACc,mBAAmB,CAAC,CAG3D;UACH,IAAI,CAACP,UAAU,EAAE;YACfJ,aAAa,CAAC,IAAIR,GAAG,CAACkB,mBAAmB,CAAC,CAAC;UAC7C;QACF,CAAC,CAAC,OAAOE,CAAC,EAAE;UACV,IAAI,CAACR,UAAU,EAAE;YACfF,QAAQ,CAACU,CAAC,CAAC;UACb;QACF;MACF,CAAC;MAAA,OAAAN,qBAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,oBAAoB,CAAC,CAAC;IACtB,OAAO,MAAM;MACXD,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EACD,CAACP,MAAM,CACT,CAAC;EAED,IAAMgB,aAAa,GAAGvC,OAAO,CAAC,MAAM;IAClC,IAAIwB,OAAO,IAAI,IAAI,IAAIC,UAAU,IAAI,IAAI,EAAE;MACzC,OAAOe,SAAS;IAClB;IAEA,IAAI;MACF,OAAO/B,sBAAsB,CAACe,OAAO,EAAEC,UAAU,EAAER,iBAAiB,CAAC;IACvE,CAAC,CAAC,OAAOqB,CAAC,EAAE;MACVV,QAAQ,CAACU,CAAC,CAAC;IACb;EACF,CAAC,EAAE,CAACb,UAAU,EAAED,OAAO,CAAC,CAAC;EAEzB,IAAMiB,SAAS,GAAGF,aAAa,IAAI,IAAI,IAAId,UAAU,IAAI,IAAI;EAE7D,IAAIgB,SAAS,IAAId,KAAK,IAAI,IAAI,EAAE;IAC9B,oBACEf,IAAA,CAACP,cAAc;MACboC,SAAS,EAAEA,SAAS,IAAId,KAAK,IAAI,IAAK;MACtCe,YAAY,EAAEnC,eAAe,CAACoB,KAAK;IAAE,CACtC,CAAC;EAEN;EACA,oBACEf,IAAA,CAAC2B,aAAa;IAACI,gBAAgB,EAAElB,UAAW;IAAAH,QAAA,eAC1CN,KAAA,CAAAF,SAAA;MAAAQ,QAAA,gBACEV,IAAA,CAACF,aAAa,IAAE,CAAC,EAChBY,QAAQ;IAAA,CACT;EAAC,CACU,CAAC;AAEpB;AAEA,eAAeF,aAAa"}
|
|
1
|
+
{"version":3,"file":"AuthBootstrap.js","names":["React","useContext","useEffect","useMemo","useState","AuthPluginAnonymous","AuthPluginParent","AuthPluginPsk","LoadingOverlay","useClient","getErrorMessage","PluginsContext","getAuthPluginComponent","LoginNotifier","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CORE_AUTH_PLUGINS","Map","AuthPlugin","AuthBootstrap","_ref","children","client","plugins","authConfig","setAuthConfig","error","setError","initAuthConfigValues","isCanceled","loadAuthConfigValues","_loadAuthConfigValues","apply","arguments","_asyncToGenerator","newAuthConfigValues","getAuthConfigValues","e","AuthComponent","undefined","isLoading","errorMessage","authConfigValues"],"sources":["../../src/components/AuthBootstrap.tsx"],"sourcesContent":["import React, { useContext, useEffect, useMemo, useState } from 'react';\nimport {\n type AuthConfigMap,\n AuthPluginAnonymous,\n AuthPluginParent,\n AuthPluginPsk,\n} from '@deephaven/auth-plugins';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { getErrorMessage } from '@deephaven/utils';\nimport { PluginsContext } from '@deephaven/plugin';\nimport { getAuthPluginComponent } from '../plugins';\nimport LoginNotifier from './LoginNotifier';\n\nexport type AuthBootstrapProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\n/** Core auth plugins that are always loaded */\nconst CORE_AUTH_PLUGINS = new Map([\n [\n '@deephaven/auth-plugins.AuthPluginParent',\n { AuthPlugin: AuthPluginParent },\n ],\n ['@deephaven/auth-plugins.AuthPluginPsk', { AuthPlugin: AuthPluginPsk }],\n [\n '@deephaven/auth-plugins.AuthPluginAnonymous',\n { AuthPlugin: AuthPluginAnonymous },\n ],\n]);\n\n/**\n * AuthBootstrap component. Handles displaying the auth plugin and authenticating.\n */\nexport function AuthBootstrap({ children }: AuthBootstrapProps): JSX.Element {\n const client = useClient();\n // `useContext` instead of `usePlugins` so that we don't have to wait for the plugins to load\n // We want to load the auth config values in parallel with the plugins\n const plugins = useContext(PluginsContext);\n const [authConfig, setAuthConfig] = useState<AuthConfigMap>();\n const [error, setError] = useState<unknown>();\n\n useEffect(\n function initAuthConfigValues() {\n let isCanceled = false;\n async function loadAuthConfigValues(): Promise<void> {\n try {\n const newAuthConfigValues = (await client.getAuthConfigValues()) as [\n string,\n string,\n ][];\n if (!isCanceled) {\n setAuthConfig(new Map(newAuthConfigValues));\n }\n } catch (e) {\n if (!isCanceled) {\n setError(e);\n }\n }\n }\n loadAuthConfigValues();\n return () => {\n isCanceled = true;\n };\n },\n [client]\n );\n\n const AuthComponent = useMemo(() => {\n if (plugins == null || authConfig == null) {\n return undefined;\n }\n\n try {\n return getAuthPluginComponent(plugins, authConfig, CORE_AUTH_PLUGINS);\n } catch (e) {\n setError(e);\n }\n }, [authConfig, plugins]);\n\n const isLoading = AuthComponent == null || authConfig == null;\n\n if (isLoading || error != null) {\n return (\n <LoadingOverlay\n isLoading={isLoading && error == null}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n return (\n <AuthComponent authConfigValues={authConfig}>\n <>\n <LoginNotifier />\n {children}\n </>\n </AuthComponent>\n );\n}\n\nexport default AuthBootstrap;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionBootstrap.js","names":["React","useCallback","useEffect","useMemo","useState","BasicModal","DebouncedModal","InfoModal","LoadingOverlay","LoadingSpinner","ObjectFetcherContext","ObjectFetchManagerContext","sanitizeVariableDescriptor","useApi","useClient","Log","assertNotNull","vsDebugDisconnect","ConnectionContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ConnectionBootstrap","_ref","children","api","client","error","setError","connection","setConnection","connectionState","setConnectionState","isAuthFailed","isShutdown","isReconnecting","isNotConnecting","initConnection","isCanceled","loadConnection","_loadConnection","apply","arguments","_asyncToGenerator","newConnection","getAsIdeConnection","e","listenForDisconnect","handleDisconnect","event","detail","info","concat","JSON","stringify","removerFn","addEventListener","IdeConnection","EVENT_DISCONNECT","listenForReconnect","handleReconnect","CoreClient","EVENT_RECONNECT","listenForShutdown","handleShutdown","EVENT_SHUTDOWN","listenForAuthFailed","handleAuthFailed","warn","EVENT_RECONNECT_AUTH_FAILED","objectFetcher","_ref2","descriptor","getObject","_x","objectManager","subscribe","onUpdate","fetch","status","handleRefresh","window","location","reload","isLoading","errorMessage","undefined","Provider","value","isOpen","debounceMs","icon","title","subtitle","confirmButtonText","onConfirm","headerText","bodyText"],"sources":["../../src/components/ConnectionBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n BasicModal,\n DebouncedModal,\n InfoModal,\n LoadingOverlay,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n ObjectFetcherContext,\n ObjectFetchManager,\n ObjectFetchManagerContext,\n sanitizeVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport { vsDebugDisconnect } from '@deephaven/icons';\nimport ConnectionContext from './ConnectionContext';\n\nconst log = Log.module('@deephaven/app-utils.ConnectionBootstrap');\n\nexport type ConnectionBootstrapProps = {\n /**\n * The children to render wrapped with the ConnectionContext.\n * Will not render children until the connection is created.\n */\n children: React.ReactNode;\n};\n\n/**\n * ConnectionBootstrap component. Handles initializing the connection.\n */\nexport function ConnectionBootstrap({\n children,\n}: ConnectionBootstrapProps): JSX.Element {\n const api = useApi();\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [connection, setConnection] = useState<dh.IdeConnection>();\n const [connectionState, setConnectionState] = useState<\n | 'not_connecting'\n | 'connecting'\n | 'connected'\n | 'reconnecting'\n | 'failed'\n | 'shutdown'\n >('connecting');\n const isAuthFailed = connectionState === 'failed';\n const isShutdown = connectionState === 'shutdown';\n const isReconnecting = connectionState === 'reconnecting';\n const isNotConnecting = connectionState === 'not_connecting';\n\n useEffect(\n function initConnection() {\n let isCanceled = false;\n async function loadConnection(): Promise<void> {\n try {\n const newConnection = await client.getAsIdeConnection();\n if (isCanceled) {\n return;\n }\n setConnection(newConnection);\n setConnectionState('connected');\n } catch (e) {\n if (isCanceled) {\n return;\n }\n setError(e);\n setConnectionState('not_connecting');\n }\n }\n loadConnection();\n return () => {\n isCanceled = true;\n };\n },\n [api, client]\n );\n\n useEffect(\n function listenForDisconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the disconnect event\n function handleDisconnect(event: CustomEvent): void {\n const { detail } = event;\n log.info('Disconnect', `${JSON.stringify(detail)}`);\n setConnectionState('reconnecting');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_DISCONNECT,\n handleDisconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForReconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the reconnect event\n function handleReconnect(event: CustomEvent): void {\n const { detail } = event;\n log.info('Reconnect', `${JSON.stringify(detail)}`);\n setConnectionState('connected');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT,\n handleReconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForShutdown() {\n if (connection == null) return;\n\n // handles the shutdown event\n function handleShutdown(event: CustomEvent): void {\n const { detail } = event;\n log.info('Shutdown', `${JSON.stringify(detail)}`);\n setError(`Server shutdown: ${detail ?? 'Unknown reason'}`);\n setConnectionState('shutdown');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_SHUTDOWN,\n handleShutdown\n );\n\n return removerFn;\n },\n [api, connection]\n );\n\n useEffect(\n function listenForAuthFailed() {\n if (connection == null || isShutdown) return;\n\n // handles the auth failed event\n function handleAuthFailed(event: CustomEvent): void {\n const { detail } = event;\n log.warn(\n 'Reconnect authentication failed',\n `${JSON.stringify(detail)}`\n );\n setError(\n `Reconnect authentication failed: ${detail ?? 'Unknown reason'}`\n );\n setConnectionState('failed');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT_AUTH_FAILED,\n handleAuthFailed\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n const objectFetcher = useCallback(\n async (descriptor: dh.ide.VariableDescriptor) => {\n assertNotNull(connection, 'No connection available to fetch object with');\n return connection.getObject(sanitizeVariableDescriptor(descriptor));\n },\n [connection]\n );\n\n /** We don't really need to do anything fancy in Core to manage an object, just fetch it */\n const objectManager: ObjectFetchManager = useMemo(\n () => ({\n subscribe: (descriptor, onUpdate) => {\n // We send an update with the fetch right away\n onUpdate({\n fetch: () => objectFetcher(descriptor),\n status: 'ready',\n });\n return () => {\n // no-op\n // For Core, if the server dies then we can't reconnect anyway, so no need to bother listening for subscription or cleaning up\n };\n },\n }),\n [objectFetcher]\n );\n\n function handleRefresh(): void {\n log.info('Refreshing application');\n window.location.reload();\n }\n\n if (isShutdown || connectionState === 'connecting' || isNotConnecting) {\n return (\n <LoadingOverlay\n data-testid=\"connection-bootstrap-loading\"\n isLoading={false}\n errorMessage={error != null ? `${error}` : undefined}\n />\n );\n }\n\n return (\n <ConnectionContext.Provider value={connection ?? null}>\n <ObjectFetcherContext.Provider value={objectFetcher}>\n <ObjectFetchManagerContext.Provider value={objectManager}>\n {children}\n <DebouncedModal isOpen={isReconnecting} debounceMs={1000}>\n <InfoModal\n icon={vsDebugDisconnect}\n title={\n <>\n <LoadingSpinner /> Attempting to reconnect...\n </>\n }\n subtitle=\"Please check your network connection.\"\n />\n </DebouncedModal>\n <BasicModal\n confirmButtonText=\"Refresh\"\n onConfirm={handleRefresh}\n isOpen={isAuthFailed}\n headerText=\"Authentication failed\"\n bodyText=\"Credentials are invalid. Please refresh your browser to try and reconnect.\"\n />\n </ObjectFetchManagerContext.Provider>\n </ObjectFetcherContext.Provider>\n </ConnectionContext.Provider>\n );\n}\n\nexport default ConnectionBootstrap;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConnectionBootstrap.js","names":["React","useCallback","useEffect","useMemo","useState","BasicModal","DebouncedModal","InfoModal","LoadingOverlay","LoadingSpinner","ObjectFetcherContext","ObjectFetchManagerContext","sanitizeVariableDescriptor","useApi","useClient","Log","assertNotNull","vsDebugDisconnect","ConnectionContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","log","module","ConnectionBootstrap","_ref","children","api","client","error","setError","connection","setConnection","connectionState","setConnectionState","isAuthFailed","isShutdown","isReconnecting","isNotConnecting","initConnection","isCanceled","loadConnection","_loadConnection","apply","arguments","_asyncToGenerator","newConnection","getAsIdeConnection","e","listenForDisconnect","handleDisconnect","event","detail","info","concat","JSON","stringify","removerFn","addEventListener","IdeConnection","EVENT_DISCONNECT","listenForReconnect","handleReconnect","CoreClient","EVENT_RECONNECT","listenForShutdown","handleShutdown","EVENT_SHUTDOWN","listenForAuthFailed","handleAuthFailed","warn","EVENT_RECONNECT_AUTH_FAILED","objectFetcher","_ref2","descriptor","getObject","_x","objectManager","subscribe","onUpdate","fetch","status","handleRefresh","window","location","reload","isLoading","errorMessage","undefined","Provider","value","isOpen","debounceMs","icon","title","subtitle","confirmButtonText","onConfirm","headerText","bodyText"],"sources":["../../src/components/ConnectionBootstrap.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n BasicModal,\n DebouncedModal,\n InfoModal,\n LoadingOverlay,\n LoadingSpinner,\n} from '@deephaven/components';\nimport {\n ObjectFetcherContext,\n type ObjectFetchManager,\n ObjectFetchManagerContext,\n sanitizeVariableDescriptor,\n useApi,\n useClient,\n} from '@deephaven/jsapi-bootstrap';\nimport type { dh } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport { assertNotNull } from '@deephaven/utils';\nimport { vsDebugDisconnect } from '@deephaven/icons';\nimport ConnectionContext from './ConnectionContext';\n\nconst log = Log.module('@deephaven/app-utils.ConnectionBootstrap');\n\nexport type ConnectionBootstrapProps = {\n /**\n * The children to render wrapped with the ConnectionContext.\n * Will not render children until the connection is created.\n */\n children: React.ReactNode;\n};\n\n/**\n * ConnectionBootstrap component. Handles initializing the connection.\n */\nexport function ConnectionBootstrap({\n children,\n}: ConnectionBootstrapProps): JSX.Element {\n const api = useApi();\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [connection, setConnection] = useState<dh.IdeConnection>();\n const [connectionState, setConnectionState] = useState<\n | 'not_connecting'\n | 'connecting'\n | 'connected'\n | 'reconnecting'\n | 'failed'\n | 'shutdown'\n >('connecting');\n const isAuthFailed = connectionState === 'failed';\n const isShutdown = connectionState === 'shutdown';\n const isReconnecting = connectionState === 'reconnecting';\n const isNotConnecting = connectionState === 'not_connecting';\n\n useEffect(\n function initConnection() {\n let isCanceled = false;\n async function loadConnection(): Promise<void> {\n try {\n const newConnection = await client.getAsIdeConnection();\n if (isCanceled) {\n return;\n }\n setConnection(newConnection);\n setConnectionState('connected');\n } catch (e) {\n if (isCanceled) {\n return;\n }\n setError(e);\n setConnectionState('not_connecting');\n }\n }\n loadConnection();\n return () => {\n isCanceled = true;\n };\n },\n [api, client]\n );\n\n useEffect(\n function listenForDisconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the disconnect event\n function handleDisconnect(event: CustomEvent): void {\n const { detail } = event;\n log.info('Disconnect', `${JSON.stringify(detail)}`);\n setConnectionState('reconnecting');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_DISCONNECT,\n handleDisconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForReconnect() {\n if (connection == null || isShutdown) return;\n\n // handles the reconnect event\n function handleReconnect(event: CustomEvent): void {\n const { detail } = event;\n log.info('Reconnect', `${JSON.stringify(detail)}`);\n setConnectionState('connected');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT,\n handleReconnect\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n useEffect(\n function listenForShutdown() {\n if (connection == null) return;\n\n // handles the shutdown event\n function handleShutdown(event: CustomEvent): void {\n const { detail } = event;\n log.info('Shutdown', `${JSON.stringify(detail)}`);\n setError(`Server shutdown: ${detail ?? 'Unknown reason'}`);\n setConnectionState('shutdown');\n }\n const removerFn = connection.addEventListener(\n api.IdeConnection.EVENT_SHUTDOWN,\n handleShutdown\n );\n\n return removerFn;\n },\n [api, connection]\n );\n\n useEffect(\n function listenForAuthFailed() {\n if (connection == null || isShutdown) return;\n\n // handles the auth failed event\n function handleAuthFailed(event: CustomEvent): void {\n const { detail } = event;\n log.warn(\n 'Reconnect authentication failed',\n `${JSON.stringify(detail)}`\n );\n setError(\n `Reconnect authentication failed: ${detail ?? 'Unknown reason'}`\n );\n setConnectionState('failed');\n }\n const removerFn = connection.addEventListener(\n api.CoreClient.EVENT_RECONNECT_AUTH_FAILED,\n handleAuthFailed\n );\n\n return removerFn;\n },\n [api, connection, isShutdown]\n );\n\n const objectFetcher = useCallback(\n async (descriptor: dh.ide.VariableDescriptor) => {\n assertNotNull(connection, 'No connection available to fetch object with');\n return connection.getObject(sanitizeVariableDescriptor(descriptor));\n },\n [connection]\n );\n\n /** We don't really need to do anything fancy in Core to manage an object, just fetch it */\n const objectManager: ObjectFetchManager = useMemo(\n () => ({\n subscribe: (descriptor, onUpdate) => {\n // We send an update with the fetch right away\n onUpdate({\n fetch: () => objectFetcher(descriptor),\n status: 'ready',\n });\n return () => {\n // no-op\n // For Core, if the server dies then we can't reconnect anyway, so no need to bother listening for subscription or cleaning up\n };\n },\n }),\n [objectFetcher]\n );\n\n function handleRefresh(): void {\n log.info('Refreshing application');\n window.location.reload();\n }\n\n if (isShutdown || connectionState === 'connecting' || isNotConnecting) {\n return (\n <LoadingOverlay\n data-testid=\"connection-bootstrap-loading\"\n isLoading={false}\n errorMessage={error != null ? `${error}` : undefined}\n />\n );\n }\n\n return (\n <ConnectionContext.Provider value={connection ?? null}>\n <ObjectFetcherContext.Provider value={objectFetcher}>\n <ObjectFetchManagerContext.Provider value={objectManager}>\n {children}\n <DebouncedModal isOpen={isReconnecting} debounceMs={1000}>\n <InfoModal\n icon={vsDebugDisconnect}\n title={\n <>\n <LoadingSpinner /> Attempting to reconnect...\n </>\n }\n subtitle=\"Please check your network connection.\"\n />\n </DebouncedModal>\n <BasicModal\n confirmButtonText=\"Refresh\"\n onConfirm={handleRefresh}\n isOpen={isAuthFailed}\n headerText=\"Authentication failed\"\n bodyText=\"Credentials are invalid. Please refresh your browser to try and reconnect.\"\n />\n </ObjectFetchManagerContext.Provider>\n </ObjectFetcherContext.Provider>\n </ConnectionContext.Provider>\n );\n}\n\nexport default ConnectionBootstrap;\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type PluginModuleMap, type AuthPlugin, type AuthPluginComponent, LegacyAuthPlugin, LegacyPlugin, Plugin, PluginModule } from '@deephaven/plugin';
|
|
1
|
+
import { type PluginModuleMap, type AuthPlugin, type AuthPluginComponent, type LegacyAuthPlugin, type LegacyPlugin, type Plugin, type PluginModule } from '@deephaven/plugin';
|
|
2
2
|
export type PluginManifestPluginInfo = {
|
|
3
3
|
name: string;
|
|
4
4
|
main: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginUtils.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EAExB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"PluginUtils.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginUtils.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EAExB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,MAAM,EAIX,KAAK,YAAY,EAElB,MAAM,mBAAmB,CAAC;AAK3B,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,wBAAwB,EAAE,CAAA;CAAE,CAAC;AAErE;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAG7C;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAUvE;AAUD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACjD,YAAY,GAAG,IAAI,CAerB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,eAAe,CAAC,CAyC1B;AAED,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACpC,MAAM,EAAE,CAEV;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,eAAe,EAC1B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,WAAW,6CAAmD,GAC7D,mBAAmB,CAwCrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginUtils.js","names":["Log","isAuthPlugin","PluginType","isLegacyAuthPlugin","isLegacyPlugin","isPlugin","loadRemoteModule","log","module","loadModulePlugin","_x","_loadModulePlugin","apply","arguments","_asyncToGenerator","pluginUrl","myModule","loadJson","_x2","_loadJson","jsonUrl","res","fetch","ok","Error","statusText","json","_unused","hasDefaultExport","value","default","getPluginModuleValue","loadModulePlugins","_x3","_loadModulePlugins","modulePluginsUrl","debug","manifest","concat","Array","isArray","plugins","pluginPromises","i","length","name","main","pluginMainUrl","push","pluginModules","Promise","allSettled","pluginMap","Map","version","status","moduleValue","error","set","_objectSpread","reason","info","e","getAuthHandlers","authConfigValues","_authConfigValues$get","_authConfigValues$get2","get","split","getAuthPluginComponent","corePlugins","undefined","authHandlers","authPlugins","entries","filter","_ref","plugin","map","_ref2","type","AUTH_PLUGIN","component","AuthPlugin","Component","isAvailable","availableAuthPlugins","_ref3","warn","_ref4","join"],"sources":["../../src/plugins/PluginUtils.tsx"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type PluginModuleMap,\n type AuthPlugin,\n type AuthPluginComponent,\n isAuthPlugin,\n LegacyAuthPlugin,\n LegacyPlugin,\n Plugin,\n PluginType,\n isLegacyAuthPlugin,\n isLegacyPlugin,\n PluginModule,\n isPlugin,\n} from '@deephaven/plugin';\nimport loadRemoteModule from './loadRemoteModule';\n\nconst log = Log.module('@deephaven/app-utils.PluginUtils');\n\nexport type PluginManifestPluginInfo = {\n name: string;\n main: string;\n version: string;\n};\n\nexport type PluginManifest = { plugins: PluginManifestPluginInfo[] };\n\n/**\n * Imports a commonjs plugin module from the provided URL\n * @param pluginUrl The URL of the plugin to load\n * @returns The loaded module\n */\nexport async function loadModulePlugin(\n pluginUrl: string\n): Promise<LegacyPlugin | { default: Plugin }> {\n const myModule = await loadRemoteModule(pluginUrl);\n return myModule;\n}\n\n/**\n * Loads a JSON file and returns the JSON object\n * @param jsonUrl The URL of the JSON file to load\n * @returns The JSON object of the manifest file\n */\nexport async function loadJson(jsonUrl: string): Promise<PluginManifest> {\n const res = await fetch(jsonUrl);\n if (!res.ok) {\n throw new Error(res.statusText);\n }\n try {\n return await res.json();\n } catch {\n throw new Error('Could not be parsed as JSON');\n }\n}\n\nfunction hasDefaultExport(value: unknown): value is { default: Plugin } {\n return (\n typeof value === 'object' &&\n value != null &&\n typeof (value as { default?: unknown }).default === 'object'\n );\n}\n\nexport function getPluginModuleValue(\n value: LegacyPlugin | Plugin | { default: Plugin }\n): PluginModule | null {\n // TypeScript builds CJS default exports differently depending on\n // whether there are also named exports. If the default is the only\n // export, it will be the value. If there are also named exports,\n // it will be assigned to the `default` property on the value.\n if (isPlugin(value)) {\n return value;\n }\n if (hasDefaultExport(value) && isPlugin(value.default)) {\n return value.default;\n }\n if (isLegacyPlugin(value)) {\n return value;\n }\n return null;\n}\n\n/**\n * Load all plugin modules available based on the manifest file at the provided base URL\n * @param modulePluginsUrl The base URL of the module plugins to load\n * @returns A map from the name of the plugin to the plugin module that was loaded\n */\nexport async function loadModulePlugins(\n modulePluginsUrl: string\n): Promise<PluginModuleMap> {\n log.debug('Loading plugins...');\n try {\n const manifest = await loadJson(`${modulePluginsUrl}/manifest.json`);\n\n if (!Array.isArray(manifest.plugins)) {\n throw new Error('Plugin manifest JSON does not contain plugins array');\n }\n\n log.debug('Plugin manifest loaded:', manifest);\n const pluginPromises: Promise<LegacyPlugin | { default: Plugin }>[] = [];\n for (let i = 0; i < manifest.plugins.length; i += 1) {\n const { name, main } = manifest.plugins[i];\n const pluginMainUrl = `${modulePluginsUrl}/${name}/${main}`;\n pluginPromises.push(loadModulePlugin(pluginMainUrl));\n }\n\n const pluginModules = await Promise.allSettled(pluginPromises);\n\n const pluginMap: PluginModuleMap = new Map();\n for (let i = 0; i < pluginModules.length; i += 1) {\n const module = pluginModules[i];\n const { name, version } = manifest.plugins[i];\n if (module.status === 'fulfilled') {\n const moduleValue = getPluginModuleValue(module.value);\n if (moduleValue == null) {\n log.error(`Plugin '${name}' is missing an exported value.`);\n } else {\n pluginMap.set(name, { ...moduleValue, version });\n }\n } else {\n log.error(`Unable to load plugin '${name}'`, module.reason);\n }\n }\n log.info('Plugins loaded:', pluginMap);\n\n return pluginMap;\n } catch (e) {\n log.error('Unable to load plugins:', e);\n return new Map();\n }\n}\n\nexport function getAuthHandlers(\n authConfigValues: Map<string, string>\n): string[] {\n return authConfigValues.get('AuthHandlers')?.split(',') ?? [];\n}\n\n/**\n * Get the auth plugin component from the plugin map and current configuration\n * Throws if no auth plugin is available\n *\n * @param pluginMap Map of plugins loaded from the server\n * @param authConfigValues Auth config values from the server\n * @param corePlugins Map of core auth plugins to include in the list. They are added after the loaded plugins\n * @returns The auth plugin component to render\n */\nexport function getAuthPluginComponent(\n pluginMap: PluginModuleMap,\n authConfigValues: Map<string, string>,\n corePlugins = new Map<string, AuthPlugin | LegacyAuthPlugin>()\n): AuthPluginComponent {\n const authHandlers = getAuthHandlers(authConfigValues);\n // User plugins take priority over core plugins\n const authPlugins = (\n [...pluginMap.entries(), ...corePlugins.entries()].filter(\n ([, plugin]) => isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin)\n ) as [string, AuthPlugin | LegacyAuthPlugin][]\n ).map(([name, plugin]) => {\n if (isLegacyAuthPlugin(plugin)) {\n return {\n type: PluginType.AUTH_PLUGIN,\n name,\n component: plugin.AuthPlugin.Component,\n isAvailable: plugin.AuthPlugin.isAvailable,\n };\n }\n\n return plugin;\n });\n\n // Filter the available auth plugins\n const availableAuthPlugins = authPlugins.filter(({ isAvailable }) =>\n isAvailable(authHandlers, authConfigValues)\n );\n\n if (availableAuthPlugins.length === 0) {\n throw new Error(\n `No login plugins found, please register a login plugin for auth handlers: ${authHandlers}`\n );\n } else if (availableAuthPlugins.length > 1) {\n log.warn(\n 'More than one login plugin available, will use the first one: ',\n availableAuthPlugins.map(({ name }) => name).join(', ')\n );\n }\n\n const { name, component } = availableAuthPlugins[0];\n log.info('Using LoginPlugin', name);\n\n return component;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PluginUtils.js","names":["Log","isAuthPlugin","PluginType","isLegacyAuthPlugin","isLegacyPlugin","isPlugin","loadRemoteModule","log","module","loadModulePlugin","_x","_loadModulePlugin","apply","arguments","_asyncToGenerator","pluginUrl","myModule","loadJson","_x2","_loadJson","jsonUrl","res","fetch","ok","Error","statusText","json","_unused","hasDefaultExport","value","default","getPluginModuleValue","loadModulePlugins","_x3","_loadModulePlugins","modulePluginsUrl","debug","manifest","concat","Array","isArray","plugins","pluginPromises","i","length","name","main","pluginMainUrl","push","pluginModules","Promise","allSettled","pluginMap","Map","version","status","moduleValue","error","set","_objectSpread","reason","info","e","getAuthHandlers","authConfigValues","_authConfigValues$get","_authConfigValues$get2","get","split","getAuthPluginComponent","corePlugins","undefined","authHandlers","authPlugins","entries","filter","_ref","plugin","map","_ref2","type","AUTH_PLUGIN","component","AuthPlugin","Component","isAvailable","availableAuthPlugins","_ref3","warn","_ref4","join"],"sources":["../../src/plugins/PluginUtils.tsx"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type PluginModuleMap,\n type AuthPlugin,\n type AuthPluginComponent,\n isAuthPlugin,\n type LegacyAuthPlugin,\n type LegacyPlugin,\n type Plugin,\n PluginType,\n isLegacyAuthPlugin,\n isLegacyPlugin,\n type PluginModule,\n isPlugin,\n} from '@deephaven/plugin';\nimport loadRemoteModule from './loadRemoteModule';\n\nconst log = Log.module('@deephaven/app-utils.PluginUtils');\n\nexport type PluginManifestPluginInfo = {\n name: string;\n main: string;\n version: string;\n};\n\nexport type PluginManifest = { plugins: PluginManifestPluginInfo[] };\n\n/**\n * Imports a commonjs plugin module from the provided URL\n * @param pluginUrl The URL of the plugin to load\n * @returns The loaded module\n */\nexport async function loadModulePlugin(\n pluginUrl: string\n): Promise<LegacyPlugin | { default: Plugin }> {\n const myModule = await loadRemoteModule(pluginUrl);\n return myModule;\n}\n\n/**\n * Loads a JSON file and returns the JSON object\n * @param jsonUrl The URL of the JSON file to load\n * @returns The JSON object of the manifest file\n */\nexport async function loadJson(jsonUrl: string): Promise<PluginManifest> {\n const res = await fetch(jsonUrl);\n if (!res.ok) {\n throw new Error(res.statusText);\n }\n try {\n return await res.json();\n } catch {\n throw new Error('Could not be parsed as JSON');\n }\n}\n\nfunction hasDefaultExport(value: unknown): value is { default: Plugin } {\n return (\n typeof value === 'object' &&\n value != null &&\n typeof (value as { default?: unknown }).default === 'object'\n );\n}\n\nexport function getPluginModuleValue(\n value: LegacyPlugin | Plugin | { default: Plugin }\n): PluginModule | null {\n // TypeScript builds CJS default exports differently depending on\n // whether there are also named exports. If the default is the only\n // export, it will be the value. If there are also named exports,\n // it will be assigned to the `default` property on the value.\n if (isPlugin(value)) {\n return value;\n }\n if (hasDefaultExport(value) && isPlugin(value.default)) {\n return value.default;\n }\n if (isLegacyPlugin(value)) {\n return value;\n }\n return null;\n}\n\n/**\n * Load all plugin modules available based on the manifest file at the provided base URL\n * @param modulePluginsUrl The base URL of the module plugins to load\n * @returns A map from the name of the plugin to the plugin module that was loaded\n */\nexport async function loadModulePlugins(\n modulePluginsUrl: string\n): Promise<PluginModuleMap> {\n log.debug('Loading plugins...');\n try {\n const manifest = await loadJson(`${modulePluginsUrl}/manifest.json`);\n\n if (!Array.isArray(manifest.plugins)) {\n throw new Error('Plugin manifest JSON does not contain plugins array');\n }\n\n log.debug('Plugin manifest loaded:', manifest);\n const pluginPromises: Promise<LegacyPlugin | { default: Plugin }>[] = [];\n for (let i = 0; i < manifest.plugins.length; i += 1) {\n const { name, main } = manifest.plugins[i];\n const pluginMainUrl = `${modulePluginsUrl}/${name}/${main}`;\n pluginPromises.push(loadModulePlugin(pluginMainUrl));\n }\n\n const pluginModules = await Promise.allSettled(pluginPromises);\n\n const pluginMap: PluginModuleMap = new Map();\n for (let i = 0; i < pluginModules.length; i += 1) {\n const module = pluginModules[i];\n const { name, version } = manifest.plugins[i];\n if (module.status === 'fulfilled') {\n const moduleValue = getPluginModuleValue(module.value);\n if (moduleValue == null) {\n log.error(`Plugin '${name}' is missing an exported value.`);\n } else {\n pluginMap.set(name, { ...moduleValue, version });\n }\n } else {\n log.error(`Unable to load plugin '${name}'`, module.reason);\n }\n }\n log.info('Plugins loaded:', pluginMap);\n\n return pluginMap;\n } catch (e) {\n log.error('Unable to load plugins:', e);\n return new Map();\n }\n}\n\nexport function getAuthHandlers(\n authConfigValues: Map<string, string>\n): string[] {\n return authConfigValues.get('AuthHandlers')?.split(',') ?? [];\n}\n\n/**\n * Get the auth plugin component from the plugin map and current configuration\n * Throws if no auth plugin is available\n *\n * @param pluginMap Map of plugins loaded from the server\n * @param authConfigValues Auth config values from the server\n * @param corePlugins Map of core auth plugins to include in the list. They are added after the loaded plugins\n * @returns The auth plugin component to render\n */\nexport function getAuthPluginComponent(\n pluginMap: PluginModuleMap,\n authConfigValues: Map<string, string>,\n corePlugins = new Map<string, AuthPlugin | LegacyAuthPlugin>()\n): AuthPluginComponent {\n const authHandlers = getAuthHandlers(authConfigValues);\n // User plugins take priority over core plugins\n const authPlugins = (\n [...pluginMap.entries(), ...corePlugins.entries()].filter(\n ([, plugin]) => isAuthPlugin(plugin) || isLegacyAuthPlugin(plugin)\n ) as [string, AuthPlugin | LegacyAuthPlugin][]\n ).map(([name, plugin]) => {\n if (isLegacyAuthPlugin(plugin)) {\n return {\n type: PluginType.AUTH_PLUGIN,\n name,\n component: plugin.AuthPlugin.Component,\n isAvailable: plugin.AuthPlugin.isAvailable,\n };\n }\n\n return plugin;\n });\n\n // Filter the available auth plugins\n const availableAuthPlugins = authPlugins.filter(({ isAvailable }) =>\n isAvailable(authHandlers, authConfigValues)\n );\n\n if (availableAuthPlugins.length === 0) {\n throw new Error(\n `No login plugins found, please register a login plugin for auth handlers: ${authHandlers}`\n );\n } else if (availableAuthPlugins.length > 1) {\n log.warn(\n 'More than one login plugin available, will use the first one: ',\n availableAuthPlugins.map(({ name }) => name).join(', ')\n );\n }\n\n const { name, component } = availableAuthPlugins[0];\n log.info('Using LoginPlugin', name);\n\n return component;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ItemConfig } from '@deephaven/golden-layout';
|
|
2
|
-
import { FilterSet, Link } from '@deephaven/dashboard-core-plugins';
|
|
3
|
-
import { PluginDataMap } from '@deephaven/redux';
|
|
2
|
+
import { type FilterSet, type Link } from '@deephaven/dashboard-core-plugins';
|
|
3
|
+
import { type PluginDataMap } from '@deephaven/redux';
|
|
4
4
|
/**
|
|
5
5
|
* Have a different version to support legacy layout exports
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutStorage.d.ts","sourceRoot":"","sources":["../../src/storage/LayoutStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutStorage.d.ts","sourceRoot":"","sources":["../../src/storage/LayoutStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,EAAE,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEjE,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,IAAI,gBAAgB,CAE7E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,IAAI,gBAAgB,CAE7E;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEpC;;;;OAIG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACtD;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutStorage.js","names":["isLayoutV2","layout","version","isLayoutV1","Array","isArray"],"sources":["../../src/storage/LayoutStorage.ts"],"sourcesContent":["import type { ItemConfig } from '@deephaven/golden-layout';\nimport { FilterSet, Link } from '@deephaven/dashboard-core-plugins';\nimport { PluginDataMap } from '@deephaven/redux';\n\n/**\n * Have a different version to support legacy layout exports\n */\nexport type ExportedLayoutV1 = ItemConfig[];\n\nexport type ExportedLayoutV2 = {\n filterSets: FilterSet[];\n links: Link[];\n layoutConfig: ItemConfig[];\n pluginDataMap?: PluginDataMap;\n version: 2;\n};\n\nexport type ExportedLayout = ExportedLayoutV1 | ExportedLayoutV2;\n\nexport function isLayoutV2(layout: ExportedLayout): layout is ExportedLayoutV2 {\n return (layout as ExportedLayoutV2).version === 2;\n}\n\nexport function isLayoutV1(layout: ExportedLayout): layout is ExportedLayoutV1 {\n return Array.isArray(layout);\n}\n\n/**\n * Interface for accessing layouts from wherever they are stored.\n */\nexport interface LayoutStorage {\n /**\n * Get the name of the layouts available\n * @returns The string array of layout names\n */\n getLayouts: () => Promise<string[]>;\n\n /**\n * Get the layout with the specified name\n * @param name The name of the layout to fetch\n * @returns GoldenLayout layout config\n */\n getLayout: (name: string) => Promise<ExportedLayout>;\n}\n\nexport default LayoutStorage;\n"],"mappings":"AAIA;AACA;AACA;;AAaA,OAAO,SAASA,UAAUA,CAACC,MAAsB,EAA8B;EAC7E,OAAQA,MAAM,CAAsBC,OAAO,KAAK,CAAC;AACnD;AAEA,OAAO,SAASC,UAAUA,CAACF,MAAsB,EAA8B;EAC7E,OAAOG,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC;AAC9B;;AAEA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"LayoutStorage.js","names":["isLayoutV2","layout","version","isLayoutV1","Array","isArray"],"sources":["../../src/storage/LayoutStorage.ts"],"sourcesContent":["import type { ItemConfig } from '@deephaven/golden-layout';\nimport { type FilterSet, type Link } from '@deephaven/dashboard-core-plugins';\nimport { type PluginDataMap } from '@deephaven/redux';\n\n/**\n * Have a different version to support legacy layout exports\n */\nexport type ExportedLayoutV1 = ItemConfig[];\n\nexport type ExportedLayoutV2 = {\n filterSets: FilterSet[];\n links: Link[];\n layoutConfig: ItemConfig[];\n pluginDataMap?: PluginDataMap;\n version: 2;\n};\n\nexport type ExportedLayout = ExportedLayoutV1 | ExportedLayoutV2;\n\nexport function isLayoutV2(layout: ExportedLayout): layout is ExportedLayoutV2 {\n return (layout as ExportedLayoutV2).version === 2;\n}\n\nexport function isLayoutV1(layout: ExportedLayout): layout is ExportedLayoutV1 {\n return Array.isArray(layout);\n}\n\n/**\n * Interface for accessing layouts from wherever they are stored.\n */\nexport interface LayoutStorage {\n /**\n * Get the name of the layouts available\n * @returns The string array of layout names\n */\n getLayouts: () => Promise<string[]>;\n\n /**\n * Get the layout with the specified name\n * @param name The name of the layout to fetch\n * @returns GoldenLayout layout config\n */\n getLayout: (name: string) => Promise<ExportedLayout>;\n}\n\nexport default LayoutStorage;\n"],"mappings":"AAIA;AACA;AACA;;AAaA,OAAO,SAASA,UAAUA,CAACC,MAAsB,EAA8B;EAC7E,OAAQA,MAAM,CAAsBC,OAAO,KAAK,CAAC;AACnD;AAEA,OAAO,SAASC,UAAUA,CAACF,MAAsB,EAA8B;EAC7E,OAAOG,KAAK,CAACC,OAAO,CAACJ,MAAM,CAAC;AAC9B;;AAEA;AACA;AACA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { WorkspaceStorage, WorkspaceStorageLoadOptions, CustomizableWorkspaceData, CustomizableWorkspace, WorkspaceSettings, ServerConfigValues } from '@deephaven/redux';
|
|
2
|
-
import LayoutStorage from './LayoutStorage';
|
|
1
|
+
import { type WorkspaceStorage, type WorkspaceStorageLoadOptions, type CustomizableWorkspaceData, type CustomizableWorkspace, type WorkspaceSettings, type ServerConfigValues } from '@deephaven/redux';
|
|
2
|
+
import type LayoutStorage from './LayoutStorage';
|
|
3
3
|
/**
|
|
4
4
|
* Implementation of WorkspaceStorage that just stores the workspace data in localStorage
|
|
5
5
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalWorkspaceStorage.d.ts","sourceRoot":"","sources":["../../src/storage/LocalWorkspaceStorage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"LocalWorkspaceStorage.d.ts","sourceRoot":"","sources":["../../src/storage/LocalWorkspaceStorage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAIjD;;GAEG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,MAAM,CAAC,QAAQ,CAAC,WAAW,gCAAgC;IAE3D,MAAM,CAAC,sBAAsB,CAC3B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EACnD,GAAG,EAAE,MAAM,GACV,OAAO,GAAG,SAAS;IAUtB,MAAM,CAAC,4BAA4B,CACjC,kBAAkB,EAAE,kBAAkB,GACrC,iBAAiB;WAsGP,iBAAiB,CAC5B,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,yBAAyB,CAAC;WAoBxB,oBAAoB,CAC/B,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,qBAAqB,CAAC;IASjC,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAKlC,IAAI,CACR,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,qBAAqB,CAAC;IAiB3B,IAAI,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAO7E;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocalWorkspaceStorage.js","names":["Log","DateTimeColumnFormatter","DecimalColumnFormatter","IntegerColumnFormatter","UserLayoutUtils","log","module","LocalWorkspaceStorage","getBooleanServerConfig","serverConfigValues","key","_serverConfigValues$g","_serverConfigValues$g2","get","toLowerCase","undefined","makeDefaultWorkspaceSettings","settings","defaultDateTimeFormat","DEFAULT_DATETIME_FORMAT_STRING","formatter","timeZone","DEFAULT_TIME_ZONE_ID","showTimeZone","showTSeparator","disableMoveConfirmation","defaultDecimalFormatOptions","defaultFormatString","DEFAULT_FORMAT_STRING","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","showExtraGroupColumn","defaultNotebookSettings","isMinimapEnabled","webgl","webglEditable","gridDensity","serverSettings","keys","Object","i","length","makeWorkspaceData","layoutStorage","options","_asyncToGenerator","filterSets","links","layoutConfig","pluginDataMap","getDefaultLayout","isConsoleAvailable","closed","makeDefaultWorkspace","data","constructor","_defineProperty","load","_this","_localStorage$getItem","workspace","JSON","parse","localStorage","getItem","STORAGE_KEY","e","info","save","setItem","stringify"],"sources":["../../src/storage/LocalWorkspaceStorage.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n WorkspaceStorage,\n WorkspaceStorageLoadOptions,\n CustomizableWorkspaceData,\n CustomizableWorkspace,\n WorkspaceSettings,\n ServerConfigValues,\n} from '@deephaven/redux';\nimport {\n DateTimeColumnFormatter,\n DecimalColumnFormatter,\n IntegerColumnFormatter,\n} from '@deephaven/jsapi-utils';\nimport UserLayoutUtils from './UserLayoutUtils';\nimport LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('LocalWorkspaceStorage');\n\n/**\n * Implementation of WorkspaceStorage that just stores the workspace data in localStorage\n */\nexport class LocalWorkspaceStorage implements WorkspaceStorage {\n static readonly STORAGE_KEY = 'deephaven.WorkspaceStorage';\n\n static getBooleanServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): boolean | undefined {\n if (serverConfigValues?.get(key)?.toLowerCase() === 'true') {\n return true;\n }\n if (serverConfigValues?.get(key)?.toLowerCase() === 'false') {\n return false;\n }\n return undefined;\n }\n\n static makeDefaultWorkspaceSettings(\n serverConfigValues: ServerConfigValues\n ): WorkspaceSettings {\n const settings = {\n defaultDateTimeFormat:\n DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING,\n formatter: [],\n timeZone: DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID,\n showTimeZone: false,\n showTSeparator: true,\n disableMoveConfirmation: false,\n defaultDecimalFormatOptions: {\n defaultFormatString: DecimalColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n defaultIntegerFormatOptions: {\n defaultFormatString: IntegerColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n defaultNotebookSettings: {\n isMinimapEnabled: false,\n },\n webgl: true,\n webglEditable: true,\n gridDensity: 'regular' as const,\n };\n const serverSettings = {\n defaultDateTimeFormat: serverConfigValues?.get('dateTimeFormat'),\n formatter: [],\n timeZone: serverConfigValues?.get('timeZone'),\n showTimeZone: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTimeZone'\n ),\n showTSeparator: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTSeparator'\n ),\n disableMoveConfirmation: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'disableMoveConfirmation'\n ),\n defaultDecimalFormatOptions:\n serverConfigValues?.get('decimalFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('decimalFormat'),\n }\n : undefined,\n defaultIntegerFormatOptions:\n serverConfigValues?.get('integerFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('integerFormat'),\n }\n : undefined,\n truncateNumbersWithPound: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'truncateNumbersWithPound'\n ),\n showEmptyStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showEmptyStrings'\n ),\n showNullStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showNullStrings'\n ),\n showExtraGroupColumn: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showExtraGroupColumn'\n ),\n defaultNotebookSettings:\n serverConfigValues?.get('isMinimapEnabled') !== undefined\n ? {\n isMinimapEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'isMinimapEnabled'\n ) as boolean,\n }\n : undefined,\n webgl: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl'\n ),\n webglEditable: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl.editable'\n ),\n };\n\n const keys = Object.keys(serverSettings) as Array<\n keyof typeof serverSettings\n >;\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n if (serverSettings[key] !== undefined) {\n // @ts-expect-error override default for defined server settings\n settings[key] = serverSettings[key];\n }\n }\n return settings;\n }\n\n static async makeWorkspaceData(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspaceData> {\n const {\n filterSets,\n links,\n layoutConfig,\n pluginDataMap = {},\n } = await UserLayoutUtils.getDefaultLayout(\n layoutStorage,\n options?.isConsoleAvailable\n );\n return {\n settings: {},\n layoutConfig,\n closed: [{}],\n links,\n filterSets,\n pluginDataMap,\n };\n }\n\n static async makeDefaultWorkspace(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n return {\n data: await LocalWorkspaceStorage.makeWorkspaceData(\n layoutStorage,\n options\n ),\n };\n }\n\n private layoutStorage: LayoutStorage;\n\n constructor(layoutStorage: LayoutStorage) {\n this.layoutStorage = layoutStorage;\n }\n\n // eslint-disable-next-line class-methods-use-this\n async load(\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n try {\n const workspace = JSON.parse(\n localStorage.getItem(LocalWorkspaceStorage.STORAGE_KEY) ?? ''\n );\n return workspace;\n } catch (e) {\n log.info('Unable to load workspace data, initializing to default data');\n\n return LocalWorkspaceStorage.makeDefaultWorkspace(\n this.layoutStorage,\n options\n );\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async save(workspace: CustomizableWorkspace): Promise<CustomizableWorkspace> {\n localStorage.setItem(\n LocalWorkspaceStorage.STORAGE_KEY,\n JSON.stringify(workspace)\n );\n return workspace;\n }\n}\n\nexport default LocalWorkspaceStorage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LocalWorkspaceStorage.js","names":["Log","DateTimeColumnFormatter","DecimalColumnFormatter","IntegerColumnFormatter","UserLayoutUtils","log","module","LocalWorkspaceStorage","getBooleanServerConfig","serverConfigValues","key","_serverConfigValues$g","_serverConfigValues$g2","get","toLowerCase","undefined","makeDefaultWorkspaceSettings","settings","defaultDateTimeFormat","DEFAULT_DATETIME_FORMAT_STRING","formatter","timeZone","DEFAULT_TIME_ZONE_ID","showTimeZone","showTSeparator","disableMoveConfirmation","defaultDecimalFormatOptions","defaultFormatString","DEFAULT_FORMAT_STRING","defaultIntegerFormatOptions","truncateNumbersWithPound","showEmptyStrings","showNullStrings","showExtraGroupColumn","defaultNotebookSettings","isMinimapEnabled","webgl","webglEditable","gridDensity","serverSettings","keys","Object","i","length","makeWorkspaceData","layoutStorage","options","_asyncToGenerator","filterSets","links","layoutConfig","pluginDataMap","getDefaultLayout","isConsoleAvailable","closed","makeDefaultWorkspace","data","constructor","_defineProperty","load","_this","_localStorage$getItem","workspace","JSON","parse","localStorage","getItem","STORAGE_KEY","e","info","save","setItem","stringify"],"sources":["../../src/storage/LocalWorkspaceStorage.ts"],"sourcesContent":["import Log from '@deephaven/log';\nimport {\n type WorkspaceStorage,\n type WorkspaceStorageLoadOptions,\n type CustomizableWorkspaceData,\n type CustomizableWorkspace,\n type WorkspaceSettings,\n type ServerConfigValues,\n} from '@deephaven/redux';\nimport {\n DateTimeColumnFormatter,\n DecimalColumnFormatter,\n IntegerColumnFormatter,\n} from '@deephaven/jsapi-utils';\nimport UserLayoutUtils from './UserLayoutUtils';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('LocalWorkspaceStorage');\n\n/**\n * Implementation of WorkspaceStorage that just stores the workspace data in localStorage\n */\nexport class LocalWorkspaceStorage implements WorkspaceStorage {\n static readonly STORAGE_KEY = 'deephaven.WorkspaceStorage';\n\n static getBooleanServerConfig(\n serverConfigValues: Map<string, string> | undefined,\n key: string\n ): boolean | undefined {\n if (serverConfigValues?.get(key)?.toLowerCase() === 'true') {\n return true;\n }\n if (serverConfigValues?.get(key)?.toLowerCase() === 'false') {\n return false;\n }\n return undefined;\n }\n\n static makeDefaultWorkspaceSettings(\n serverConfigValues: ServerConfigValues\n ): WorkspaceSettings {\n const settings = {\n defaultDateTimeFormat:\n DateTimeColumnFormatter.DEFAULT_DATETIME_FORMAT_STRING,\n formatter: [],\n timeZone: DateTimeColumnFormatter.DEFAULT_TIME_ZONE_ID,\n showTimeZone: false,\n showTSeparator: true,\n disableMoveConfirmation: false,\n defaultDecimalFormatOptions: {\n defaultFormatString: DecimalColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n defaultIntegerFormatOptions: {\n defaultFormatString: IntegerColumnFormatter.DEFAULT_FORMAT_STRING,\n },\n truncateNumbersWithPound: false,\n showEmptyStrings: true,\n showNullStrings: true,\n showExtraGroupColumn: true,\n defaultNotebookSettings: {\n isMinimapEnabled: false,\n },\n webgl: true,\n webglEditable: true,\n gridDensity: 'regular' as const,\n };\n const serverSettings = {\n defaultDateTimeFormat: serverConfigValues?.get('dateTimeFormat'),\n formatter: [],\n timeZone: serverConfigValues?.get('timeZone'),\n showTimeZone: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTimeZone'\n ),\n showTSeparator: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showTSeparator'\n ),\n disableMoveConfirmation: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'disableMoveConfirmation'\n ),\n defaultDecimalFormatOptions:\n serverConfigValues?.get('decimalFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('decimalFormat'),\n }\n : undefined,\n defaultIntegerFormatOptions:\n serverConfigValues?.get('integerFormat') !== undefined\n ? {\n defaultFormatString: serverConfigValues?.get('integerFormat'),\n }\n : undefined,\n truncateNumbersWithPound: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'truncateNumbersWithPound'\n ),\n showEmptyStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showEmptyStrings'\n ),\n showNullStrings: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showNullStrings'\n ),\n showExtraGroupColumn: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'showExtraGroupColumn'\n ),\n defaultNotebookSettings:\n serverConfigValues?.get('isMinimapEnabled') !== undefined\n ? {\n isMinimapEnabled: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'isMinimapEnabled'\n ) as boolean,\n }\n : undefined,\n webgl: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl'\n ),\n webglEditable: LocalWorkspaceStorage.getBooleanServerConfig(\n serverConfigValues,\n 'web.webgl.editable'\n ),\n };\n\n const keys = Object.keys(serverSettings) as Array<\n keyof typeof serverSettings\n >;\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n if (serverSettings[key] !== undefined) {\n // @ts-expect-error override default for defined server settings\n settings[key] = serverSettings[key];\n }\n }\n return settings;\n }\n\n static async makeWorkspaceData(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspaceData> {\n const {\n filterSets,\n links,\n layoutConfig,\n pluginDataMap = {},\n } = await UserLayoutUtils.getDefaultLayout(\n layoutStorage,\n options?.isConsoleAvailable\n );\n return {\n settings: {},\n layoutConfig,\n closed: [{}],\n links,\n filterSets,\n pluginDataMap,\n };\n }\n\n static async makeDefaultWorkspace(\n layoutStorage: LayoutStorage,\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n return {\n data: await LocalWorkspaceStorage.makeWorkspaceData(\n layoutStorage,\n options\n ),\n };\n }\n\n private layoutStorage: LayoutStorage;\n\n constructor(layoutStorage: LayoutStorage) {\n this.layoutStorage = layoutStorage;\n }\n\n // eslint-disable-next-line class-methods-use-this\n async load(\n options?: WorkspaceStorageLoadOptions\n ): Promise<CustomizableWorkspace> {\n try {\n const workspace = JSON.parse(\n localStorage.getItem(LocalWorkspaceStorage.STORAGE_KEY) ?? ''\n );\n return workspace;\n } catch (e) {\n log.info('Unable to load workspace data, initializing to default data');\n\n return LocalWorkspaceStorage.makeDefaultWorkspace(\n this.layoutStorage,\n options\n );\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n async save(workspace: CustomizableWorkspace): Promise<CustomizableWorkspace> {\n localStorage.setItem(\n LocalWorkspaceStorage.STORAGE_KEY,\n JSON.stringify(workspace)\n );\n return workspace;\n }\n}\n\nexport default LocalWorkspaceStorage;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { CustomizableWorkspaceData } from '@deephaven/redux';
|
|
2
|
-
import
|
|
1
|
+
import { type CustomizableWorkspaceData } from '@deephaven/redux';
|
|
2
|
+
import { type ExportedLayout, type ExportedLayoutV2 } from './LayoutStorage';
|
|
3
|
+
import type LayoutStorage from './LayoutStorage';
|
|
3
4
|
export declare const DEFAULT_LAYOUT_CONFIG: ExportedLayoutV2;
|
|
4
5
|
export declare const DEFAULT_LAYOUT_CONFIG_NO_CONSOLE: ExportedLayoutV2;
|
|
5
6
|
export declare function normalizeLayout(layout: ExportedLayout): ExportedLayoutV2;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserLayoutUtils.d.ts","sourceRoot":"","sources":["../../src/storage/UserLayoutUtils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"UserLayoutUtils.d.ts","sourceRoot":"","sources":["../../src/storage/UserLayoutUtils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAGtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AAIjD,eAAO,MAAM,qBAAqB,EAAE,gBA8DnC,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,gBAK9C,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAexE;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,aAAa,EAC5B,kBAAkB,UAAO,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAqB3B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,yBAAyB,GAC9B,gBAAgB,CAalB;;;;;;AAED,wBAAmE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserLayoutUtils.js","names":["CommandHistoryPanel","ConsolePanel","FileExplorerPanel","LogPanel","Log","isLayoutV1","isLayoutV2","log","module","DEFAULT_LAYOUT_CONFIG","layoutConfig","type","content","height","component","COMPONENT","title","TITLE","isClosable","width","links","filterSets","version","DEFAULT_LAYOUT_CONFIG_NO_CONSOLE","normalizeLayout","layout","Error","concat","getDefaultLayout","_x","_getDefaultLayout","apply","arguments","_asyncToGenerator","layoutStorage","isConsoleAvailable","length","undefined","layouts","getLayouts","getLayout","err","error","warn","exportLayout","data","pluginDataMap","exportedLayout"],"sources":["../../src/storage/UserLayoutUtils.ts"],"sourcesContent":["import {\n CommandHistoryPanel,\n ConsolePanel,\n FileExplorerPanel,\n LogPanel,\n} from '@deephaven/dashboard-core-plugins';\nimport Log from '@deephaven/log';\nimport { CustomizableWorkspaceData } from '@deephaven/redux';\nimport
|
|
1
|
+
{"version":3,"file":"UserLayoutUtils.js","names":["CommandHistoryPanel","ConsolePanel","FileExplorerPanel","LogPanel","Log","isLayoutV1","isLayoutV2","log","module","DEFAULT_LAYOUT_CONFIG","layoutConfig","type","content","height","component","COMPONENT","title","TITLE","isClosable","width","links","filterSets","version","DEFAULT_LAYOUT_CONFIG_NO_CONSOLE","normalizeLayout","layout","Error","concat","getDefaultLayout","_x","_getDefaultLayout","apply","arguments","_asyncToGenerator","layoutStorage","isConsoleAvailable","length","undefined","layouts","getLayouts","getLayout","err","error","warn","exportLayout","data","pluginDataMap","exportedLayout"],"sources":["../../src/storage/UserLayoutUtils.ts"],"sourcesContent":["import {\n CommandHistoryPanel,\n ConsolePanel,\n FileExplorerPanel,\n LogPanel,\n} from '@deephaven/dashboard-core-plugins';\nimport Log from '@deephaven/log';\nimport { type CustomizableWorkspaceData } from '@deephaven/redux';\nimport {\n type ExportedLayout,\n type ExportedLayoutV2,\n isLayoutV1,\n isLayoutV2,\n} from './LayoutStorage';\nimport type LayoutStorage from './LayoutStorage';\n\nconst log = Log.module('UserLayoutUtils');\n\nexport const DEFAULT_LAYOUT_CONFIG: ExportedLayoutV2 = {\n layoutConfig: [\n {\n type: 'column',\n content: [\n {\n type: 'row',\n height: 40, // slightly smaller than 50-50 to allow more space for tables below\n content: [\n {\n type: 'stack',\n content: [\n {\n type: 'react-component',\n component: ConsolePanel.COMPONENT,\n title: ConsolePanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: LogPanel.COMPONENT,\n title: LogPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n {\n type: 'stack',\n width: 25,\n content: [\n {\n type: 'react-component',\n component: CommandHistoryPanel.COMPONENT,\n title: CommandHistoryPanel.TITLE,\n isClosable: false,\n },\n {\n type: 'react-component',\n component: FileExplorerPanel.COMPONENT,\n title: FileExplorerPanel.TITLE,\n isClosable: false,\n },\n ],\n },\n ],\n },\n {\n type: 'row',\n content: [\n {\n type: 'stack',\n title: 'Notebooks',\n content: [],\n },\n ],\n },\n ],\n },\n ],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport const DEFAULT_LAYOUT_CONFIG_NO_CONSOLE: ExportedLayoutV2 = {\n layoutConfig: [],\n links: [],\n filterSets: [],\n version: 2,\n};\n\nexport function normalizeLayout(layout: ExportedLayout): ExportedLayoutV2 {\n if (isLayoutV2(layout)) {\n return layout;\n }\n if (isLayoutV1(layout)) {\n const layoutConfig = layout;\n return {\n layoutConfig,\n links: [],\n filterSets: [],\n version: 2,\n };\n }\n\n throw new Error(`Unexpected layout import format: ${layout}`);\n}\n\n/**\n * Get the default layout for the user to use. Checks layout storage for any layouts, and uses the first one if found.\n * @param layoutStorage The layout storage to get the default layouts from\n * @param isConsoleAvailable Whether console sessions are available.\n * @returns The default layout config to use\n */\nexport async function getDefaultLayout(\n layoutStorage: LayoutStorage,\n isConsoleAvailable = true\n): Promise<ExportedLayoutV2> {\n try {\n const layouts = await layoutStorage.getLayouts();\n if (layouts.length > 0) {\n try {\n // We found a layout on the server, use it. It could be an empty layout if they want user to build their own\n const layout = await layoutStorage.getLayout(layouts[0]);\n return normalizeLayout(layout);\n } catch (err) {\n log.error('Unable to load layout', layouts[0], ':', err);\n log.warn('No valid layouts found, falling back to default layout');\n }\n }\n } catch (err) {\n log.error('Unable to fetch layout list', err);\n log.warn('Falling back to default layout');\n }\n // Otherwise, do the default layout\n return isConsoleAvailable\n ? DEFAULT_LAYOUT_CONFIG\n : DEFAULT_LAYOUT_CONFIG_NO_CONSOLE;\n}\n\nexport function exportLayout(\n data: CustomizableWorkspaceData\n): ExportedLayoutV2 {\n const { filterSets, layoutConfig, links, pluginDataMap } = data as Omit<\n ExportedLayoutV2,\n 'version'\n >;\n const exportedLayout: ExportedLayoutV2 = {\n filterSets,\n layoutConfig,\n links,\n pluginDataMap,\n version: 2,\n };\n return exportedLayout;\n}\n\nexport default { exportLayout, getDefaultLayout, normalizeLayout };\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileStorage, File, FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';
|
|
1
|
+
import { type FileStorage, type File, type FileStorageItem, type FileStorageTable } from '@deephaven/file-explorer';
|
|
2
2
|
import type { dh as DhType } from '@deephaven/jsapi-types';
|
|
3
3
|
export declare class GrpcFileStorage implements FileStorage {
|
|
4
4
|
private static readonly REFRESH_THROTTLE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcFileStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcFileStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,
|
|
1
|
+
{"version":3,"file":"GrpcFileStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcFileStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAGtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAM3D,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAE/C,OAAO,CAAC,EAAE,CAAgB;IAE1B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAE/D,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B;;;;OAIG;gBAED,EAAE,EAAE,OAAO,MAAM,EACjB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAC7C,IAAI,SAAK;IAOX,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,OAAO;IAIT,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAWvD,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAMrC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKvC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA8BlD,OAAO,CAAC,aAAa,CAEgB;CACtC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcFileStorage.js","names":["throttle","FileNotFoundError","FileUtils","isFileType","Log","GrpcFileStorageTable","log","module","GrpcFileStorage","constructor","dh","storageService","root","arguments","length","undefined","_defineProperty","tables","forEach","table","refresh","REFRESH_THROTTLE","removeRoot","filename","addRoot","path","createDirectory","_this","_asyncToGenerator","refreshTables","type","id","basename","getBaseName","getTable","_this2","push","saveFile","file","_this3","fileContents","storage","FileContents","text","content","loadFile","name","_this4","copyFile","newName","_this5","deleteFile","_this6","deleteItem","moveFile","_this7","moveItem","info","_this8","allItems","listItems","getPath","error","Error","itemDetails","concat"],"sources":["../../../src/storage/grpc/GrpcFileStorage.ts"],"sourcesContent":["import throttle from 'lodash.throttle';\nimport {\n FileNotFoundError,\n FileStorage,\n File,\n FileStorageItem,\n FileStorageTable,\n FileUtils,\n isFileType,\n} from '@deephaven/file-explorer';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport GrpcFileStorageTable from './GrpcFileStorageTable';\n\nconst log = Log.module('GrpcFileStorage');\n\nexport class GrpcFileStorage implements FileStorage {\n private static readonly REFRESH_THROTTLE = 150;\n\n private dh: typeof DhType;\n\n private readonly storageService: DhType.storage.StorageService;\n\n private tables = [] as GrpcFileStorageTable[];\n\n private readonly root: string;\n\n /**\n * FileStorage implementation using gRPC\n * @param storageService Storage service to use\n * @param root Root path for this instance. Should not contain trailing slash.\n */\n constructor(\n dh: typeof DhType,\n storageService: DhType.storage.StorageService,\n root = ''\n ) {\n this.dh = dh;\n this.storageService = storageService;\n this.root = root;\n }\n\n private removeRoot(filename: string): string {\n return FileUtils.removeRoot(this.root, filename);\n }\n\n private addRoot(path: string): string {\n return FileUtils.addRoot(this.root, path);\n }\n\n async createDirectory(path: string): Promise<FileStorageItem> {\n await this.storageService.createDirectory(this.addRoot(path));\n this.refreshTables();\n return {\n type: 'directory',\n id: path,\n filename: path,\n basename: FileUtils.getBaseName(path),\n };\n }\n\n async getTable(): Promise<FileStorageTable> {\n const table = new GrpcFileStorageTable(this.storageService, this.root);\n this.tables.push(table);\n return table;\n }\n\n async saveFile(file: File): Promise<File> {\n const fileContents = this.dh.storage.FileContents.text(file.content);\n await this.storageService.saveFile(\n this.addRoot(file.filename),\n fileContents,\n true\n );\n this.refreshTables();\n return file;\n }\n\n async loadFile(name: string): Promise<File> {\n const fileContents = await this.storageService.loadFile(this.addRoot(name));\n const content = await fileContents.text();\n return {\n filename: name,\n basename: FileUtils.getBaseName(name),\n content,\n };\n }\n\n async copyFile(name: string, newName: string): Promise<void> {\n const fileContents = await this.storageService.loadFile(this.addRoot(name));\n await this.storageService.saveFile(\n this.addRoot(newName),\n fileContents,\n false\n );\n this.refreshTables();\n }\n\n async deleteFile(name: string): Promise<void> {\n await this.storageService.deleteItem(this.addRoot(name));\n this.refreshTables();\n }\n\n async moveFile(name: string, newName: string): Promise<void> {\n await this.storageService.moveItem(\n this.addRoot(name),\n this.addRoot(newName)\n );\n this.refreshTables();\n }\n\n async info(name: string): Promise<FileStorageItem> {\n const allItems = await this.storageService.listItems(\n this.addRoot(FileUtils.getPath(name)),\n FileUtils.getBaseName(name)\n );\n if (allItems.length === 0) {\n throw new FileNotFoundError();\n }\n if (allItems.length > 1) {\n log.error(\n 'More than one matching file found, should never happen.',\n allItems\n );\n throw new Error('More than one matching file found');\n }\n\n const itemDetails = allItems[0];\n\n if (!isFileType(itemDetails.type)) {\n throw new Error(`Unexpected file type: ${itemDetails.type}`);\n }\n\n return {\n filename: this.removeRoot(itemDetails.filename),\n basename: itemDetails.basename,\n id: this.removeRoot(itemDetails.filename),\n type: itemDetails.type,\n };\n }\n\n private refreshTables = throttle(() => {\n this.tables.forEach(table => table.refresh());\n }, GrpcFileStorage.REFRESH_THROTTLE);\n}\n\nexport default GrpcFileStorage;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GrpcFileStorage.js","names":["throttle","FileNotFoundError","FileUtils","isFileType","Log","GrpcFileStorageTable","log","module","GrpcFileStorage","constructor","dh","storageService","root","arguments","length","undefined","_defineProperty","tables","forEach","table","refresh","REFRESH_THROTTLE","removeRoot","filename","addRoot","path","createDirectory","_this","_asyncToGenerator","refreshTables","type","id","basename","getBaseName","getTable","_this2","push","saveFile","file","_this3","fileContents","storage","FileContents","text","content","loadFile","name","_this4","copyFile","newName","_this5","deleteFile","_this6","deleteItem","moveFile","_this7","moveItem","info","_this8","allItems","listItems","getPath","error","Error","itemDetails","concat"],"sources":["../../../src/storage/grpc/GrpcFileStorage.ts"],"sourcesContent":["import throttle from 'lodash.throttle';\nimport {\n FileNotFoundError,\n type FileStorage,\n type File,\n type FileStorageItem,\n type FileStorageTable,\n FileUtils,\n isFileType,\n} from '@deephaven/file-explorer';\nimport type { dh as DhType } from '@deephaven/jsapi-types';\nimport Log from '@deephaven/log';\nimport GrpcFileStorageTable from './GrpcFileStorageTable';\n\nconst log = Log.module('GrpcFileStorage');\n\nexport class GrpcFileStorage implements FileStorage {\n private static readonly REFRESH_THROTTLE = 150;\n\n private dh: typeof DhType;\n\n private readonly storageService: DhType.storage.StorageService;\n\n private tables = [] as GrpcFileStorageTable[];\n\n private readonly root: string;\n\n /**\n * FileStorage implementation using gRPC\n * @param storageService Storage service to use\n * @param root Root path for this instance. Should not contain trailing slash.\n */\n constructor(\n dh: typeof DhType,\n storageService: DhType.storage.StorageService,\n root = ''\n ) {\n this.dh = dh;\n this.storageService = storageService;\n this.root = root;\n }\n\n private removeRoot(filename: string): string {\n return FileUtils.removeRoot(this.root, filename);\n }\n\n private addRoot(path: string): string {\n return FileUtils.addRoot(this.root, path);\n }\n\n async createDirectory(path: string): Promise<FileStorageItem> {\n await this.storageService.createDirectory(this.addRoot(path));\n this.refreshTables();\n return {\n type: 'directory',\n id: path,\n filename: path,\n basename: FileUtils.getBaseName(path),\n };\n }\n\n async getTable(): Promise<FileStorageTable> {\n const table = new GrpcFileStorageTable(this.storageService, this.root);\n this.tables.push(table);\n return table;\n }\n\n async saveFile(file: File): Promise<File> {\n const fileContents = this.dh.storage.FileContents.text(file.content);\n await this.storageService.saveFile(\n this.addRoot(file.filename),\n fileContents,\n true\n );\n this.refreshTables();\n return file;\n }\n\n async loadFile(name: string): Promise<File> {\n const fileContents = await this.storageService.loadFile(this.addRoot(name));\n const content = await fileContents.text();\n return {\n filename: name,\n basename: FileUtils.getBaseName(name),\n content,\n };\n }\n\n async copyFile(name: string, newName: string): Promise<void> {\n const fileContents = await this.storageService.loadFile(this.addRoot(name));\n await this.storageService.saveFile(\n this.addRoot(newName),\n fileContents,\n false\n );\n this.refreshTables();\n }\n\n async deleteFile(name: string): Promise<void> {\n await this.storageService.deleteItem(this.addRoot(name));\n this.refreshTables();\n }\n\n async moveFile(name: string, newName: string): Promise<void> {\n await this.storageService.moveItem(\n this.addRoot(name),\n this.addRoot(newName)\n );\n this.refreshTables();\n }\n\n async info(name: string): Promise<FileStorageItem> {\n const allItems = await this.storageService.listItems(\n this.addRoot(FileUtils.getPath(name)),\n FileUtils.getBaseName(name)\n );\n if (allItems.length === 0) {\n throw new FileNotFoundError();\n }\n if (allItems.length > 1) {\n log.error(\n 'More than one matching file found, should never happen.',\n allItems\n );\n throw new Error('More than one matching file found');\n }\n\n const itemDetails = allItems[0];\n\n if (!isFileType(itemDetails.type)) {\n throw new Error(`Unexpected file type: ${itemDetails.type}`);\n }\n\n return {\n filename: this.removeRoot(itemDetails.filename),\n basename: itemDetails.basename,\n id: this.removeRoot(itemDetails.filename),\n type: itemDetails.type,\n };\n }\n\n private refreshTables = throttle(() => {\n this.tables.forEach(table => table.refresh());\n }, GrpcFileStorage.REFRESH_THROTTLE);\n}\n\nexport default GrpcFileStorage;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StorageTableViewport, StorageListenerRemover, ViewportUpdateCallback, ViewportData, IndexRange, StorageSnapshot } from '@deephaven/storage';
|
|
2
|
-
import { FileStorageItem, FileStorageTable } from '@deephaven/file-explorer';
|
|
1
|
+
import { type StorageTableViewport, type StorageListenerRemover, type ViewportUpdateCallback, type ViewportData, type IndexRange, type StorageSnapshot } from '@deephaven/storage';
|
|
2
|
+
import { type FileStorageItem, type FileStorageTable } from '@deephaven/file-explorer';
|
|
3
3
|
import type { dh } from '@deephaven/jsapi-types';
|
|
4
4
|
/**
|
|
5
5
|
* Implementation of FileStorageTable for gRPC service.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcFileStorageTable.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"GrpcFileStorageTable.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAKjD;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,MAAM,CAAC,gBAAgB,SAAM;IAE7B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAE3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,eAAe,CAAC,CAAuB;IAE/C,OAAO,CAAC,SAAS,CAAiD;IAElE,OAAO,CAAC,qBAAqB,CAAC,CAE5B;IAEF,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAE5D;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAgD;IAEnE;;;;OAIG;gBAED,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,EACzC,QAAQ,SAAK,EACb,IAAI,SAAW;IAajB,OAAO,CAAC,cAAc;IAItB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;IASzD,WAAW,CACT,YAAY,EAAE,UAAU,EAAE,GACzB,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAI5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAoClD,WAAW,IAAI,IAAI;IAQnB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,WAAW,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAMjD,UAAU,IAAI,IAAI;IAIlB,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAInB,KAAK,IAAI,IAAI;IAIb,QAAQ,CACN,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAChD,sBAAsB;IAOzB,SAAS,CACP,QAAQ,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,GACvE,IAAI;IAKP,OAAO,IAAI,IAAI;IAmCf;;OAEG;IACH,OAAO,CAAC,eAAe;YAUT,SAAS;IAsDvB,OAAO,CAAC,UAAU;CAQnB;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcFileStorageTable.js","names":["Log","CanceledPromiseError","PromiseUtils","FileUtils","debounce","log","module","GrpcFileStorageTable","constructor","storageService","baseRoot","arguments","length","undefined","root","_defineProperty","Map","doRefresh","bind","REFRESH_DEBOUNCE","removeBaseRoot","filename","removeRoot","getViewportData","_this$viewportUpdateP","viewportUpdatePromise","refreshInternal","Promise","resolve","items","offset","getSnapshot","sortedRanges","Error","size","currentSize","setExpanded","path","expanded","paths","split","nextPath","shift","concat","remainingPath","join","childTables","has","childTable","set","get","delete","currentViewport","collapseAll","clear","setSearch","search","setViewport","viewport","setFilters","setSorts","setReversed","close","listeners","onUpdate","callback","filter","other","debug2","fetchData","refresh","_this$viewportUpdateP2","cancel","refreshPromise","makeCancelable","then","viewportData","currentViewportData","sendUpdate","catch","e","isCanceled","error","_this","_asyncToGenerator","dirContents","listItems","map","file","type","basename","id","isExpanded","sort","a","b","localeCompare","i","item","top","bottom","childViewportData","splice","slice","_this$currentViewport","data"],"sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport Log from '@deephaven/log';\nimport {\n StorageTableViewport,\n StorageListenerRemover,\n ViewportUpdateCallback,\n ViewportData,\n IndexRange,\n StorageSnapshot,\n} from '@deephaven/storage';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport {\n FileStorageItem,\n FileStorageTable,\n FileUtils,\n} from '@deephaven/file-explorer';\nimport type { dh } from '@deephaven/jsapi-types';\nimport debounce from 'lodash.debounce';\n\nconst log = Log.module('GrpcFileStorageTable');\n\n/**\n * Implementation of FileStorageTable for gRPC service.\n * Takes a path to specify what root this table should start at.\n */\nexport class GrpcFileStorageTable implements FileStorageTable {\n static REFRESH_DEBOUNCE = 50;\n\n private readonly storageService: dh.storage.StorageService;\n\n private readonly baseRoot: string;\n\n private readonly root: string;\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private listeners: ViewportUpdateCallback<FileStorageItem>[] = [];\n\n private viewportUpdatePromise?: CancelablePromise<\n ViewportData<FileStorageItem>\n >;\n\n private currentViewportData?: ViewportData<FileStorageItem>;\n\n /**\n * Map of expanded directory paths to the tables that manage that path.\n * We use a tree of tables to query the server so we just get the directories that are expanded.\n */\n private childTables: Map<string, GrpcFileStorageTable> = new Map();\n\n /**\n * @param storageService The storage service to use\n * @param baseRoot Base root for the service\n * @param root The root path for this storage table\n */\n constructor(\n storageService: dh.storage.StorageService,\n baseRoot = '',\n root = baseRoot\n ) {\n this.storageService = storageService;\n this.baseRoot = baseRoot;\n this.root = root;\n if (root === baseRoot) {\n this.doRefresh = debounce(\n this.doRefresh.bind(this),\n GrpcFileStorageTable.REFRESH_DEBOUNCE\n );\n }\n }\n\n private removeBaseRoot(filename: string): string {\n return FileUtils.removeRoot(this.baseRoot, filename);\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n if (!this.viewportUpdatePromise) {\n this.refreshInternal();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n setExpanded(path: string, expanded: boolean): void {\n const paths = path.split('/');\n let nextPath = paths.shift();\n if (nextPath === undefined || nextPath === '') {\n nextPath = paths.shift();\n }\n if (nextPath === undefined || nextPath === '') {\n throw new Error(`Invalid path: ${path}`);\n }\n const remainingPath = paths.join('/');\n if (expanded) {\n if (!this.childTables.has(nextPath)) {\n const childTable = new GrpcFileStorageTable(\n this.storageService,\n this.baseRoot,\n `${this.root}/${nextPath}`\n );\n this.childTables.set(nextPath, childTable);\n }\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n }\n } else if (this.childTables.has(nextPath)) {\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n } else {\n this.childTables.delete(nextPath);\n }\n }\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n collapseAll(): void {\n this.childTables.clear();\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n setSearch(search: string): void {\n throw new Error('Method not implemented.');\n }\n\n setViewport(viewport: StorageTableViewport): void {\n this.currentViewport = viewport;\n\n this.refreshInternal();\n }\n\n setFilters(): void {\n throw new Error('Method not implemented.');\n }\n\n setSorts(): void {\n throw new Error('Method not implemented.');\n }\n\n setReversed(): void {\n throw new Error('Method not implemented.');\n }\n\n close(): void {\n this.listeners = [];\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n doRefresh(\n callback: (fetchPromise: Promise<ViewportData<FileStorageItem>>) => void\n ): void {\n log.debug2('doRefresh', this.root);\n callback(this.fetchData());\n }\n\n refresh(): void {\n log.debug2('refresh', this.root);\n\n this.viewportUpdatePromise?.cancel();\n\n const refreshPromise = new Promise<ViewportData<FileStorageItem>>(\n resolve => {\n this.doRefresh(resolve);\n }\n );\n\n const viewportUpdatePromise = PromiseUtils.makeCancelable(\n refreshPromise.then(viewportData => {\n if (this.viewportUpdatePromise !== viewportUpdatePromise) {\n throw new CanceledPromiseError();\n }\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n })\n );\n\n // Add a catch here as we're not catching the promises anywhere else\n viewportUpdatePromise.catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Error updating viewport', e);\n }\n });\n\n this.viewportUpdatePromise = viewportUpdatePromise;\n }\n\n /**\n * Refreshes data, but catches any errors and logs them\n */\n private refreshInternal(): void {\n try {\n this.refresh();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refresh data', e);\n }\n }\n }\n\n private async fetchData(): Promise<ViewportData<FileStorageItem>> {\n const { currentViewport: viewport } = this;\n if (!viewport) {\n throw new Error('No viewport set');\n }\n\n // First get the root directory contents\n const dirContents = await this.storageService.listItems(this.root);\n let items = dirContents\n .map(file => ({\n type: file.type,\n filename: this.removeBaseRoot(file.filename),\n basename: file.basename,\n id: this.removeBaseRoot(file.filename),\n isExpanded:\n file.type === 'directory'\n ? this.childTables.has(file.basename)\n : undefined,\n }))\n .sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.basename.localeCompare(b.basename);\n }) as FileStorageItem[];\n\n // Get the data from all expanded directories\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { basename, filename } = item;\n if (\n filename === this.removeBaseRoot(`${this.root}/${basename}`) &&\n item.type === 'directory'\n ) {\n const childTable = this.childTables.get(basename);\n if (childTable != null) {\n childTable.setViewport({ top: 0, bottom: viewport.bottom - i });\n // eslint-disable-next-line no-await-in-loop\n const childViewportData = await childTable.getViewportData();\n items.splice(i + 1, 0, ...childViewportData.items);\n }\n }\n }\n\n this.currentSize = items.length;\n\n log.debug2(this.root, 'items', items, viewport);\n\n // Slice it to the correct viewport\n items = items.slice(viewport.top, viewport.bottom);\n\n return { items, offset: viewport.top };\n }\n\n private sendUpdate(): void {\n // Retain a reference to it in case a listener gets removed while sending an update\n const { listeners } = this;\n const data = this.currentViewportData ?? { items: [], offset: 0 };\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](data);\n }\n }\n}\n\nexport default GrpcFileStorageTable;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GrpcFileStorageTable.js","names":["Log","CanceledPromiseError","PromiseUtils","FileUtils","debounce","log","module","GrpcFileStorageTable","constructor","storageService","baseRoot","arguments","length","undefined","root","_defineProperty","Map","doRefresh","bind","REFRESH_DEBOUNCE","removeBaseRoot","filename","removeRoot","getViewportData","_this$viewportUpdateP","viewportUpdatePromise","refreshInternal","Promise","resolve","items","offset","getSnapshot","sortedRanges","Error","size","currentSize","setExpanded","path","expanded","paths","split","nextPath","shift","concat","remainingPath","join","childTables","has","childTable","set","get","delete","currentViewport","collapseAll","clear","setSearch","search","setViewport","viewport","setFilters","setSorts","setReversed","close","listeners","onUpdate","callback","filter","other","debug2","fetchData","refresh","_this$viewportUpdateP2","cancel","refreshPromise","makeCancelable","then","viewportData","currentViewportData","sendUpdate","catch","e","isCanceled","error","_this","_asyncToGenerator","dirContents","listItems","map","file","type","basename","id","isExpanded","sort","a","b","localeCompare","i","item","top","bottom","childViewportData","splice","slice","_this$currentViewport","data"],"sources":["../../../src/storage/grpc/GrpcFileStorageTable.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\n\nimport Log from '@deephaven/log';\nimport {\n type StorageTableViewport,\n type StorageListenerRemover,\n type ViewportUpdateCallback,\n type ViewportData,\n type IndexRange,\n type StorageSnapshot,\n} from '@deephaven/storage';\nimport {\n type CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport {\n type FileStorageItem,\n type FileStorageTable,\n FileUtils,\n} from '@deephaven/file-explorer';\nimport type { dh } from '@deephaven/jsapi-types';\nimport debounce from 'lodash.debounce';\n\nconst log = Log.module('GrpcFileStorageTable');\n\n/**\n * Implementation of FileStorageTable for gRPC service.\n * Takes a path to specify what root this table should start at.\n */\nexport class GrpcFileStorageTable implements FileStorageTable {\n static REFRESH_DEBOUNCE = 50;\n\n private readonly storageService: dh.storage.StorageService;\n\n private readonly baseRoot: string;\n\n private readonly root: string;\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private listeners: ViewportUpdateCallback<FileStorageItem>[] = [];\n\n private viewportUpdatePromise?: CancelablePromise<\n ViewportData<FileStorageItem>\n >;\n\n private currentViewportData?: ViewportData<FileStorageItem>;\n\n /**\n * Map of expanded directory paths to the tables that manage that path.\n * We use a tree of tables to query the server so we just get the directories that are expanded.\n */\n private childTables: Map<string, GrpcFileStorageTable> = new Map();\n\n /**\n * @param storageService The storage service to use\n * @param baseRoot Base root for the service\n * @param root The root path for this storage table\n */\n constructor(\n storageService: dh.storage.StorageService,\n baseRoot = '',\n root = baseRoot\n ) {\n this.storageService = storageService;\n this.baseRoot = baseRoot;\n this.root = root;\n if (root === baseRoot) {\n this.doRefresh = debounce(\n this.doRefresh.bind(this),\n GrpcFileStorageTable.REFRESH_DEBOUNCE\n );\n }\n }\n\n private removeBaseRoot(filename: string): string {\n return FileUtils.removeRoot(this.baseRoot, filename);\n }\n\n getViewportData(): Promise<ViewportData<FileStorageItem>> {\n if (!this.viewportUpdatePromise) {\n this.refreshInternal();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n getSnapshot(\n sortedRanges: IndexRange[]\n ): Promise<StorageSnapshot<FileStorageItem>> {\n throw new Error('Method not implemented.');\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n setExpanded(path: string, expanded: boolean): void {\n const paths = path.split('/');\n let nextPath = paths.shift();\n if (nextPath === undefined || nextPath === '') {\n nextPath = paths.shift();\n }\n if (nextPath === undefined || nextPath === '') {\n throw new Error(`Invalid path: ${path}`);\n }\n const remainingPath = paths.join('/');\n if (expanded) {\n if (!this.childTables.has(nextPath)) {\n const childTable = new GrpcFileStorageTable(\n this.storageService,\n this.baseRoot,\n `${this.root}/${nextPath}`\n );\n this.childTables.set(nextPath, childTable);\n }\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n }\n } else if (this.childTables.has(nextPath)) {\n if (remainingPath) {\n const childTable = this.childTables.get(nextPath);\n childTable?.setExpanded(remainingPath, expanded);\n } else {\n this.childTables.delete(nextPath);\n }\n }\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n collapseAll(): void {\n this.childTables.clear();\n if (this.currentViewport) {\n this.refreshInternal();\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n setSearch(search: string): void {\n throw new Error('Method not implemented.');\n }\n\n setViewport(viewport: StorageTableViewport): void {\n this.currentViewport = viewport;\n\n this.refreshInternal();\n }\n\n setFilters(): void {\n throw new Error('Method not implemented.');\n }\n\n setSorts(): void {\n throw new Error('Method not implemented.');\n }\n\n setReversed(): void {\n throw new Error('Method not implemented.');\n }\n\n close(): void {\n this.listeners = [];\n }\n\n onUpdate(\n callback: ViewportUpdateCallback<FileStorageItem>\n ): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n doRefresh(\n callback: (fetchPromise: Promise<ViewportData<FileStorageItem>>) => void\n ): void {\n log.debug2('doRefresh', this.root);\n callback(this.fetchData());\n }\n\n refresh(): void {\n log.debug2('refresh', this.root);\n\n this.viewportUpdatePromise?.cancel();\n\n const refreshPromise = new Promise<ViewportData<FileStorageItem>>(\n resolve => {\n this.doRefresh(resolve);\n }\n );\n\n const viewportUpdatePromise = PromiseUtils.makeCancelable(\n refreshPromise.then(viewportData => {\n if (this.viewportUpdatePromise !== viewportUpdatePromise) {\n throw new CanceledPromiseError();\n }\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n })\n );\n\n // Add a catch here as we're not catching the promises anywhere else\n viewportUpdatePromise.catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Error updating viewport', e);\n }\n });\n\n this.viewportUpdatePromise = viewportUpdatePromise;\n }\n\n /**\n * Refreshes data, but catches any errors and logs them\n */\n private refreshInternal(): void {\n try {\n this.refresh();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refresh data', e);\n }\n }\n }\n\n private async fetchData(): Promise<ViewportData<FileStorageItem>> {\n const { currentViewport: viewport } = this;\n if (!viewport) {\n throw new Error('No viewport set');\n }\n\n // First get the root directory contents\n const dirContents = await this.storageService.listItems(this.root);\n let items = dirContents\n .map(file => ({\n type: file.type,\n filename: this.removeBaseRoot(file.filename),\n basename: file.basename,\n id: this.removeBaseRoot(file.filename),\n isExpanded:\n file.type === 'directory'\n ? this.childTables.has(file.basename)\n : undefined,\n }))\n .sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.basename.localeCompare(b.basename);\n }) as FileStorageItem[];\n\n // Get the data from all expanded directories\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { basename, filename } = item;\n if (\n filename === this.removeBaseRoot(`${this.root}/${basename}`) &&\n item.type === 'directory'\n ) {\n const childTable = this.childTables.get(basename);\n if (childTable != null) {\n childTable.setViewport({ top: 0, bottom: viewport.bottom - i });\n // eslint-disable-next-line no-await-in-loop\n const childViewportData = await childTable.getViewportData();\n items.splice(i + 1, 0, ...childViewportData.items);\n }\n }\n }\n\n this.currentSize = items.length;\n\n log.debug2(this.root, 'items', items, viewport);\n\n // Slice it to the correct viewport\n items = items.slice(viewport.top, viewport.bottom);\n\n return { items, offset: viewport.top };\n }\n\n private sendUpdate(): void {\n // Retain a reference to it in case a listener gets removed while sending an update\n const { listeners } = this;\n const data = this.currentViewportData ?? { items: [], offset: 0 };\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](data);\n }\n }\n}\n\nexport default GrpcFileStorageTable;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { dh } from '@deephaven/jsapi-types';
|
|
2
|
-
import
|
|
2
|
+
import { type ExportedLayout } from '../LayoutStorage';
|
|
3
|
+
import type LayoutStorage from '../LayoutStorage';
|
|
3
4
|
export declare class GrpcLayoutStorage implements LayoutStorage {
|
|
4
5
|
readonly storageService: dh.storage.StorageService;
|
|
5
6
|
readonly root: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcLayoutStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcLayoutStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"GrpcLayoutStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/grpc/GrpcLayoutStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,aAAa;IACrD,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;IAEnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;gBACS,cAAc,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,SAAK;IAK1D,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM/B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAQvD;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GrpcLayoutStorage.js","names":["GrpcLayoutStorage","constructor","storageService","root","arguments","length","undefined","_defineProperty","getLayouts","_this","_asyncToGenerator","files","listItems","map","file","basename","getLayout","name","_this2","fileContents","loadFile","concat","content","text","JSON","parse"],"sources":["../../../src/storage/grpc/GrpcLayoutStorage.ts"],"sourcesContent":["import type { dh } from '@deephaven/jsapi-types';\nimport
|
|
1
|
+
{"version":3,"file":"GrpcLayoutStorage.js","names":["GrpcLayoutStorage","constructor","storageService","root","arguments","length","undefined","_defineProperty","getLayouts","_this","_asyncToGenerator","files","listItems","map","file","basename","getLayout","name","_this2","fileContents","loadFile","concat","content","text","JSON","parse"],"sources":["../../../src/storage/grpc/GrpcLayoutStorage.ts"],"sourcesContent":["import type { dh } from '@deephaven/jsapi-types';\nimport { type ExportedLayout } from '../LayoutStorage';\nimport type LayoutStorage from '../LayoutStorage';\n\nexport class GrpcLayoutStorage implements LayoutStorage {\n readonly storageService: dh.storage.StorageService;\n\n readonly root: string;\n\n /**\n *\n * @param storageService The gRPC storage service to use\n * @param root The root path where the layouts are stored\n */\n constructor(storageService: dh.storage.StorageService, root = '') {\n this.storageService = storageService;\n this.root = root;\n }\n\n async getLayouts(): Promise<string[]> {\n const files = await this.storageService.listItems(this.root, '*.json');\n\n return files.map(file => file.basename);\n }\n\n async getLayout(name: string): Promise<ExportedLayout> {\n const fileContents = await this.storageService.loadFile(\n `${this.root}/${name}`\n );\n const content = await fileContents.text();\n\n return JSON.parse(content);\n }\n}\n\nexport default GrpcLayoutStorage;\n"],"mappings":";;;;;AAIA,OAAO,MAAMA,iBAAiB,CAA0B;EAKtD;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,cAAyC,EAAa;IAAA,IAAXC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAAAG,eAAA;IAAAA,eAAA;IAC9D,IAAI,CAACL,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,IAAI,GAAGA,IAAI;EAClB;EAEMK,UAAUA,CAAA,EAAsB;IAAA,IAAAC,KAAA;IAAA,OAAAC,iBAAA;MACpC,IAAMC,KAAK,SAASF,KAAI,CAACP,cAAc,CAACU,SAAS,CAACH,KAAI,CAACN,IAAI,EAAE,QAAQ,CAAC;MAEtE,OAAOQ,KAAK,CAACE,GAAG,CAACC,IAAI,IAAIA,IAAI,CAACC,QAAQ,CAAC;IAAC;EAC1C;EAEMC,SAASA,CAACC,IAAY,EAA2B;IAAA,IAAAC,MAAA;IAAA,OAAAR,iBAAA;MACrD,IAAMS,YAAY,SAASD,MAAI,CAAChB,cAAc,CAACkB,QAAQ,IAAAC,MAAA,CAClDH,MAAI,CAACf,IAAI,OAAAkB,MAAA,CAAIJ,IAAI,CACtB,CAAC;MACD,IAAMK,OAAO,SAASH,YAAY,CAACI,IAAI,CAAC,CAAC;MAEzC,OAAOC,IAAI,CAACC,KAAK,CAACH,OAAO,CAAC;IAAC;EAC7B;AACF;AAEA,eAAetB,iBAAiB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/app-utils",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.95.0",
|
|
4
4
|
"description": "Deephaven App Utils",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"build:babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@deephaven/test-utils": "^0.
|
|
25
|
+
"@deephaven/test-utils": "^0.95.0",
|
|
26
26
|
"react": "^17.x",
|
|
27
27
|
"react-dom": "^17.x",
|
|
28
28
|
"react-redux": "^7.x",
|
|
@@ -30,26 +30,26 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@adobe/react-spectrum": "3.35.1",
|
|
33
|
-
"@deephaven/auth-plugins": "^0.
|
|
34
|
-
"@deephaven/chart": "^0.
|
|
35
|
-
"@deephaven/components": "^0.
|
|
36
|
-
"@deephaven/console": "^0.
|
|
37
|
-
"@deephaven/dashboard": "^0.
|
|
38
|
-
"@deephaven/dashboard-core-plugins": "^0.
|
|
39
|
-
"@deephaven/file-explorer": "^0.
|
|
40
|
-
"@deephaven/golden-layout": "^0.
|
|
41
|
-
"@deephaven/icons": "^0.
|
|
42
|
-
"@deephaven/iris-grid": "^0.
|
|
43
|
-
"@deephaven/jsapi-bootstrap": "^0.
|
|
44
|
-
"@deephaven/jsapi-components": "^0.
|
|
33
|
+
"@deephaven/auth-plugins": "^0.95.0",
|
|
34
|
+
"@deephaven/chart": "^0.95.0",
|
|
35
|
+
"@deephaven/components": "^0.95.0",
|
|
36
|
+
"@deephaven/console": "^0.95.0",
|
|
37
|
+
"@deephaven/dashboard": "^0.95.0",
|
|
38
|
+
"@deephaven/dashboard-core-plugins": "^0.95.0",
|
|
39
|
+
"@deephaven/file-explorer": "^0.95.0",
|
|
40
|
+
"@deephaven/golden-layout": "^0.95.0",
|
|
41
|
+
"@deephaven/icons": "^0.95.0",
|
|
42
|
+
"@deephaven/iris-grid": "^0.95.0",
|
|
43
|
+
"@deephaven/jsapi-bootstrap": "^0.95.0",
|
|
44
|
+
"@deephaven/jsapi-components": "^0.95.0",
|
|
45
45
|
"@deephaven/jsapi-types": "^1.0.0-dev0.34.0",
|
|
46
|
-
"@deephaven/jsapi-utils": "^0.
|
|
47
|
-
"@deephaven/log": "^0.
|
|
48
|
-
"@deephaven/plugin": "^0.
|
|
49
|
-
"@deephaven/react-hooks": "^0.
|
|
50
|
-
"@deephaven/redux": "^0.
|
|
51
|
-
"@deephaven/storage": "^0.
|
|
52
|
-
"@deephaven/utils": "^0.
|
|
46
|
+
"@deephaven/jsapi-utils": "^0.95.0",
|
|
47
|
+
"@deephaven/log": "^0.95.0",
|
|
48
|
+
"@deephaven/plugin": "^0.95.0",
|
|
49
|
+
"@deephaven/react-hooks": "^0.95.0",
|
|
50
|
+
"@deephaven/redux": "^0.95.0",
|
|
51
|
+
"@deephaven/storage": "^0.95.0",
|
|
52
|
+
"@deephaven/utils": "^0.95.0",
|
|
53
53
|
"@fontsource/fira-mono": "5.0.13",
|
|
54
54
|
"@fontsource/fira-sans": "5.0.20",
|
|
55
55
|
"@paciolan/remote-component": "2.13.0",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"publishConfig": {
|
|
74
74
|
"access": "public"
|
|
75
75
|
},
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "ec9b41e921e2122879f53e9a266084d529664680"
|
|
77
77
|
}
|