sqlite-wasm-viewer 1.0.7 → 1.0.9

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/README.md CHANGED
@@ -37,7 +37,8 @@ showViewer();
37
37
  ```
38
38
 
39
39
  # Development
40
- A testing app will be available on `http://localhost:9000` after running:
40
+ Run:
41
41
  ```
42
42
  yarn start
43
- ```
43
+ ```
44
+ to start the testing app at `http://localhost:9000`
package/dist/index.js CHANGED
@@ -98,9 +98,13 @@ function showViewer() {
98
98
  dbs[message.data.dbName].tables = tables;
99
99
  (_explorerView = explorerView) === null || _explorerView === void 0 ? void 0 : _explorerView.addDatabaseItem(dbs[message.data.dbName]);
100
100
  } else if (message.data.type === 'onQuery') {
101
- if (message.data.label === 'tableView') {
101
+ if (message.data.label === 'tableViewColumns') {
102
102
  var _tableViewer;
103
- (_tableViewer = tableViewer) === null || _tableViewer === void 0 ? void 0 : _tableViewer.setTableResults(message.data.result.resultRows || []);
103
+ (_tableViewer = tableViewer) === null || _tableViewer === void 0 ? void 0 : _tableViewer.setTableColumns(message.data.result.resultRows || []);
104
+ }
105
+ if (message.data.label === 'tableView') {
106
+ var _tableViewer2;
107
+ (_tableViewer2 = tableViewer) === null || _tableViewer2 === void 0 ? void 0 : _tableViewer2.setTableResults(message.data.result.resultRows || []);
104
108
  }
105
109
  }
106
110
  };
@@ -13,6 +13,7 @@ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _ty
13
13
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
14
  var SqlLogView = /*#__PURE__*/function () {
15
15
  function SqlLogView(rootEl, queryRunner) {
16
+ var _this = this;
16
17
  _classCallCheck(this, SqlLogView);
17
18
  queryRunner.addListener(this.handleQueryRun.bind(this));
18
19
  var container = document.createElement('div');
@@ -20,6 +21,13 @@ var SqlLogView = /*#__PURE__*/function () {
20
21
  var header = document.createElement('div');
21
22
  header.className = 'viewHeader';
22
23
  header.innerText = 'SQL Log';
24
+ var clearBtn = document.createElement('button');
25
+ clearBtn.style.marginLeft = 'auto';
26
+ clearBtn.innerText = 'Clear';
27
+ clearBtn.onclick = function () {
28
+ _this.textArea.value = '';
29
+ };
30
+ header.appendChild(clearBtn);
23
31
  container.appendChild(header);
24
32
  this.textArea = document.createElement('textarea');
25
33
  this.textArea.id = 'query_log_text';
@@ -7,6 +7,7 @@ exports.TableView = void 0;
7
7
  var _viewerState = require("../../viewerState");
8
8
  var _ListVirtualizer = require("../../ListVirtualizer");
9
9
  require("./styles.css");
10
+ var _TableViewModel = require("./TableViewModel");
10
11
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
11
12
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12
13
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
@@ -18,14 +19,12 @@ var TableView = /*#__PURE__*/function () {
18
19
  function TableView(viewerElem, rootElement, queryRunner) {
19
20
  var _this = this;
20
21
  _classCallCheck(this, TableView);
21
- _defineProperty(this, "columnNames", []);
22
- _defineProperty(this, "fitlers", {});
23
22
  _defineProperty(this, "updateTimer", null);
24
- _defineProperty(this, "selectedCell", null);
25
23
  this.viewerElem = viewerElem;
26
24
  this.rootElement = rootElement;
27
25
  this.queryRunner = queryRunner;
28
26
  this.buildDomTemplate();
27
+ this.model = new _TableViewModel.TableViewModel();
29
28
  this.viewerElem.addEventListener('tableSelected', function (event) {
30
29
  var selectedTable = event.detail;
31
30
  _this.setTable(selectedTable.tableName);
@@ -39,7 +38,7 @@ var TableView = /*#__PURE__*/function () {
39
38
  container: this.container,
40
39
  generatorFn: function generatorFn(i) {
41
40
  var _row$rowid;
42
- var row = _this.rows[i];
41
+ var row = _this.model.rows[i];
43
42
  if (!row) {
44
43
  return null;
45
44
  }
@@ -66,11 +65,11 @@ var TableView = /*#__PURE__*/function () {
66
65
  columnName: columnKey,
67
66
  tableName: ((_ViewerState$instance = _viewerState.ViewerState.instance.selectedTable) === null || _ViewerState$instance === void 0 ? void 0 : _ViewerState$instance.tableName) || ''
68
67
  });
69
- if (_this.selectedCell) {
70
- _this.selectedCell.classList.remove('selected');
68
+ if (_this.model.selectedCell) {
69
+ _this.model.selectedCell.classList.remove('selected');
71
70
  }
72
71
  td.classList.add('selected');
73
- _this.selectedCell = td;
72
+ _this.model.selectedCell = td;
74
73
  };
75
74
  td.appendChild(contentEl);
76
75
  tr.appendChild(td);
@@ -83,11 +82,18 @@ var TableView = /*#__PURE__*/function () {
83
82
  _createClass(TableView, [{
84
83
  key: "setTableResults",
85
84
  value: function setTableResults(rows) {
86
- this.rows = rows;
87
- this.viewHeaderTitle.innerHTML = this.tableName;
88
- this.buildHeader(rows);
85
+ this.model.rows = rows;
86
+ this.viewHeaderTitle.innerHTML = this.model.tableName;
89
87
  this.virtualizer.setRowCount(rows.length);
90
88
  }
89
+ }, {
90
+ key: "setTableColumns",
91
+ value: function setTableColumns(columns) {
92
+ this.model.columnNames = columns.map(function (column) {
93
+ return column.name;
94
+ });
95
+ this.buildHeader();
96
+ }
91
97
  }, {
92
98
  key: "buildDomTemplate",
93
99
  value: function buildDomTemplate() {
@@ -100,7 +106,7 @@ var TableView = /*#__PURE__*/function () {
100
106
  var updateBtn = document.createElement('button');
101
107
  updateBtn.innerText = 'Update';
102
108
  updateBtn.onclick = function () {
103
- _this2.requestRows();
109
+ _this2.requestRows(true);
104
110
  };
105
111
  this.viewHeader.appendChild(updateBtn);
106
112
  var saveBtn = document.createElement('button');
@@ -140,27 +146,31 @@ var TableView = /*#__PURE__*/function () {
140
146
  }
141
147
  }, {
142
148
  key: "buildHeader",
143
- value: function buildHeader(rows) {
149
+ value: function buildHeader() {
144
150
  var _this3 = this;
145
- if (this.columnNames.length !== 0) {
151
+ if (this.model.columnNames.length === 0) {
146
152
  return;
147
153
  }
148
- var schema = rows.length > 0 ? Object.keys(rows[0]).filter(function (column) {
149
- return column !== 'rowid';
150
- }) : [];
151
- if (schema.length > 0) {
152
- this.columnNames = schema;
153
- }
154
154
  this.headerRow.innerHTML = '';
155
- this.columnNames.forEach(function (column) {
155
+ this.model.columnNames.forEach(function (column) {
156
156
  var columnHeader = document.createElement('th');
157
157
  columnHeader.className = 'columnHeaderCell';
158
158
  columnHeader.innerHTML = column;
159
159
  var filterFieldCell = document.createElement('th');
160
160
  filterFieldCell.className = 'columnFilterCell';
161
161
  var filterField = document.createElement('input');
162
+ if (_this3.model.fitlers[column]) {
163
+ filterField.value = _this3.model.fitlers[column];
164
+ }
165
+ filterField.onkeydown = function (event) {
166
+ if (event.key === 'Escape') {
167
+ filterField.value = '';
168
+ _this3.model.fitlers[column] = '';
169
+ _this3.scheduleUpdate();
170
+ }
171
+ };
162
172
  filterField.oninput = function () {
163
- _this3.fitlers[column] = filterField.value;
173
+ _this3.model.fitlers[column] = filterField.value;
164
174
  _this3.scheduleUpdate();
165
175
  };
166
176
  filterField.placeholder = 'Filter';
@@ -172,20 +182,27 @@ var TableView = /*#__PURE__*/function () {
172
182
  }, {
173
183
  key: "setTable",
174
184
  value: function setTable(name) {
175
- if (this.tableName === name) {
185
+ if (this.model.tableName === name) {
176
186
  return;
177
187
  }
178
- this.tableName = name;
179
- this.columnNames = [];
180
- this.fitlers = {};
181
- this.requestRows();
188
+ this.model.tableName = name;
189
+ this.model.columnNames = [];
190
+ this.model.fitlers = {};
191
+ this.requestRows(true);
182
192
  }
183
193
  }, {
184
194
  key: "requestRows",
185
- value: function requestRows() {
186
- var sql = "SELECT \"_rowid_\",* FROM ".concat(this.tableName);
195
+ value: function requestRows(refetchColumns) {
196
+ if (refetchColumns) {
197
+ var _sql = "PRAGMA table_info(".concat(this.model.tableName, ");");
198
+ this.queryRunner.runQuery({
199
+ sql: _sql,
200
+ parameters: []
201
+ }, 'tableViewColumns');
202
+ }
203
+ var sql = "SELECT \"_rowid_\",* FROM ".concat(this.model.tableName);
187
204
  var filterSql = [];
188
- Object.entries(this.fitlers).forEach(function (filterEntry) {
205
+ Object.entries(this.model.fitlers).forEach(function (filterEntry) {
189
206
  var column = filterEntry[0];
190
207
  var filter = filterEntry[1];
191
208
  if (filter) {
@@ -218,7 +235,7 @@ var TableView = /*#__PURE__*/function () {
218
235
  sql: sql,
219
236
  parameters: []
220
237
  });
221
- this.requestRows();
238
+ this.requestRows(true);
222
239
  _viewerState.ViewerState.instance.setHasChanges(false);
223
240
  }
224
241
  }, {
@@ -229,7 +246,7 @@ var TableView = /*#__PURE__*/function () {
229
246
  window.clearTimeout(this.updateTimer);
230
247
  }
231
248
  this.updateTimer = window.setTimeout(function () {
232
- _this4.requestRows();
249
+ _this4.requestRows(false);
233
250
  _this4.updateTimer = null;
234
251
  }, 300);
235
252
  }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TableViewModel = void 0;
7
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
8
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
9
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
10
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
12
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
13
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
14
+ var TableViewModel = /*#__PURE__*/_createClass(function TableViewModel() {
15
+ _classCallCheck(this, TableViewModel);
16
+ _defineProperty(this, "columnNames", []);
17
+ _defineProperty(this, "fitlers", {});
18
+ _defineProperty(this, "selectedCell", null);
19
+ });
20
+ exports.TableViewModel = TableViewModel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sqlite-wasm-viewer",
3
- "version": "1.0.7",
3
+ "version": "1.0.9",
4
4
  "description": "An SQLite OPFS database viewer that enables database inspection and SQL command execution.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -52,4 +52,4 @@
52
52
  "peerDependencies": {
53
53
  "@sqlite.org/sqlite-wasm": "^3.x.x"
54
54
  }
55
- }
55
+ }