Line data Source code
1 : import { isDesktopHost } from "../platform/native_globals.js";
2 :
3 1 : export const SALESFORCE_DATA_CLOUD_CONNECTOR = Symbol('SALESFORCE_DATA_CLOUD_CONNECTOR');
4 1 : export const HYPER_CONNECTOR = Symbol('HYPER_CONNECTOR');
5 1 : export const TRINO_CONNECTOR = Symbol('TRINO_CONNECTOR');
6 1 : export const SIDB_CONNECTOR = Symbol('SIDB_CONNECTOR');
7 :
8 1 : export enum ConnectorType {
9 1 : HYPER = 0,
10 1 : SALESFORCE_DATA_CLOUD = 1,
11 1 : TRINO = 2,
12 1 : SIDB = 3,
13 1 : }
14 1 : export const CONNECTOR_TYPES: ConnectorType[] = [
15 1 : ConnectorType.HYPER,
16 1 : ConnectorType.SALESFORCE_DATA_CLOUD,
17 1 : ConnectorType.TRINO,
18 1 : ConnectorType.SIDB,
19 1 : ];
20 :
21 : export interface ConnectorInfo {
22 : /// The connector type
23 : connectorType: ConnectorType;
24 : /// The query shown in the first script of a new session.
25 : helloWorldScript: string;
26 : /// The connector name
27 : names: {
28 : displayLong: string;
29 : displayShort: string;
30 : fileShort: string;
31 : };
32 : /// The icons
33 : icons: {
34 : colored: string,
35 : uncolored: string,
36 : outlines: string,
37 : }
38 : /// The connector features
39 : features: ConnectorFeatures;
40 : /// The connector platforms
41 : platforms: ConnectorPlatforms;
42 : }
43 :
44 : export interface ConnectorPlatforms {
45 : /// Supports the browser?
46 : browser: boolean;
47 : /// Supports the electron app?
48 : native: boolean;
49 : }
50 :
51 : export interface ConnectorFeatures {
52 : /// Do new sessions cache query results?
53 : queryResultCaching: boolean;
54 : /// Do connections only run queries, no DDL or DML?
55 : readOnly: boolean;
56 : }
57 :
58 1 : export const CONNECTOR_INFOS: ConnectorInfo[] = [
59 1 : {
60 1 : connectorType: ConnectorType.HYPER,
61 1 : helloWorldScript: 'select version();',
62 1 : names: {
63 1 : displayShort: 'Hyper',
64 1 : displayLong: 'Hyper',
65 1 : fileShort: 'hyper',
66 1 : },
67 1 : icons: {
68 1 : colored: "hyper",
69 1 : uncolored: "hyper_nocolor",
70 1 : outlines: "hyper_outlines",
71 1 : },
72 1 : features: {
73 1 : queryResultCaching: false,
74 1 : readOnly: false,
75 1 : },
76 1 : platforms: {
77 1 : browser: true,
78 1 : native: true,
79 1 : },
80 1 : },
81 1 : {
82 1 : connectorType: ConnectorType.SALESFORCE_DATA_CLOUD,
83 1 : helloWorldScript: 'select version();',
84 1 : names: {
85 1 : displayShort: 'Salesforce',
86 1 : displayLong: 'Salesforce Data Cloud',
87 1 : fileShort: 'sfdc',
88 1 : },
89 1 : icons: {
90 1 : colored: "salesforce_notext",
91 1 : uncolored: "salesforce_notext_nocolor",
92 1 : outlines: "salesforce_outlines",
93 1 : },
94 1 : features: {
95 1 : queryResultCaching: true,
96 1 : readOnly: true,
97 1 : },
98 1 : platforms: {
99 1 : browser: true,
100 1 : native: true,
101 1 : },
102 1 : },
103 1 : {
104 1 : connectorType: ConnectorType.TRINO,
105 1 : helloWorldScript: 'select version();',
106 1 : names: {
107 1 : displayShort: 'Trino',
108 1 : displayLong: 'Trino',
109 1 : fileShort: 'trino',
110 1 : },
111 1 : icons: {
112 1 : colored: "trino",
113 1 : uncolored: "trino_nocolor",
114 1 : outlines: "trino_outlines",
115 1 : },
116 1 : features: {
117 1 : queryResultCaching: true,
118 1 : readOnly: true,
119 1 : },
120 1 : platforms: {
121 1 : browser: true,
122 1 : native: true,
123 1 : },
124 1 : },
125 1 : {
126 : // SIDB connections behave like Salesforce Data Cloud connections for now, but can write to their database
127 1 : connectorType: ConnectorType.SIDB,
128 1 : helloWorldScript: 'select version();',
129 1 : names: {
130 1 : displayShort: 'SIDB',
131 1 : displayLong: 'SIDB',
132 1 : fileShort: 'sidb',
133 1 : },
134 1 : icons: {
135 1 : colored: "sidb_mark",
136 1 : uncolored: "sidb_mark_nocolor",
137 1 : outlines: "sidb_mark_outlines",
138 1 : },
139 1 : features: {
140 1 : queryResultCaching: true,
141 1 : readOnly: false,
142 1 : },
143 1 : platforms: {
144 1 : browser: true,
145 1 : native: true,
146 1 : },
147 1 : },
148 1 : ];
149 :
150 1 : export function getConnectorInfoForParams(params: { hyper?: any; salesforce?: any; sidb?: any; trino?: any }): ConnectorInfo | null {
151 1 : if ("hyper" in params) return CONNECTOR_INFOS[ConnectorType.HYPER];
152 1 : if ("salesforce" in params) return CONNECTOR_INFOS[ConnectorType.SALESFORCE_DATA_CLOUD];
153 1 : if ("sidb" in params) return CONNECTOR_INFOS[ConnectorType.SIDB];
154 1 : if ("trino" in params) return CONNECTOR_INFOS[ConnectorType.TRINO];
155 1 : return null;
156 1 : }
157 :
158 1 : export function isConnectorAvailable(info: ConnectorInfo): boolean {
159 1 : return isDesktopHost() ? info.platforms.native : info.platforms.browser;
160 1 : }
161 :
162 1 : export function requiresSwitchingToNative(info: ConnectorInfo) {
163 1 : return !isConnectorAvailable(info);
164 1 : }
165 :
166 1 : export const useConnectorList = () => {
167 1 : const connectorTypes = [ConnectorType.HYPER, ConnectorType.SALESFORCE_DATA_CLOUD, ConnectorType.SIDB, ConnectorType.TRINO];
168 1 : return connectorTypes.map(type => CONNECTOR_INFOS[type]).filter(isConnectorAvailable);
169 1 : };
|