@isoftdata/utility-dashboard-backend 3.4.0 → 4.0.0-beta.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.
@@ -2,7 +2,6 @@ import formattingTemplates from './formatting-templates.js';
2
2
  import toSnakeCase from 'to-snake-case';
3
3
  import mysqlDataTypes from 'mysql/lib/protocol/constants/types.js';
4
4
  import styleTableRow from './style-templates.js';
5
- import { klona } from 'klona';
6
5
  function mysqlToGoogleChartsDataTypeMap(mysqlDataType) {
7
6
  switch (mysqlDataType) {
8
7
  case 'VAR_STRING':
@@ -37,29 +36,6 @@ function mysqlToGoogleChartsDataTypeMap(mysqlDataType) {
37
36
  return 'string';
38
37
  }
39
38
  }
40
- const roleRegex = /^role:(\w+)([ \-_]\w+)?/;
41
- function getRoleFromColumnName(name) {
42
- const match = name.match(roleRegex);
43
- return match?.[1] ?? null;
44
- }
45
- function getColumnRoleType(role, dataType) {
46
- if (role?.startsWith('role:')) {
47
- role = role.replace('role:', '');
48
- }
49
- switch (role) {
50
- case 'certainty':
51
- case 'emphasis':
52
- case 'scope':
53
- return 'boolean';
54
- case 'interval':
55
- return 'number';
56
- case 'domain':
57
- case 'data':
58
- return dataType;
59
- default:
60
- return 'string';
61
- }
62
- }
63
39
  function makeDataTableCol(key, fields, role = null) {
64
40
  return {
65
41
  id: toSnakeCase(key).toLowerCase(),
@@ -68,92 +44,65 @@ function makeDataTableCol(key, fields, role = null) {
68
44
  role,
69
45
  };
70
46
  }
71
- function resultsIsRowDataPacketArray(results) {
72
- return (Array.isArray(results) && results.length === 0) || (Array.isArray(results) && results.length > 0 && results[0].constructor.name === 'RowDataPacket');
47
+ function resultsIsObjectArray(results) {
48
+ return (Array.isArray(results) && results.length === 0)
49
+ || (Array.isArray(results) && results.length > 0 && typeof results[0] === 'object' && results[0] !== null && !Array.isArray(results[0]));
73
50
  }
74
51
  function fieldsIsFieldPacketArray(fields) {
75
52
  return (Array.isArray(fields) && fields.length === 0) || (Array.isArray(fields) && fields.length > 0 && fields[0].constructor.name === 'FieldPacket');
76
53
  }
77
- export function queryWithFields(connection, query) {
78
- return new Promise((resolve, reject) => {
79
- connection.query(query, (err, results, fields) => {
80
- try {
81
- if (err) {
82
- console.error('Error running query for dashboard chart', err);
83
- reject(err);
84
- }
85
- else if (!resultsIsRowDataPacketArray(results)) {
86
- reject(new Error('Query did not return a valid result set. Ensure that the chart has exactly one valid SELECT query.'));
87
- }
88
- else if (!fieldsIsFieldPacketArray(fields)) {
89
- reject(new Error('Query did not return a valid field set.'));
90
- }
91
- else {
92
- resolve({
93
- results,
94
- fields: fields?.reduce((sum, field) => {
95
- const fieldType = mysqlToGoogleChartsDataTypeMap(mysqlDataTypes[field.type] || field.type);
96
- return {
97
- ...sum,
98
- [field.name]: field.name.startsWith('role:') ? getColumnRoleType(field.name, fieldType) : fieldType,
99
- };
100
- }, {}) ?? {},
101
- });
102
- }
103
- }
104
- catch (err) {
105
- reject(err);
106
- }
107
- });
108
- });
54
+ export async function queryWithFields(connection, query) {
55
+ try {
56
+ const [results, fields] = await connection.queryWithFieldPackets(query);
57
+ if (!resultsIsObjectArray(results)) {
58
+ throw new Error('Query did not return a valid result set. Ensure that the chart has exactly one valid SELECT query.');
59
+ }
60
+ else if (!fieldsIsFieldPacketArray(fields)) {
61
+ throw new Error('Query did not return a valid field set.');
62
+ }
63
+ else {
64
+ return {
65
+ results,
66
+ fields: fields.reduce((sum, field) => {
67
+ return {
68
+ ...sum,
69
+ [field.name]: mysqlToGoogleChartsDataTypeMap(mysqlDataTypes[field.type] || field.type),
70
+ };
71
+ }, {}) ?? {},
72
+ };
73
+ }
74
+ }
75
+ catch (err) {
76
+ console.error('Error running query for dashboard chart', err);
77
+ throw err;
78
+ }
109
79
  }
110
80
  export function getMultiSeriesData({ data: queryResult, seriesOptions, formatting, fields }) {
111
81
  const { groupXAxisBy, series, value, tooltip } = seriesOptions;
112
- const allOfTheKeysInTheSeries = new Set(queryResult.flatMap(row => {
113
- const keys = [row[series]];
114
- const roleKeys = Object.keys(row)
115
- .filter(key => key.startsWith('role:'))
116
- .map(key => `${key}-${row[series]}`);
117
- if (roleKeys.length) {
118
- keys.push(...roleKeys);
119
- }
120
- return keys;
121
- }));
122
- const objectOfAllKeys = {};
82
+ const allOfTheKeysInTheSeries = new Set(queryResult.map(row => row[series]));
83
+ const objectOfAllKeysWithNullValues = {};
123
84
  for (const key of allOfTheKeysInTheSeries) {
124
- objectOfAllKeys[key] = [];
125
- if (tooltip && !key.startsWith('role:')) {
126
- objectOfAllKeys[`role:tooltip-${key}`] = [];
85
+ objectOfAllKeysWithNullValues[key] = null;
86
+ if (tooltip) {
87
+ objectOfAllKeysWithNullValues[`${tooltip} ${key}`] = null;
127
88
  }
128
89
  }
129
90
  const grouped = {};
130
- let groupedByDate = false;
131
91
  for (const row of queryResult) {
132
- groupedByDate || (groupedByDate = row[groupXAxisBy] instanceof Date);
133
- const groupXAxisByValue = groupedByDate ? row[groupXAxisBy].toISOString() : row[groupXAxisBy];
134
- if (!grouped[groupXAxisByValue]) {
135
- grouped[groupXAxisByValue] = { ...klona(objectOfAllKeys) };
92
+ if (!grouped[row[groupXAxisBy]]) {
93
+ grouped[row[groupXAxisBy]] = { ...objectOfAllKeysWithNullValues };
136
94
  }
137
- grouped[groupXAxisByValue][row[series]].push(row[value]);
138
- const roleKeys = Object.keys(row).filter(key => key.startsWith('role:'));
139
- roleKeys.forEach(key => {
140
- grouped[groupXAxisByValue][`${key}-${row[series]}`].push(row[key]);
141
- });
95
+ grouped[row[groupXAxisBy]][row[series]] = row[value];
142
96
  if (tooltip) {
143
- grouped[groupXAxisByValue][`role:tooltip-${row[series]}`].push(row[tooltip]);
97
+ grouped[row[groupXAxisBy]][`${tooltip} ${row[series]}`] = row[tooltip];
144
98
  }
145
99
  }
146
100
  const seriesFields = { [groupXAxisBy]: fields[groupXAxisBy] };
147
101
  const seriesFormatting = {};
148
102
  for (const key of allOfTheKeysInTheSeries) {
149
- if (key.startsWith('role:')) {
150
- seriesFields[key] = getColumnRoleType(getRoleFromColumnName(key), fields[value]);
151
- }
152
- else {
153
- seriesFields[key] = fields[value];
154
- }
155
- if (tooltip && !key.startsWith('role:')) {
156
- seriesFields[`role:tooltip-${key}`] = fields[tooltip];
103
+ seriesFields[key] = fields[value];
104
+ if (tooltip) {
105
+ seriesFields[`${tooltip} ${key}`] = fields[tooltip];
157
106
  }
158
107
  if (formatting && value in formatting) {
159
108
  seriesFormatting[key] = formatting[value];
@@ -161,15 +110,10 @@ export function getMultiSeriesData({ data: queryResult, seriesOptions, formattin
161
110
  }
162
111
  const multiSeriesData = [];
163
112
  for (const key in grouped) {
164
- const longestColumn = Math.max(...Object.values(grouped[key]).map(arr => arr.length));
165
- const groupedKeys = Object.keys(grouped[key]);
166
- for (let i = 0; i < longestColumn; i++) {
167
- const obj = { [groupXAxisBy]: groupedByDate ? new Date(key) : key };
168
- for (const groupedKey of groupedKeys) {
169
- obj[groupedKey] = grouped[key][groupedKey][i] ?? null;
170
- }
171
- multiSeriesData.push(obj);
172
- }
113
+ multiSeriesData.push({
114
+ [groupXAxisBy]: key,
115
+ ...grouped[key],
116
+ });
173
117
  }
174
118
  return {
175
119
  data: multiSeriesData,
@@ -222,19 +166,6 @@ export function handleFormattingTemplates(formatting) {
222
166
  }
223
167
  return formattingOutput;
224
168
  }
225
- function getSeriesRole(seriesName, multiSeries) {
226
- if (multiSeries?.tooltip && seriesName.startsWith(multiSeries.tooltip)) {
227
- return {
228
- role: 'tooltip',
229
- seriesName,
230
- };
231
- }
232
- const match = seriesName.match(roleRegex);
233
- if (match) {
234
- return { role: match[1], seriesName: seriesName };
235
- }
236
- return { role: null, seriesName };
237
- }
238
169
  export function getDataTableFormat(data, fields, multiSeries) {
239
170
  let cols = [];
240
171
  if (multiSeries) {
@@ -242,8 +173,12 @@ export function getDataTableFormat(data, fields, multiSeries) {
242
173
  }
243
174
  for (const key in fields) {
244
175
  if (!multiSeries || key !== multiSeries.groupXAxisBy) {
245
- const { role, seriesName } = getSeriesRole(key, multiSeries);
246
- cols.push(makeDataTableCol(seriesName, fields, role));
176
+ if (multiSeries?.tooltip && key.includes(multiSeries.tooltip)) {
177
+ cols.push(makeDataTableCol(key, fields, 'tooltip'));
178
+ }
179
+ else {
180
+ cols.push(makeDataTableCol(key, fields));
181
+ }
247
182
  }
248
183
  }
249
184
  const rows = data.map(row => {
@@ -255,20 +190,6 @@ export function getDataTableFormat(data, fields, multiSeries) {
255
190
  c: items,
256
191
  };
257
192
  });
258
- if (!cols.length) {
259
- cols.push({
260
- id: 'nodata1',
261
- label: 'No Data',
262
- type: 'number',
263
- });
264
- }
265
- if (cols.length === 1) {
266
- cols.push({
267
- id: 'nodata2',
268
- label: 'No Data',
269
- type: 'number',
270
- });
271
- }
272
193
  return { cols, rows };
273
194
  }
274
195
  export function makeDataCumulative(dataTable, cumulative = true) {
@@ -286,28 +207,29 @@ export function makeDataCumulative(dataTable, cumulative = true) {
286
207
  });
287
208
  return dataTable;
288
209
  }
289
- export function getSvelteDataTableFormat(rows, fields, formatting, styleTemplates = {}) {
210
+ export function getRactiveTableDataFormat(rows, fields, formatting, styleTemplates = {}) {
290
211
  const columns = Object.keys(fields).map(field => {
291
- if (formatting?.[field]?.type === 'NumberFormat') {
212
+ if (formatting?.[field]?.type === 'NumberFormat' && formatting?.[field]?.format?.prefix === '$') {
292
213
  return {
293
214
  property: `${field}[value]`,
294
215
  name: field,
295
- class: 'text-right text-end',
216
+ class: 'text-right border-top-0',
296
217
  };
297
218
  }
298
219
  return {
299
220
  property: `${field}[value]`,
300
221
  name: field,
301
- class: '',
222
+ class: 'border-top-0',
302
223
  };
303
224
  });
304
225
  if (styleTemplates) {
305
- rows = rows.map(row => styleTableRow(row, styleTemplates));
226
+ rows = rows.map(row => {
227
+ return styleTableRow(row, styleTemplates);
228
+ });
306
229
  }
307
230
  return {
308
231
  columns,
309
232
  rows,
310
233
  };
311
234
  }
312
- export { getSvelteDataTableFormat as getRactiveDataTableFormat };
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLG1CQUFtQixNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxPQUFPLGNBQWMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNsRSxPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBRTdCLFNBQVMsOEJBQThCLENBQUMsYUFBcUI7SUFDNUQsUUFBUSxhQUFhLEVBQUUsQ0FBQztRQUN2QixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxTQUFTO1lBQ2IsT0FBTyxRQUFRLENBQUE7UUFDaEIsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssTUFBTTtZQUNWLE9BQU8sUUFBUSxDQUFBO1FBQ2hCLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssV0FBVztZQUNmLE9BQU8sVUFBVSxDQUFBO1FBQ2xCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxTQUFTO1lBQ2IsT0FBTyxNQUFNLENBQUE7UUFDZCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTztZQUNYLE9BQU8sV0FBVyxDQUFBO1FBQ25CO1lBQ0MsT0FB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
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLG1CQUFtQixNQUFNLDJCQUEyQixDQUFBO0FBQzNELE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQTtBQUV2QyxPQUFPLGNBQWMsTUFBTSx1Q0FBdUMsQ0FBQTtBQUNsRSxPQUFPLGFBQWEsTUFBTSxzQkFBc0IsQ0FBQTtBQUVoRCxTQUFTLDhCQUE4QixDQUFDLGFBQXFCO0lBQzVELFFBQVEsYUFBYSxFQUFFLENBQUM7UUFDdkIsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssU0FBUztZQUNiLE9BQU8sUUFBUSxDQUFBO1FBQ2hCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssUUFBUSxDQUFDO1FBQ2QsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU07WUFDVixPQUFPLFFBQVEsQ0FBQTtRQUNoQixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLFVBQVUsQ0FBQztRQUNoQixLQUFLLFlBQVksQ0FBQztRQUNsQixLQUFLLFdBQVc7WUFDZixPQUFPLFVBQVUsQ0FBQTtRQUNsQixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssU0FBUztZQUNiLE9BQU8sTUFBTSxDQUFBO1FBQ2QsS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLE9BQU87WUFDWCxPQUFPLFdBQVcsQ0FBQTtRQUNuQjtZQUNDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7QUFDRixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsTUFBeUIsRUFBRSxPQUFzQixJQUFJO0lBQzNGLE9BQU87UUFDTixFQUFFLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUNsQyxLQUFLLEVBQUUsR0FBRztRQUNWLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2pCLElBQUk7S0FDSixDQUFBO0FBQ0YsQ0FBQztBQUtELFNBQVMsb0JBQW9CLENBQUMsT0FBZ0I7SUFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7V0FDbkQsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQzFJLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLE1BQWlDO0lBQ2xFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFBO0FBQ3RKLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxVQUF1QyxFQUFFLEtBQW1CO0lBRWpHLElBQUksQ0FBQztRQUNKLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsTUFBTSxVQUFVLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvR0FBb0csQ0FBQyxDQUFBO1FBQ3RILENBQUM7YUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7UUFDM0QsQ0FBQzthQUFNLENBQUM7WUFDUCxPQUFPO2dCQUNOLE9BQU87Z0JBQ1AsTUFBTSxFQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFxQixFQUFFO29CQUMvQyxPQUFPO3dCQUNOLEdBQUcsR0FBRzt3QkFDTixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQ3RGLENBQUE7Z0JBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUU7YUFDYixDQUFBO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUM3RCxNQUFNLEdBQUcsQ0FBQTtJQUNWLENBQUM7QUFDRixDQUFDO0FBU0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBMkI7SUFLbkgsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQTtJQUU5RCxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFTLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXBGLE1BQU0sNkJBQTZCLEdBQTRCLEVBQUUsQ0FBQTtJQUNqRSxLQUFLLE1BQU0sR0FBRyxJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDM0MsNkJBQTZCLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFBO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDYiw2QkFBNkIsQ0FBQyxHQUFHLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUMxRCxDQUFDO0lBQ0YsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFpRSxFQUFFLENBQUE7SUFHaEYsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyw2QkFBNkIsRUFBRSxDQUFBO1FBQ2xFLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXBELElBQUksT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkUsQ0FBQztJQUNGLENBQUM7SUFHRCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUE7SUFDN0QsTUFBTSxnQkFBZ0IsR0FBc0MsRUFBRSxDQUFBO0lBQzlELEtBQUssTUFBTSxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztRQUMzQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsR0FBRyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEQsQ0FBQztRQUVELElBQUksVUFBVSxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUN2QyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDMUMsQ0FBQztJQUNGLENBQUM7SUFHRCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUE7SUFDMUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUMzQixlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3BCLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRztZQUNuQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDZixDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNOLElBQUksRUFBRSxlQUFrQztRQUN4QyxVQUFVLEVBQUU7WUFDWCxHQUFHLFVBQVU7WUFDYixHQUFHLGdCQUFnQjtTQUNMO1FBQ2YsTUFBTSxFQUFFLFlBQWlDO0tBQ3pDLENBQUE7QUFDRixDQUFDO0FBQ0QsTUFBTSxVQUFVLDZCQUE2QixDQUFDLFNBQTBCO0lBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUE7SUFFakcsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzFCLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDYixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsQ0FBQTtJQUNYLENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLElBQXFCLEVBQUUsZUFBeUI7SUFDcEcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtJQUUvRCxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQTtRQUNwRSxJQUFJLGVBQWUsR0FBVyxFQUFFLENBQUE7UUFFaEMsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDbkksZUFBZSxHQUFHLENBQUMsQ0FBQTtRQUNwQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3JCLE9BQU87Z0JBQ04sR0FBRyxHQUFHO2dCQUNOLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLGVBQWU7YUFDaEQsQ0FBQTtRQUNGLENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQTtJQUNaLENBQUM7QUFDRixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLFVBQXVCO0lBQ2hFLE1BQU0sZ0JBQWdCLEdBQXdCLEVBQUUsQ0FBQTtJQUNoRCxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFBO1lBQ2hGLElBQUksT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDdkYsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQsT0FBTyxnQkFBZ0IsQ0FBQTtBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQXFCLEVBQUUsTUFBeUIsRUFBRSxXQUFnQztJQUNwSCxJQUFJLElBQUksR0FBNEIsRUFBRSxDQUFBO0lBRXRDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDakIsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzVELENBQUM7SUFFRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0RCxJQUFJLFdBQVcsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFFL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDcEQsQ0FBQztpQkFBTSxDQUFDO2dCQUVQLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7WUFDekMsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUE7UUFFaEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDL0IsQ0FBQztRQUVELE9BQU87WUFDTixDQUFDLEVBQUUsS0FBSztTQUNSLENBQUE7SUFDRixDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7QUFDdEIsQ0FBQztBQU9ELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUEwQixFQUFFLFVBQVUsR0FBRyxJQUFJO0lBQy9FLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQ3hDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUMvQixJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDMUYsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMzRCxDQUFDO3FCQUFNLElBQUksVUFBVSxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDOUYsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzNFLENBQUM7WUFDRixDQUFDLENBQUMsQ0FBQTtRQUNILENBQUM7SUFDRixDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sU0FBUyxDQUFBO0FBQ2pCLENBQUM7QUFDRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBcUIsRUFBRSxNQUFpQyxFQUFFLFVBQStCLEVBQUUsY0FBYyxHQUFHLEVBQUU7SUFDdkosTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFFL0MsSUFBSSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEtBQUssY0FBYyxJQUFJLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakcsT0FBTztnQkFDTixRQUFRLEVBQUUsR0FBRyxLQUFLLFNBQVM7Z0JBQzNCLElBQUksRUFBRSxLQUFLO2dCQUNYLEtBQUssRUFBRSx5QkFBeUI7YUFDaEMsQ0FBQTtRQUNGLENBQUM7UUFDRCxPQUFPO1lBQ04sUUFBUSxFQUFFLEdBQUcsS0FBSyxTQUFTO1lBQzNCLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLGNBQWM7U0FDckIsQ0FBQTtJQUNGLENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNwQixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQixPQUFPLGFBQWEsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDMUMsQ0FBQyxDQUFDLENBQUE7SUFDSCxDQUFDO0lBQ0QsT0FBTztRQUNOLE9BQU87UUFDUCxJQUFJO0tBQ0osQ0FBQTtBQUNGLENBQUMifQ==
package/dist/index.d.ts CHANGED
@@ -1,25 +1,18 @@
1
- export type * from './types/index.js';
2
- export * from './types/index.js';
3
- export { queryWithFields } from './chart-helper.js';
1
+ import { DatabaseConnectionInterface, QueryCommand, RowDataPacket } from '@isoftdata/utility-db';
4
2
  import { QueryFieldsObject } from './chart-helper.js';
5
- import type { DashboardReportParameter, DashboardReportParameterInput } from './types/parameter.js';
6
- import type { Session, SiteType } from './types/session.js';
7
- import type { MultiSeriesOptions, Formatting, Chart, Table, GoogleDataTable, ProcessedFormatting, ChartJson } from './types/chart.js';
8
- import type { Connection, RowDataPacket } from 'mysql';
9
- import type { Report, ReportInput } from './types/report.js';
10
- import type { PartialDeep } from 'type-fest';
3
+ import type { DashboardReportParameter } from './types/parameter';
4
+ import type { Session, SiteType } from './types/session';
5
+ import type { MultiSeriesOptions, Formatting, Chart, Table, GoogleDataTable, ProcessedFormatting } from './types/chart';
6
+ import type { Report, ReportInput } from './types/report';
11
7
  export * as formatterTemplates from './formatting-templates.js';
12
8
  export { handleFormattingTemplates } from './chart-helper.js';
9
+ export type { ReportInput } from './types/report';
13
10
  export type CustomDataSourceFunction = (query: string, values?: unknown[]) => Promise<{
14
11
  results: RowDataPacket[];
15
12
  fields: QueryFieldsObject;
16
- jsonOverride?: PartialDeep<ChartJson>;
17
13
  }>;
18
14
  export type LoadDataTableAndProcessedFormattingOptions = {
19
- query: {
20
- sql: string;
21
- values: unknown[];
22
- };
15
+ query: QueryCommand;
23
16
  multiSeries?: MultiSeriesOptions;
24
17
  formatting?: Formatting;
25
18
  chartType: string;
@@ -27,45 +20,30 @@ export type LoadDataTableAndProcessedFormattingOptions = {
27
20
  table?: Table;
28
21
  customDataSource?: CustomDataSourceFunction | null;
29
22
  };
30
- export declare function loadDataTableAndProcessedFormatting(mysqlConnection: Connection, { query: queryObject, multiSeries, formatting, chartType, cumulative, table, customDataSource }: LoadDataTableAndProcessedFormattingOptions): Promise<{
23
+ export declare function loadDataTableAndProcessedFormatting(mysqlConnection: DatabaseConnectionInterface, { query: queryObject, multiSeries, formatting, chartType, cumulative, table, customDataSource }: LoadDataTableAndProcessedFormattingOptions): Promise<{
31
24
  dataTable: GoogleDataTable | Table;
32
25
  processedFormatting: ProcessedFormatting;
33
26
  fields: QueryFieldsObject;
34
- jsonOverride?: PartialDeep<ChartJson>;
35
27
  }>;
36
28
  export type loadDataTableOptions = {
37
- query: {
38
- sql: string;
39
- values: unknown[];
40
- };
29
+ query: QueryCommand;
41
30
  multiSeries: MultiSeriesOptions;
42
31
  formatting: Formatting;
43
32
  chartType: string;
44
33
  };
45
- export declare function loadDataTable(mysqlConnection: Connection, { query: queryObject, multiSeries, formatting, chartType }: loadDataTableOptions): Promise<GoogleDataTable>;
46
- type SelectionParameter = {
47
- name: string;
48
- value: string;
49
- dates?: {
50
- from: string;
51
- to: string;
52
- } | null;
53
- };
54
- type LoadOutputParameterValuesOptions = {
55
- definitionList: Array<DashboardReportParameterInput>;
56
- selectionList?: Array<SelectionParameter>;
34
+ export declare function loadDataTable(mysqlConnection: DatabaseConnectionInterface, { query: queryObject, multiSeries, formatting, chartType }: loadDataTableOptions): Promise<GoogleDataTable>;
35
+ type loadOutputParameterValuesOptions = {
36
+ definitionList: DashboardReportParameter[];
37
+ selectionList?: Array<Partial<DashboardReportParameter> & Pick<DashboardReportParameter, 'name'>>;
57
38
  forClient?: boolean;
58
39
  session: Session;
59
40
  site?: SiteType;
60
41
  siteIdColumn?: string;
61
42
  siteNameColumn?: string;
62
43
  };
63
- export declare function loadOutputParameterValues(mysqlConnection: Connection, { definitionList, selectionList, forClient, session, site, siteIdColumn, siteNameColumn }: LoadOutputParameterValuesOptions): Promise<DashboardReportParameter[]>;
44
+ export declare function loadOutputParameterValues(mysqlConnection: DatabaseConnectionInterface, { definitionList, selectionList, forClient, session, site, siteIdColumn, siteNameColumn }: loadOutputParameterValuesOptions): Promise<DashboardReportParameter[]>;
64
45
  export declare const parameterRegex: RegExp;
65
- export declare function parameterizeQuery(queryString: string | undefined, parameterValues: DashboardReportParameter[]): {
66
- sql: string;
67
- values: unknown[];
68
- };
46
+ export declare function parameterizeQuery(queryString: string, parameterValues: DashboardReportParameter[]): QueryCommand;
69
47
  export declare function parameterizeUrl(url: string, parameterValues: DashboardReportParameter[]): string;
70
48
  type FormatReportMetadataOptions = {
71
49
  report: ReportInput;
@@ -75,9 +53,9 @@ type FormatReportMetadataOptions = {
75
53
  siteIdColumn?: string;
76
54
  siteNameColumn?: string;
77
55
  };
78
- export declare function formatReportMetadata(mysqlConnection: Connection, { report, chartsInReport, session, site, siteIdColumn, siteNameColumn }: FormatReportMetadataOptions): Promise<Report>;
56
+ export declare function formatReportMetadata(mysqlConnection: DatabaseConnectionInterface, { report, chartsInReport, session, site, siteIdColumn, siteNameColumn }: FormatReportMetadataOptions): Promise<Report>;
79
57
  export type FormatChartDataForReportOptions = {
80
- reportParameters: Array<DashboardReportParameterInput>;
58
+ reportParameters: DashboardReportParameter[];
81
59
  chart: Chart;
82
60
  reportChart: {
83
61
  chartId: number;
@@ -86,11 +64,11 @@ export type FormatChartDataForReportOptions = {
86
64
  rank: number;
87
65
  reportChartId: number;
88
66
  };
89
- parameterSelectionList: SelectionParameter[];
67
+ parameterSelectionList: DashboardReportParameter[];
90
68
  session: Session;
91
69
  site: SiteType;
92
70
  siteIdColumn?: string;
93
71
  siteNameColumn?: string;
94
72
  customDataSource?: CustomDataSourceFunction | null;
95
73
  };
96
- export declare function formatChartDataForReport(mysqlConnection: Connection, { reportParameters, chart, reportChart, parameterSelectionList, session, site, siteIdColumn, siteNameColumn, customDataSource }: FormatChartDataForReportOptions): Promise<Omit<Chart, 'query'>>;
74
+ export declare function formatChartDataForReport(mysqlConnection: DatabaseConnectionInterface, { reportParameters, chart, reportChart, parameterSelectionList, session, site, siteIdColumn, siteNameColumn, customDataSource }: FormatChartDataForReportOptions): Promise<Omit<Chart, 'query'>>;