@vuu-ui/vuu-data-remote 0.0.26
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/LICENSE +201 -0
- package/README.md +19 -0
- package/cjs/authenticate.js +28 -0
- package/cjs/authenticate.js.map +1 -0
- package/cjs/connection-manager.js +228 -0
- package/cjs/connection-manager.js.map +1 -0
- package/cjs/constants.js +50 -0
- package/cjs/constants.js.map +1 -0
- package/cjs/data-source.js +58 -0
- package/cjs/data-source.js.map +1 -0
- package/cjs/index.js +32 -0
- package/cjs/index.js.map +1 -0
- package/cjs/inlined-worker.js +14 -0
- package/cjs/inlined-worker.js.map +1 -0
- package/cjs/message-utils.js +63 -0
- package/cjs/message-utils.js.map +1 -0
- package/cjs/server-proxy/messages.js +6 -0
- package/cjs/server-proxy/messages.js.map +1 -0
- package/cjs/vuu-data-source.js +574 -0
- package/cjs/vuu-data-source.js.map +1 -0
- package/esm/authenticate.js +26 -0
- package/esm/authenticate.js.map +1 -0
- package/esm/connection-manager.js +223 -0
- package/esm/connection-manager.js.map +1 -0
- package/esm/constants.js +47 -0
- package/esm/constants.js.map +1 -0
- package/esm/data-source.js +51 -0
- package/esm/data-source.js.map +1 -0
- package/esm/index.js +7 -0
- package/esm/index.js.map +1 -0
- package/esm/inlined-worker.js +12 -0
- package/esm/inlined-worker.js.map +1 -0
- package/esm/message-utils.js +56 -0
- package/esm/message-utils.js.map +1 -0
- package/esm/server-proxy/messages.js +4 -0
- package/esm/server-proxy/messages.js.map +1 -0
- package/esm/vuu-data-source.js +572 -0
- package/esm/vuu-data-source.js.map +1 -0
- package/package.json +33 -0
- package/types/authenticate.d.ts +1 -0
- package/types/connection-manager.d.ts +52 -0
- package/types/connectionTypes.d.ts +5 -0
- package/types/constants.d.ts +41 -0
- package/types/data-source.d.ts +8 -0
- package/types/index.d.ts +7 -0
- package/types/inlined-worker.d.ts +1 -0
- package/types/message-utils.d.ts +14 -0
- package/types/server-proxy/array-backed-moving-window.d.ts +28 -0
- package/types/server-proxy/messages.d.ts +38 -0
- package/types/server-proxy/rpc-services.d.ts +2 -0
- package/types/server-proxy/server-proxy.d.ts +62 -0
- package/types/server-proxy/viewport.d.ts +141 -0
- package/types/vuu-data-source.d.ts +63 -0
- package/types/websocket-connection.d.ts +24 -0
- package/types/worker.d.ts +1 -0
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vuuFilterParser = require('@vuu-ui/vuu-filter-parser');
|
|
4
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
5
|
+
var connectionManager = require('./connection-manager.js');
|
|
6
|
+
var dataSource = require('./data-source.js');
|
|
7
|
+
|
|
8
|
+
var __accessCheck = (obj, member, msg) => {
|
|
9
|
+
if (!member.has(obj))
|
|
10
|
+
throw TypeError("Cannot " + msg);
|
|
11
|
+
};
|
|
12
|
+
var __privateGet = (obj, member, getter) => {
|
|
13
|
+
__accessCheck(obj, member, "read from private field");
|
|
14
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
15
|
+
};
|
|
16
|
+
var __privateAdd = (obj, member, value) => {
|
|
17
|
+
if (member.has(obj))
|
|
18
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
19
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
20
|
+
};
|
|
21
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
22
|
+
__accessCheck(obj, member, "write to private field");
|
|
23
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
24
|
+
return value;
|
|
25
|
+
};
|
|
26
|
+
var _config, _groupBy, _links, _menu, _optimize, _range, _selectedRowsCount, _size, _status, _tableSchema, _title;
|
|
27
|
+
const { info } = vuuUtils.logger("VuuDataSource");
|
|
28
|
+
const { KEY } = vuuUtils.metadataKeys;
|
|
29
|
+
class VuuDataSource extends vuuUtils.EventEmitter {
|
|
30
|
+
constructor({
|
|
31
|
+
bufferSize = 100,
|
|
32
|
+
aggregations,
|
|
33
|
+
columns,
|
|
34
|
+
filter,
|
|
35
|
+
groupBy,
|
|
36
|
+
sort,
|
|
37
|
+
table,
|
|
38
|
+
title,
|
|
39
|
+
viewport,
|
|
40
|
+
visualLink
|
|
41
|
+
}) {
|
|
42
|
+
super();
|
|
43
|
+
this.server = null;
|
|
44
|
+
__privateAdd(this, _config, vuuUtils.vanillaConfig);
|
|
45
|
+
__privateAdd(this, _groupBy, []);
|
|
46
|
+
__privateAdd(this, _links, void 0);
|
|
47
|
+
__privateAdd(this, _menu, void 0);
|
|
48
|
+
__privateAdd(this, _optimize, "throttle");
|
|
49
|
+
__privateAdd(this, _range, { from: 0, to: 0 });
|
|
50
|
+
__privateAdd(this, _selectedRowsCount, 0);
|
|
51
|
+
__privateAdd(this, _size, 0);
|
|
52
|
+
__privateAdd(this, _status, "initialising");
|
|
53
|
+
__privateAdd(this, _tableSchema, void 0);
|
|
54
|
+
__privateAdd(this, _title, void 0);
|
|
55
|
+
this.handleMessageFromServer = (message) => {
|
|
56
|
+
if (message.type === "subscribed") {
|
|
57
|
+
__privateSet(this, _status, "subscribed");
|
|
58
|
+
this.tableSchema = message.tableSchema;
|
|
59
|
+
this.clientCallback?.(message);
|
|
60
|
+
} else if (message.type === "disabled") {
|
|
61
|
+
__privateSet(this, _status, "disabled");
|
|
62
|
+
} else if (message.type === "enabled") {
|
|
63
|
+
__privateSet(this, _status, "enabled");
|
|
64
|
+
} else if (dataSource.isDataSourceConfigMessage(message)) {
|
|
65
|
+
return;
|
|
66
|
+
} else if (message.type === "debounce-begin") {
|
|
67
|
+
this.optimize = "debounce";
|
|
68
|
+
} else {
|
|
69
|
+
if (message.type === "viewport-update" && message.size !== void 0 && message.size !== __privateGet(this, _size)) {
|
|
70
|
+
__privateSet(this, _size, message.size);
|
|
71
|
+
this.emit("resize", message.size);
|
|
72
|
+
}
|
|
73
|
+
if (this.configChangePending) {
|
|
74
|
+
this.setConfigPending();
|
|
75
|
+
}
|
|
76
|
+
if (vuuUtils.isViewportMenusAction(message)) {
|
|
77
|
+
__privateSet(this, _menu, message.menu);
|
|
78
|
+
} else if (vuuUtils.isVisualLinksAction(message)) {
|
|
79
|
+
__privateSet(this, _links, message.links);
|
|
80
|
+
} else {
|
|
81
|
+
this.clientCallback?.(message);
|
|
82
|
+
}
|
|
83
|
+
if (this.optimize === "debounce") {
|
|
84
|
+
this.revertDebounce();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
this.revertDebounce = vuuUtils.debounce(() => {
|
|
89
|
+
this.optimize = "throttle";
|
|
90
|
+
}, 100);
|
|
91
|
+
this.rawRangeRequest = (range) => {
|
|
92
|
+
if (this.viewport && this.server) {
|
|
93
|
+
this.server.send({
|
|
94
|
+
viewport: this.viewport,
|
|
95
|
+
type: "setViewRange",
|
|
96
|
+
range
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
this.debounceRangeRequest = vuuUtils.debounce((range) => {
|
|
101
|
+
if (this.viewport && this.server) {
|
|
102
|
+
this.server.send({
|
|
103
|
+
viewport: this.viewport,
|
|
104
|
+
type: "setViewRange",
|
|
105
|
+
range
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}, 50);
|
|
109
|
+
this.throttleRangeRequest = vuuUtils.throttle((range) => {
|
|
110
|
+
if (this.viewport && this.server) {
|
|
111
|
+
this.server.send({
|
|
112
|
+
viewport: this.viewport,
|
|
113
|
+
type: "setViewRange",
|
|
114
|
+
range
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}, 80);
|
|
118
|
+
if (!table)
|
|
119
|
+
throw Error("RemoteDataSource constructor called without table");
|
|
120
|
+
this.bufferSize = bufferSize;
|
|
121
|
+
this.table = table;
|
|
122
|
+
this.viewport = viewport;
|
|
123
|
+
__privateSet(this, _config, {
|
|
124
|
+
...__privateGet(this, _config),
|
|
125
|
+
aggregations: aggregations || __privateGet(this, _config).aggregations,
|
|
126
|
+
columns: columns || __privateGet(this, _config).columns,
|
|
127
|
+
filter: filter || __privateGet(this, _config).filter,
|
|
128
|
+
groupBy: groupBy || __privateGet(this, _config).groupBy,
|
|
129
|
+
sort: sort || __privateGet(this, _config).sort,
|
|
130
|
+
visualLink: visualLink || __privateGet(this, _config).visualLink
|
|
131
|
+
});
|
|
132
|
+
__privateSet(this, _title, title);
|
|
133
|
+
this.rangeRequest = this.throttleRangeRequest;
|
|
134
|
+
}
|
|
135
|
+
async subscribe({
|
|
136
|
+
viewport = this.viewport ?? (this.viewport = vuuUtils.uuid()),
|
|
137
|
+
columns,
|
|
138
|
+
aggregations,
|
|
139
|
+
range,
|
|
140
|
+
sort,
|
|
141
|
+
groupBy,
|
|
142
|
+
filter
|
|
143
|
+
}, callback) {
|
|
144
|
+
if (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling") {
|
|
145
|
+
this.enable(callback);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
this.clientCallback = callback;
|
|
149
|
+
if (aggregations || columns || filter || groupBy || sort) {
|
|
150
|
+
__privateSet(this, _config, {
|
|
151
|
+
...__privateGet(this, _config),
|
|
152
|
+
aggregations: aggregations || __privateGet(this, _config).aggregations,
|
|
153
|
+
columns: columns || __privateGet(this, _config).columns,
|
|
154
|
+
filter: filter || __privateGet(this, _config).filter,
|
|
155
|
+
groupBy: groupBy || __privateGet(this, _config).groupBy,
|
|
156
|
+
sort: sort || __privateGet(this, _config).sort
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
if (range) {
|
|
160
|
+
__privateSet(this, _range, range);
|
|
161
|
+
}
|
|
162
|
+
if (__privateGet(this, _status) !== "initialising" && __privateGet(this, _status) !== "unsubscribed") {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
__privateSet(this, _status, "subscribing");
|
|
166
|
+
this.viewport = viewport;
|
|
167
|
+
this.server = await connectionManager.getServerAPI();
|
|
168
|
+
const { bufferSize } = this;
|
|
169
|
+
this.server?.subscribe(
|
|
170
|
+
{
|
|
171
|
+
...__privateGet(this, _config),
|
|
172
|
+
bufferSize,
|
|
173
|
+
viewport,
|
|
174
|
+
table: this.table,
|
|
175
|
+
range: __privateGet(this, _range),
|
|
176
|
+
title: __privateGet(this, _title)
|
|
177
|
+
},
|
|
178
|
+
this.handleMessageFromServer
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
unsubscribe() {
|
|
182
|
+
console.log(`unsubscribe #${this.viewport}`);
|
|
183
|
+
info?.(`unsubscribe #${this.viewport}`);
|
|
184
|
+
if (this.viewport) {
|
|
185
|
+
this.server?.unsubscribe(this.viewport);
|
|
186
|
+
}
|
|
187
|
+
this.server?.destroy(this.viewport);
|
|
188
|
+
this.server = null;
|
|
189
|
+
this.removeAllListeners();
|
|
190
|
+
__privateSet(this, _status, "unsubscribed");
|
|
191
|
+
this.viewport = void 0;
|
|
192
|
+
this.range = { from: 0, to: 0 };
|
|
193
|
+
}
|
|
194
|
+
suspend() {
|
|
195
|
+
console.log(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
196
|
+
info?.(`suspend #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
197
|
+
if (this.viewport) {
|
|
198
|
+
__privateSet(this, _status, "suspended");
|
|
199
|
+
this.server?.send({
|
|
200
|
+
type: "suspend",
|
|
201
|
+
viewport: this.viewport
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
resume() {
|
|
207
|
+
console.log(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
208
|
+
const isDisabled = __privateGet(this, _status).startsWith("disabl");
|
|
209
|
+
const isSuspended = __privateGet(this, _status) === "suspended";
|
|
210
|
+
info?.(`resume #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
211
|
+
if (this.viewport) {
|
|
212
|
+
if (isDisabled) {
|
|
213
|
+
this.enable();
|
|
214
|
+
} else if (isSuspended) {
|
|
215
|
+
this.server?.send({
|
|
216
|
+
type: "resume",
|
|
217
|
+
viewport: this.viewport
|
|
218
|
+
});
|
|
219
|
+
__privateSet(this, _status, "subscribed");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
disable() {
|
|
225
|
+
info?.(`disable #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
226
|
+
if (this.viewport) {
|
|
227
|
+
__privateSet(this, _status, "disabling");
|
|
228
|
+
this.server?.send({
|
|
229
|
+
viewport: this.viewport,
|
|
230
|
+
type: "disable"
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return this;
|
|
234
|
+
}
|
|
235
|
+
enable(callback) {
|
|
236
|
+
info?.(`enable #${this.viewport}, current status ${__privateGet(this, _status)}`);
|
|
237
|
+
if (this.viewport && (__privateGet(this, _status) === "disabled" || __privateGet(this, _status) === "disabling")) {
|
|
238
|
+
__privateSet(this, _status, "enabling");
|
|
239
|
+
if (callback) {
|
|
240
|
+
this.clientCallback = callback;
|
|
241
|
+
}
|
|
242
|
+
this.server?.send({
|
|
243
|
+
viewport: this.viewport,
|
|
244
|
+
type: "enable"
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return this;
|
|
248
|
+
}
|
|
249
|
+
select(selected) {
|
|
250
|
+
__privateSet(this, _selectedRowsCount, selected.length);
|
|
251
|
+
if (this.viewport) {
|
|
252
|
+
this.server?.send({
|
|
253
|
+
viewport: this.viewport,
|
|
254
|
+
type: "select",
|
|
255
|
+
selected
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
openTreeNode(key) {
|
|
260
|
+
if (this.viewport) {
|
|
261
|
+
this.server?.send({
|
|
262
|
+
viewport: this.viewport,
|
|
263
|
+
type: "openTreeNode",
|
|
264
|
+
key
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
closeTreeNode(key) {
|
|
269
|
+
if (this.viewport) {
|
|
270
|
+
this.server?.send({
|
|
271
|
+
viewport: this.viewport,
|
|
272
|
+
type: "closeTreeNode",
|
|
273
|
+
key
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
get tableSchema() {
|
|
278
|
+
return __privateGet(this, _tableSchema);
|
|
279
|
+
}
|
|
280
|
+
set tableSchema(tableSchema) {
|
|
281
|
+
__privateSet(this, _tableSchema, tableSchema);
|
|
282
|
+
}
|
|
283
|
+
get links() {
|
|
284
|
+
return __privateGet(this, _links);
|
|
285
|
+
}
|
|
286
|
+
get menu() {
|
|
287
|
+
return __privateGet(this, _menu);
|
|
288
|
+
}
|
|
289
|
+
get status() {
|
|
290
|
+
return __privateGet(this, _status);
|
|
291
|
+
}
|
|
292
|
+
get optimize() {
|
|
293
|
+
return __privateGet(this, _optimize);
|
|
294
|
+
}
|
|
295
|
+
set optimize(optimize) {
|
|
296
|
+
if (optimize !== __privateGet(this, _optimize)) {
|
|
297
|
+
__privateSet(this, _optimize, optimize);
|
|
298
|
+
switch (optimize) {
|
|
299
|
+
case "none":
|
|
300
|
+
this.rangeRequest = this.rawRangeRequest;
|
|
301
|
+
break;
|
|
302
|
+
case "debounce":
|
|
303
|
+
this.rangeRequest = this.debounceRangeRequest;
|
|
304
|
+
break;
|
|
305
|
+
case "throttle":
|
|
306
|
+
this.rangeRequest = this.throttleRangeRequest;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
this.emit("optimize", optimize);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
get selectedRowsCount() {
|
|
313
|
+
return __privateGet(this, _selectedRowsCount);
|
|
314
|
+
}
|
|
315
|
+
get size() {
|
|
316
|
+
return __privateGet(this, _size);
|
|
317
|
+
}
|
|
318
|
+
get range() {
|
|
319
|
+
return __privateGet(this, _range);
|
|
320
|
+
}
|
|
321
|
+
set range(range) {
|
|
322
|
+
if (range.from !== __privateGet(this, _range).from || range.to !== __privateGet(this, _range).to) {
|
|
323
|
+
__privateSet(this, _range, range);
|
|
324
|
+
this.rangeRequest(range);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
get config() {
|
|
328
|
+
return __privateGet(this, _config);
|
|
329
|
+
}
|
|
330
|
+
set config(config) {
|
|
331
|
+
const configChanges = this.applyConfig(config);
|
|
332
|
+
if (configChanges) {
|
|
333
|
+
if (__privateGet(this, _config) && this.viewport) {
|
|
334
|
+
if (config) {
|
|
335
|
+
this.server?.send({
|
|
336
|
+
viewport: this.viewport,
|
|
337
|
+
type: "config",
|
|
338
|
+
config: __privateGet(this, _config)
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
this.emit("config", __privateGet(this, _config), void 0, configChanges);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
applyConfig(config) {
|
|
346
|
+
const { noChanges, ...otherChanges } = vuuUtils.isConfigChanged(
|
|
347
|
+
__privateGet(this, _config),
|
|
348
|
+
config
|
|
349
|
+
);
|
|
350
|
+
if (noChanges !== true) {
|
|
351
|
+
if (config) {
|
|
352
|
+
const newConfig = config?.filter?.filter && config?.filter.filterStruct === void 0 ? {
|
|
353
|
+
...config,
|
|
354
|
+
filter: {
|
|
355
|
+
filter: config.filter.filter,
|
|
356
|
+
filterStruct: vuuFilterParser.parseFilter(config.filter.filter)
|
|
357
|
+
}
|
|
358
|
+
} : config;
|
|
359
|
+
__privateSet(this, _config, vuuUtils.withConfigDefaults(newConfig));
|
|
360
|
+
return otherChanges;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
//TODO replace all these individual server calls with calls to setConfig
|
|
365
|
+
get columns() {
|
|
366
|
+
return __privateGet(this, _config).columns;
|
|
367
|
+
}
|
|
368
|
+
set columns(columns) {
|
|
369
|
+
__privateSet(this, _config, {
|
|
370
|
+
...__privateGet(this, _config),
|
|
371
|
+
columns
|
|
372
|
+
});
|
|
373
|
+
if (this.viewport) {
|
|
374
|
+
const message = {
|
|
375
|
+
viewport: this.viewport,
|
|
376
|
+
type: "setColumns",
|
|
377
|
+
columns
|
|
378
|
+
};
|
|
379
|
+
if (this.server) {
|
|
380
|
+
this.server.send(message);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
this.emit("config", __privateGet(this, _config));
|
|
384
|
+
}
|
|
385
|
+
get aggregations() {
|
|
386
|
+
return __privateGet(this, _config).aggregations;
|
|
387
|
+
}
|
|
388
|
+
set aggregations(aggregations) {
|
|
389
|
+
__privateSet(this, _config, {
|
|
390
|
+
...__privateGet(this, _config),
|
|
391
|
+
aggregations
|
|
392
|
+
});
|
|
393
|
+
if (this.viewport) {
|
|
394
|
+
this.server?.send({
|
|
395
|
+
viewport: this.viewport,
|
|
396
|
+
type: "aggregate",
|
|
397
|
+
aggregations
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
this.emit("config", __privateGet(this, _config));
|
|
401
|
+
}
|
|
402
|
+
get sort() {
|
|
403
|
+
return __privateGet(this, _config).sort;
|
|
404
|
+
}
|
|
405
|
+
set sort(sort) {
|
|
406
|
+
__privateSet(this, _config, {
|
|
407
|
+
...__privateGet(this, _config),
|
|
408
|
+
sort
|
|
409
|
+
});
|
|
410
|
+
if (this.viewport) {
|
|
411
|
+
const message = {
|
|
412
|
+
viewport: this.viewport,
|
|
413
|
+
type: "sort",
|
|
414
|
+
sort
|
|
415
|
+
};
|
|
416
|
+
this.server?.send(message);
|
|
417
|
+
}
|
|
418
|
+
this.emit("config", __privateGet(this, _config));
|
|
419
|
+
}
|
|
420
|
+
get filter() {
|
|
421
|
+
return __privateGet(this, _config).filter;
|
|
422
|
+
}
|
|
423
|
+
set filter(filter) {
|
|
424
|
+
this.config = {
|
|
425
|
+
...__privateGet(this, _config),
|
|
426
|
+
filter
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
get groupBy() {
|
|
430
|
+
return __privateGet(this, _config).groupBy;
|
|
431
|
+
}
|
|
432
|
+
set groupBy(groupBy) {
|
|
433
|
+
if (vuuUtils.itemsOrOrderChanged(this.groupBy, groupBy)) {
|
|
434
|
+
const wasGrouped = __privateGet(this, _groupBy).length > 0;
|
|
435
|
+
this.config = {
|
|
436
|
+
...__privateGet(this, _config),
|
|
437
|
+
groupBy
|
|
438
|
+
};
|
|
439
|
+
if (!wasGrouped && groupBy.length > 0 && this.viewport) {
|
|
440
|
+
this.clientCallback?.({
|
|
441
|
+
clientViewportId: this.viewport,
|
|
442
|
+
mode: "batch",
|
|
443
|
+
type: "viewport-update",
|
|
444
|
+
size: 0,
|
|
445
|
+
rows: []
|
|
446
|
+
});
|
|
447
|
+
}
|
|
448
|
+
this.setConfigPending({ groupBy });
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
get title() {
|
|
452
|
+
return __privateGet(this, _title);
|
|
453
|
+
}
|
|
454
|
+
set title(title) {
|
|
455
|
+
__privateSet(this, _title, title);
|
|
456
|
+
if (this.viewport && title) {
|
|
457
|
+
this.server?.send({
|
|
458
|
+
type: "setTitle",
|
|
459
|
+
title,
|
|
460
|
+
viewport: this.viewport
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
get visualLink() {
|
|
465
|
+
return __privateGet(this, _config).visualLink;
|
|
466
|
+
}
|
|
467
|
+
set visualLink(visualLink) {
|
|
468
|
+
__privateSet(this, _config, {
|
|
469
|
+
...__privateGet(this, _config),
|
|
470
|
+
visualLink
|
|
471
|
+
});
|
|
472
|
+
if (visualLink) {
|
|
473
|
+
const {
|
|
474
|
+
parentClientVpId,
|
|
475
|
+
link: { fromColumn, toColumn }
|
|
476
|
+
} = visualLink;
|
|
477
|
+
if (this.viewport) {
|
|
478
|
+
this.server?.send({
|
|
479
|
+
viewport: this.viewport,
|
|
480
|
+
type: "createLink",
|
|
481
|
+
parentClientVpId,
|
|
482
|
+
parentColumnName: toColumn,
|
|
483
|
+
childColumnName: fromColumn
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
} else {
|
|
487
|
+
if (this.viewport) {
|
|
488
|
+
this.server?.send({
|
|
489
|
+
type: "removeLink",
|
|
490
|
+
viewport: this.viewport
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
this.emit("config", __privateGet(this, _config));
|
|
495
|
+
}
|
|
496
|
+
setConfigPending(config) {
|
|
497
|
+
const pendingConfig = this.configChangePending;
|
|
498
|
+
this.configChangePending = config;
|
|
499
|
+
if (config !== void 0) {
|
|
500
|
+
this.emit("config", config, false);
|
|
501
|
+
} else {
|
|
502
|
+
this.emit("config", pendingConfig, true);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
async rpcCall(rpcRequest) {
|
|
506
|
+
if (this.viewport) {
|
|
507
|
+
return this.server?.rpcCall({
|
|
508
|
+
vpId: this.viewport,
|
|
509
|
+
...rpcRequest
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
async menuRpcCall(rpcRequest) {
|
|
514
|
+
if (this.viewport) {
|
|
515
|
+
return this.server?.rpcCall({
|
|
516
|
+
vpId: this.viewport,
|
|
517
|
+
...rpcRequest
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
applyEdit(row, columnName, value) {
|
|
522
|
+
return this.menuRpcCall({
|
|
523
|
+
rowKey: row[KEY],
|
|
524
|
+
field: columnName,
|
|
525
|
+
value,
|
|
526
|
+
type: "VP_EDIT_CELL_RPC"
|
|
527
|
+
}).then((response) => {
|
|
528
|
+
if (response?.error) {
|
|
529
|
+
return response.error;
|
|
530
|
+
} else {
|
|
531
|
+
return true;
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
insertRow(key, data) {
|
|
536
|
+
return this.menuRpcCall({
|
|
537
|
+
rowKey: key,
|
|
538
|
+
data,
|
|
539
|
+
type: "VP_EDIT_ADD_ROW_RPC"
|
|
540
|
+
}).then((response) => {
|
|
541
|
+
if (response?.error) {
|
|
542
|
+
return response.error;
|
|
543
|
+
} else {
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
deleteRow(rowKey) {
|
|
549
|
+
return this.menuRpcCall({
|
|
550
|
+
rowKey,
|
|
551
|
+
type: "VP_EDIT_DELETE_ROW_RPC"
|
|
552
|
+
}).then((response) => {
|
|
553
|
+
if (response?.error) {
|
|
554
|
+
return response.error;
|
|
555
|
+
} else {
|
|
556
|
+
return true;
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
_config = new WeakMap();
|
|
562
|
+
_groupBy = new WeakMap();
|
|
563
|
+
_links = new WeakMap();
|
|
564
|
+
_menu = new WeakMap();
|
|
565
|
+
_optimize = new WeakMap();
|
|
566
|
+
_range = new WeakMap();
|
|
567
|
+
_selectedRowsCount = new WeakMap();
|
|
568
|
+
_size = new WeakMap();
|
|
569
|
+
_status = new WeakMap();
|
|
570
|
+
_tableSchema = new WeakMap();
|
|
571
|
+
_title = new WeakMap();
|
|
572
|
+
|
|
573
|
+
exports.VuuDataSource = VuuDataSource;
|
|
574
|
+
//# sourceMappingURL=vuu-data-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vuu-data-source.js","sources":["../src/vuu-data-source.ts"],"sourcesContent":["import {\n DataSource,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceConstructorProps,\n DataSourceEvents,\n DataSourceFilter,\n DataSourceRow,\n DataSourceStatus,\n OptimizeStrategy,\n RpcResponse,\n Selection,\n SubscribeCallback,\n SubscribeProps,\n TableSchema,\n WithFullConfig,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n ClientToServerEditRpc,\n ClientToServerMenuRPC,\n ClientToServerViewportRpcCall,\n LinkDescriptorWithLabel,\n VuuAggregation,\n VuuDataRowDto,\n VuuGroupBy,\n VuuMenu,\n VuuRange,\n VuuRowDataItemType,\n VuuSort,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\n\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n isConfigChanged,\n debounce,\n EventEmitter,\n isViewportMenusAction,\n isVisualLinksAction,\n itemsOrOrderChanged,\n logger,\n metadataKeys,\n throttle,\n uuid,\n vanillaConfig,\n withConfigDefaults,\n DataSourceConfigChanges,\n} from \"@vuu-ui/vuu-utils\";\nimport { getServerAPI, ServerAPI } from \"./connection-manager\";\nimport { isDataSourceConfigMessage } from \"./data-source\";\n\nimport { MenuRpcResponse } from \"@vuu-ui/vuu-data-types\";\n\ntype RangeRequest = (range: VuuRange) => void;\n\nconst { info } = logger(\"VuuDataSource\");\n\nconst { KEY } = metadataKeys;\n\n/*-----------------------------------------------------------------\n A RemoteDataSource manages a single subscription via the ServerProxy\n ----------------------------------------------------------------*/\nexport class VuuDataSource\n extends EventEmitter<DataSourceEvents>\n implements DataSource\n{\n private bufferSize: number;\n private server: ServerAPI | null = null;\n private clientCallback: SubscribeCallback | undefined;\n private configChangePending: DataSourceConfig | undefined;\n private rangeRequest: RangeRequest;\n\n #config: WithFullConfig = vanillaConfig;\n #groupBy: VuuGroupBy = [];\n #links: LinkDescriptorWithLabel[] | undefined;\n #menu: VuuMenu | undefined;\n #optimize: OptimizeStrategy = \"throttle\";\n #range: VuuRange = { from: 0, to: 0 };\n #selectedRowsCount = 0;\n #size = 0;\n #status: DataSourceStatus = \"initialising\";\n #tableSchema: TableSchema | undefined;\n\n #title: string | undefined;\n\n public table: VuuTable;\n public viewport: string | undefined;\n\n constructor({\n bufferSize = 100,\n aggregations,\n columns,\n filter,\n groupBy,\n sort,\n table,\n title,\n viewport,\n visualLink,\n }: DataSourceConstructorProps) {\n super();\n\n if (!table)\n throw Error(\"RemoteDataSource constructor called without table\");\n\n this.bufferSize = bufferSize;\n this.table = table;\n this.viewport = viewport;\n\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filter: filter || this.#config.filter,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n visualLink: visualLink || this.#config.visualLink,\n };\n\n this.#title = title;\n this.rangeRequest = this.throttleRangeRequest;\n }\n\n async subscribe(\n {\n viewport = this.viewport ?? (this.viewport = uuid()),\n columns,\n aggregations,\n range,\n sort,\n groupBy,\n filter,\n }: SubscribeProps,\n callback: SubscribeCallback\n ) {\n if (this.#status === \"disabled\" || this.#status === \"disabling\") {\n this.enable(callback);\n return;\n }\n this.clientCallback = callback;\n if (aggregations || columns || filter || groupBy || sort) {\n this.#config = {\n ...this.#config,\n aggregations: aggregations || this.#config.aggregations,\n columns: columns || this.#config.columns,\n filter: filter || this.#config.filter,\n groupBy: groupBy || this.#config.groupBy,\n sort: sort || this.#config.sort,\n };\n }\n\n // store the range before we await the server. It's is possible the\n // range will be updated from the client before we have been able to\n // subscribe. This ensures we will subscribe with latest value.\n if (range) {\n this.#range = range;\n }\n\n if (\n this.#status !== \"initialising\" &&\n this.#status !== \"unsubscribed\"\n // We can subscribe to a disabled dataSource. No request will be\n // sent to server to create a new VP, just to enable the existing one.\n // The current subscribing client becomes the subscription owner\n ) {\n return;\n }\n\n this.#status = \"subscribing\";\n this.viewport = viewport;\n\n this.server = await getServerAPI();\n\n const { bufferSize } = this;\n\n this.server?.subscribe(\n {\n ...this.#config,\n bufferSize,\n viewport,\n table: this.table,\n range: this.#range,\n title: this.#title,\n },\n this.handleMessageFromServer\n );\n }\n\n handleMessageFromServer = (message: DataSourceCallbackMessage) => {\n if (message.type === \"subscribed\") {\n this.#status = \"subscribed\";\n this.tableSchema = message.tableSchema;\n this.clientCallback?.(message);\n } else if (message.type === \"disabled\") {\n this.#status = \"disabled\";\n } else if (message.type === \"enabled\") {\n this.#status = \"enabled\";\n } else if (isDataSourceConfigMessage(message)) {\n // This is an ACK for a CHANGE_VP message. Nothing to do here. We need\n // to wait for data to be returned before we can consider the change\n // to be in effect.\n return;\n } else if (message.type === \"debounce-begin\") {\n this.optimize = \"debounce\";\n } else {\n if (\n message.type === \"viewport-update\" &&\n message.size !== undefined &&\n message.size !== this.#size\n ) {\n this.#size = message.size;\n this.emit(\"resize\", message.size);\n }\n // This is used to remove any progress indication from the UI. We wait for actual data rather than\n // just the CHANGE_VP_SUCCESS ack as there is often a delay between receiving the ack and the data.\n // It may be a SIZE only message, eg in the case of removing a groupBy column from a multi-column\n // groupby, where no tree nodes are expanded.\n if (this.configChangePending) {\n this.setConfigPending();\n }\n\n if (isViewportMenusAction(message)) {\n this.#menu = message.menu;\n } else if (isVisualLinksAction(message)) {\n this.#links = message.links as LinkDescriptorWithLabel[];\n } else {\n this.clientCallback?.(message);\n }\n\n if (this.optimize === \"debounce\") {\n this.revertDebounce();\n }\n }\n };\n\n unsubscribe() {\n console.log(`unsubscribe #${this.viewport}`);\n info?.(`unsubscribe #${this.viewport}`);\n if (this.viewport) {\n this.server?.unsubscribe(this.viewport);\n }\n this.server?.destroy(this.viewport);\n this.server = null;\n this.removeAllListeners();\n this.#status = \"unsubscribed\";\n this.viewport = undefined;\n this.range = { from: 0, to: 0 };\n }\n\n suspend() {\n console.log(`suspend #${this.viewport}, current status ${this.#status}`);\n info?.(`suspend #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"suspended\";\n this.server?.send({\n type: \"suspend\",\n viewport: this.viewport,\n });\n }\n return this;\n }\n\n resume() {\n console.log(`resume #${this.viewport}, current status ${this.#status}`);\n const isDisabled = this.#status.startsWith(\"disabl\");\n const isSuspended = this.#status === \"suspended\";\n info?.(`resume #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n if (isDisabled) {\n this.enable();\n } else if (isSuspended) {\n this.server?.send({\n type: \"resume\",\n viewport: this.viewport,\n });\n this.#status = \"subscribed\";\n }\n }\n return this;\n }\n\n disable() {\n info?.(`disable #${this.viewport}, current status ${this.#status}`);\n if (this.viewport) {\n this.#status = \"disabling\";\n this.server?.send({\n viewport: this.viewport,\n type: \"disable\",\n });\n }\n return this;\n }\n\n enable(callback?: SubscribeCallback) {\n info?.(`enable #${this.viewport}, current status ${this.#status}`);\n if (\n this.viewport &&\n (this.#status === \"disabled\" || this.#status === \"disabling\")\n ) {\n this.#status = \"enabling\";\n if (callback) {\n this.clientCallback = callback;\n }\n this.server?.send({\n viewport: this.viewport,\n type: \"enable\",\n });\n }\n return this;\n }\n\n select(selected: Selection) {\n //TODO this isn't always going to be correct - need to count\n // selection block items\n this.#selectedRowsCount = selected.length;\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"select\",\n selected,\n });\n }\n }\n\n openTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"openTreeNode\",\n key,\n });\n }\n }\n\n closeTreeNode(key: string) {\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"closeTreeNode\",\n key,\n });\n }\n }\n\n get tableSchema() {\n return this.#tableSchema;\n }\n\n set tableSchema(tableSchema: TableSchema | undefined) {\n this.#tableSchema = tableSchema;\n // TOSO emit an event\n }\n\n get links() {\n return this.#links;\n }\n\n get menu() {\n return this.#menu;\n }\n\n get status() {\n return this.#status;\n }\n\n get optimize() {\n return this.#optimize;\n }\n\n set optimize(optimize: OptimizeStrategy) {\n if (optimize !== this.#optimize) {\n this.#optimize = optimize;\n switch (optimize) {\n case \"none\":\n this.rangeRequest = this.rawRangeRequest;\n break;\n case \"debounce\":\n this.rangeRequest = this.debounceRangeRequest;\n break;\n case \"throttle\":\n this.rangeRequest = this.throttleRangeRequest;\n break;\n }\n this.emit(\"optimize\", optimize);\n }\n }\n\n private revertDebounce = debounce(() => {\n this.optimize = \"throttle\";\n }, 100);\n\n get selectedRowsCount() {\n return this.#selectedRowsCount;\n }\n\n get size() {\n return this.#size;\n }\n\n get range() {\n return this.#range;\n }\n\n set range(range: VuuRange) {\n if (range.from !== this.#range.from || range.to !== this.#range.to) {\n this.#range = range;\n this.rangeRequest(range);\n }\n }\n\n private rawRangeRequest: RangeRequest = (range) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n };\n\n private debounceRangeRequest: RangeRequest = debounce((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 50);\n\n private throttleRangeRequest: RangeRequest = throttle((range: VuuRange) => {\n if (this.viewport && this.server) {\n this.server.send({\n viewport: this.viewport,\n type: \"setViewRange\",\n range,\n });\n }\n }, 80);\n\n get config() {\n return this.#config;\n }\n\n set config(config: DataSourceConfig) {\n const configChanges = this.applyConfig(config);\n if (configChanges) {\n if (this.#config && this.viewport) {\n if (config) {\n this.server?.send({\n viewport: this.viewport,\n type: \"config\",\n config: this.#config,\n });\n }\n }\n this.emit(\"config\", this.#config, undefined, configChanges);\n }\n }\n\n applyConfig(config: DataSourceConfig): DataSourceConfigChanges | undefined {\n const { noChanges, ...otherChanges } = isConfigChanged(\n this.#config,\n config\n );\n if (noChanges !== true) {\n if (config) {\n const newConfig: DataSourceConfig =\n config?.filter?.filter && config?.filter.filterStruct === undefined\n ? {\n ...config,\n filter: {\n filter: config.filter.filter,\n filterStruct: parseFilter(config.filter.filter),\n },\n }\n : config;\n this.#config = withConfigDefaults(newConfig);\n return otherChanges;\n }\n }\n }\n\n //TODO replace all these individual server calls with calls to setConfig\n get columns() {\n return this.#config.columns;\n }\n\n set columns(columns: string[]) {\n this.#config = {\n ...this.#config,\n columns,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"setColumns\",\n columns,\n } as const;\n if (this.server) {\n this.server.send(message);\n }\n }\n this.emit(\"config\", this.#config);\n }\n\n get aggregations() {\n return this.#config.aggregations;\n }\n\n set aggregations(aggregations: VuuAggregation[]) {\n this.#config = {\n ...this.#config,\n aggregations,\n };\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"aggregate\",\n aggregations,\n });\n }\n this.emit(\"config\", this.#config);\n }\n\n get sort() {\n return this.#config.sort;\n }\n\n set sort(sort: VuuSort) {\n // TODO should we wait until server ACK before we assign #sort ?\n this.#config = {\n ...this.#config,\n sort,\n };\n if (this.viewport) {\n const message = {\n viewport: this.viewport,\n type: \"sort\",\n sort,\n } as const;\n this.server?.send(message);\n }\n this.emit(\"config\", this.#config);\n }\n\n get filter() {\n return this.#config.filter;\n }\n\n set filter(filter: DataSourceFilter) {\n this.config = {\n ...this.#config,\n filter,\n };\n }\n\n get groupBy() {\n return this.#config.groupBy;\n }\n\n set groupBy(groupBy: VuuGroupBy) {\n if (itemsOrOrderChanged(this.groupBy, groupBy)) {\n const wasGrouped = this.#groupBy.length > 0;\n\n this.config = {\n ...this.#config,\n groupBy,\n };\n // if (this.viewport) {\n // const message = {\n // viewport: this.viewport,\n // type: \"groupBy\",\n // groupBy: this.#config.groupBy,\n // } as const;\n\n // if (this.server) {\n // this.server.send(message);\n // }\n // }\n if (!wasGrouped && groupBy.length > 0 && this.viewport) {\n this.clientCallback?.({\n clientViewportId: this.viewport,\n mode: \"batch\",\n type: \"viewport-update\",\n size: 0,\n rows: [],\n });\n }\n // this.emit(\"config\", this.#config, undefined, {\n // ...NO_CONFIG_CHANGES,\n // groupByChanged: true,\n // });\n this.setConfigPending({ groupBy });\n }\n }\n\n get title() {\n return this.#title;\n }\n\n set title(title: string | undefined) {\n this.#title = title;\n if (this.viewport && title) {\n this.server?.send({\n type: \"setTitle\",\n title,\n viewport: this.viewport,\n });\n }\n }\n\n get visualLink() {\n return this.#config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this.#config = {\n ...this.#config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.server?.send({\n viewport: this.viewport,\n type: \"createLink\",\n parentClientVpId,\n parentColumnName: toColumn,\n childColumnName: fromColumn,\n });\n }\n } else {\n if (this.viewport) {\n this.server?.send({\n type: \"removeLink\",\n viewport: this.viewport,\n });\n }\n }\n this.emit(\"config\", this.#config);\n }\n\n private setConfigPending(config?: DataSourceConfig) {\n const pendingConfig = this.configChangePending;\n this.configChangePending = config;\n\n if (config !== undefined) {\n this.emit(\"config\", config, false);\n } else {\n this.emit(\"config\", pendingConfig, true);\n }\n }\n\n async rpcCall<T extends RpcResponse = RpcResponse>(\n rpcRequest: Omit<ClientToServerViewportRpcCall, \"vpId\">\n ) {\n if (this.viewport) {\n return this.server?.rpcCall<T>({\n vpId: this.viewport,\n ...rpcRequest,\n } as ClientToServerViewportRpcCall);\n }\n }\n\n async menuRpcCall(\n rpcRequest: Omit<ClientToServerMenuRPC, \"vpId\"> | ClientToServerEditRpc\n ) {\n if (this.viewport) {\n return this.server?.rpcCall<MenuRpcResponse>({\n vpId: this.viewport,\n ...rpcRequest,\n } as ClientToServerMenuRPC);\n }\n }\n\n applyEdit(row: DataSourceRow, columnName: string, value: VuuRowDataItemType) {\n return this.menuRpcCall({\n rowKey: row[KEY],\n field: columnName,\n value: value,\n type: \"VP_EDIT_CELL_RPC\",\n }).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n\n insertRow(key: string, data: VuuDataRowDto) {\n return this.menuRpcCall({\n rowKey: key,\n data,\n type: \"VP_EDIT_ADD_ROW_RPC\",\n }).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n deleteRow(rowKey: string) {\n return this.menuRpcCall({\n rowKey,\n type: \"VP_EDIT_DELETE_ROW_RPC\",\n }).then((response) => {\n if (response?.error) {\n return response.error;\n } else {\n return true;\n }\n });\n }\n}\n"],"names":["logger","metadataKeys","EventEmitter","vanillaConfig","isDataSourceConfigMessage","isViewportMenusAction","isVisualLinksAction","debounce","throttle","uuid","getServerAPI","isConfigChanged","parseFilter","withConfigDefaults","itemsOrOrderChanged"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const defaultAuthUrl = "api/authn";
|
|
2
|
+
const authenticate = async (username, password, authUrl = defaultAuthUrl) => fetch(authUrl, {
|
|
3
|
+
method: "POST",
|
|
4
|
+
credentials: "include",
|
|
5
|
+
headers: {
|
|
6
|
+
"Content-Type": "application/json",
|
|
7
|
+
"access-control-allow-origin": location.host
|
|
8
|
+
},
|
|
9
|
+
body: JSON.stringify({ username, password })
|
|
10
|
+
}).then((response) => {
|
|
11
|
+
if (response.ok) {
|
|
12
|
+
const authToken = response.headers.get("vuu-auth-token");
|
|
13
|
+
if (typeof authToken === "string" && authToken.length > 0) {
|
|
14
|
+
return authToken;
|
|
15
|
+
} else {
|
|
16
|
+
throw Error(`Authentication failed auth token not returned by server`);
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
throw Error(
|
|
20
|
+
`Authentication failed ${response.status} ${response.statusText}`
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export { authenticate };
|
|
26
|
+
//# sourceMappingURL=authenticate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticate.js","sources":["../src/authenticate.ts"],"sourcesContent":["const defaultAuthUrl = \"api/authn\";\n\nexport const authenticate = async (\n username: string,\n password: string,\n authUrl = defaultAuthUrl\n): Promise<string | void> =>\n fetch(authUrl, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"access-control-allow-origin\": location.host,\n },\n body: JSON.stringify({ username, password }),\n }).then((response) => {\n if (response.ok) {\n const authToken = response.headers.get(\"vuu-auth-token\");\n if (typeof authToken === \"string\" && authToken.length > 0) {\n return authToken;\n } else {\n throw Error(`Authentication failed auth token not returned by server`);\n }\n } else {\n throw Error(\n `Authentication failed ${response.status} ${response.statusText}`\n );\n }\n });\n"],"names":[],"mappings":"AAAA,MAAM,cAAiB,GAAA,WAAA,CAAA;AAEhB,MAAM,eAAe,OAC1B,QAAA,EACA,UACA,OAAU,GAAA,cAAA,KAEV,MAAM,OAAS,EAAA;AAAA,EACb,MAAQ,EAAA,MAAA;AAAA,EACR,WAAa,EAAA,SAAA;AAAA,EACb,OAAS,EAAA;AAAA,IACP,cAAgB,EAAA,kBAAA;AAAA,IAChB,+BAA+B,QAAS,CAAA,IAAA;AAAA,GAC1C;AAAA,EACA,MAAM,IAAK,CAAA,SAAA,CAAU,EAAE,QAAA,EAAU,UAAU,CAAA;AAC7C,CAAC,CAAA,CAAE,IAAK,CAAA,CAAC,QAAa,KAAA;AACpB,EAAA,IAAI,SAAS,EAAI,EAAA;AACf,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,OAAQ,CAAA,GAAA,CAAI,gBAAgB,CAAA,CAAA;AACvD,IAAA,IAAI,OAAO,SAAA,KAAc,QAAY,IAAA,SAAA,CAAU,SAAS,CAAG,EAAA;AACzD,MAAO,OAAA,SAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,MAAM,MAAM,CAAyD,uDAAA,CAAA,CAAA,CAAA;AAAA,KACvE;AAAA,GACK,MAAA;AACL,IAAM,MAAA,KAAA;AAAA,MACJ,CAAyB,sBAAA,EAAA,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,SAAS,UAAU,CAAA,CAAA;AAAA,KACjE,CAAA;AAAA,GACF;AACF,CAAC;;;;"}
|