@deephaven/pouch-storage 1.22.1-alpha-pivot-builder.0 → 1.22.2-alpha-pivot-builder.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.
@@ -77,16 +77,13 @@ export class PouchCommandHistoryTable extends PouchStorageTable {
77
77
  var allItems = result.rows
78
78
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
79
79
  .map(row => row.doc).filter(_ref2 => {
80
- var {
81
- name
82
- } = _ref2;
80
+ var name = _ref2.name;
83
81
  return name;
84
82
  });
85
83
  log.debug("Fetched ".concat(allItems.length, " command history items"));
86
- var {
87
- toKeep,
88
- toPrune
89
- } = siftPrunableItems(allItems, COMMAND_HISTORY_ITEMS_MAX, COMMAND_HISTORY_ITEMS_PRUNE);
84
+ var _siftPrunableItems = siftPrunableItems(allItems, COMMAND_HISTORY_ITEMS_MAX, COMMAND_HISTORY_ITEMS_PRUNE),
85
+ toKeep = _siftPrunableItems.toKeep,
86
+ toPrune = _siftPrunableItems.toPrune;
90
87
 
91
88
  // If number of items in PouchDB has exceeded COMMAND_HISTORY_ITEMS_MAX
92
89
  // prune them down so we have COMMAND_HISTORY_ITEMS_PRUNE left
@@ -106,9 +103,7 @@ export class PouchCommandHistoryTable extends PouchStorageTable {
106
103
  }
107
104
  return _objectSpread(_objectSpread({}, result), {}, {
108
105
  docs: (yield result).docs.filter(_ref3 => {
109
- var {
110
- name
111
- } = _ref3;
106
+ var name = _ref3.name;
112
107
  return (
113
108
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
114
109
  name.toLowerCase().includes(_this.searchText)
@@ -1 +1 @@
1
- {"version":3,"file":"PouchCommandHistoryTable.js","names":["Type","FilterType","Log","StorageUtils","PromiseUtils","siftPrunableItems","PouchStorageTable","COMMAND_HISTORY_ITEMS_MAX","COMMAND_HISTORY_ITEMS_PRUNE","log","module","PouchCommandHistoryTable","constructor","language","cache","_this$cache$tableRegi","concat","auto_compaction","revs_limit","_defineProperty","tableRegistry","has","cacheKey","set","Set","debug","get","add","db","name","setSearch","searchText","trim","toLowerCase","setFilters","makeFilterConfig","makeFilterItem","contains","dbUpdate","event","response","delete","fetchData","_selector","_this","_asyncToGenerator","withTimeout","viewport","allDocs","include_docs","then","result","allItems","rows","map","row","doc","filter","_ref2","length","toKeep","toPrune","pruneItems","docs","_objectSpread","_ref3","includes","fetchInfo","selector","_this2","fetchViewportData","sort","_this3","data","top","bottom","isReversed","id","slice","reverse","items","offset","_this4","isPruning","resumeListeners","pauseChangeListeners","bulkDocs","item","_deleted","err","error","close","_this$cache$tableRegi2","_this$cache$tableRegi3","_this$changes","size","changes","cancel"],"sources":["../src/PouchCommandHistoryTable.ts"],"sourcesContent":["import {\n type CommandHistoryStorageItem,\n type CommandHistoryTable,\n} from '@deephaven/console';\nimport { Type as FilterType } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport {\n type StorageTableViewport,\n StorageUtils,\n type ViewportData,\n} from '@deephaven/storage';\nimport { PromiseUtils } from '@deephaven/utils';\nimport type PouchCommandHistoryCache from './PouchCommandHistoryCache';\nimport { siftPrunableItems } from './pouchCommandHistoryUtils';\nimport PouchStorageTable, {\n type PouchDBSort,\n type PouchStorageItem,\n} from './PouchStorageTable';\n\nconst COMMAND_HISTORY_ITEMS_MAX = 2500;\nconst COMMAND_HISTORY_ITEMS_PRUNE = 2000;\n\nconst log = Log.module('PouchCommandHistoryTable');\n\ntype CommandHistoryDoc = PouchDB.Core.ExistingDocument<\n CommandHistoryStorageItem & PouchStorageItem & PouchDB.Core.AllDocsMeta\n>;\n\nexport class PouchCommandHistoryTable\n extends PouchStorageTable<CommandHistoryStorageItem>\n implements CommandHistoryTable\n{\n constructor(\n language: string,\n private cache: PouchCommandHistoryCache\n ) {\n super(`CommandHistoryStorage.${language}`, {\n // Optimizations to cut down on growing table size. These should be safe\n // since we don't care about revision history for command history\n // documents.\n auto_compaction: true,\n revs_limit: 1,\n });\n\n // Add this table instance to the table registry\n if (!this.cache.tableRegistry.has(this.cacheKey)) {\n this.cache.tableRegistry.set(this.cacheKey, new Set());\n }\n\n log.debug('Adding table to registry', this.cacheKey);\n this.cache.tableRegistry.get(this.cacheKey)?.add(this);\n }\n\n private searchText?: string;\n\n private get cacheKey(): string {\n return this.db.name;\n }\n\n setSearch(searchText: string): void {\n log.debug('Setting search filters', searchText);\n\n this.searchText = searchText.trim().toLowerCase();\n\n this.setFilters(\n searchText\n ? [\n StorageUtils.makeFilterConfig([\n StorageUtils.makeFilterItem(\n 'name',\n FilterType.contains,\n searchText\n ),\n ]),\n ]\n : []\n );\n }\n\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n dbUpdate(\n event: PouchDB.Core.ChangesResponseChange<CommandHistoryStorageItem>\n ): void {\n log.debug('Clearing cache and refreshing data', event);\n\n this.cache.response.delete(this.cacheKey);\n\n super.dbUpdate(event);\n }\n\n /**\n * Fetch command history data from `this.cache.response` or from\n * PouchDB if data is not found in the cache. If the number of total items in\n * the db exceeds COMMAND_HISTORY_ITEMS_MAX, the database will be pruned down\n * to COMMAND_HISTORY_ITEMS_PRUNE total items. Note that PouchDB doesn't\n * actually remove them from the underlying IndexDB, they are just marked\n * as deleted and won't be present in our query results.\n * @param selector\n */\n private async fetchData(\n _selector: PouchDB.Find.Selector\n ): Promise<\n PouchDB.Find.FindResponse<CommandHistoryStorageItem & PouchStorageItem>\n > {\n // Wrapping this in a setTimeout so that it executes on next call stack.\n // This is necessary to ensure `this.cache` has been initialized due to some\n // nuances with property initilization with inherited classes.\n return PromiseUtils.withTimeout(0, async () => {\n if (this.cache.response.has(this.cacheKey)) {\n log.debug('Fetching from cache', this.searchText, this.viewport);\n } else {\n log.debug('Fetching from PouchDB', this.searchText, this.viewport);\n\n this.cache.response.set(\n this.cacheKey,\n this.db\n .allDocs({\n include_docs: true,\n })\n .then(result => {\n const allItems = result.rows\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .map(row => row.doc!)\n .filter(({ name }) => name);\n\n log.debug(`Fetched ${allItems.length} command history items`);\n\n const { toKeep, toPrune } = siftPrunableItems(\n allItems,\n COMMAND_HISTORY_ITEMS_MAX,\n COMMAND_HISTORY_ITEMS_PRUNE\n );\n\n // If number of items in PouchDB has exceeded COMMAND_HISTORY_ITEMS_MAX\n // prune them down so we have COMMAND_HISTORY_ITEMS_PRUNE left\n if (toPrune.length) {\n this.pruneItems(toPrune);\n }\n\n return {\n docs: toKeep,\n };\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const result = this.cache.response.get(this.cacheKey)!;\n\n if (this.searchText == null || this.searchText === '') {\n return result;\n }\n\n return {\n ...result,\n docs: (await result).docs.filter(({ name }) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name.toLowerCase().includes(this.searchText!)\n ),\n };\n });\n }\n\n /**\n * Override `PouchStorageTable.fetchInfo` so we can make use of\n * `PouchCommandHistoryCache`\n * @param selector\n */\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n async fetchInfo(\n selector: PouchDB.Find.Selector\n ): Promise<\n PouchDB.Find.FindResponse<CommandHistoryStorageItem & PouchStorageItem>\n > {\n return this.fetchData(selector);\n }\n\n /**\n * Override `PouchStorageTable.fetchViewportData` to fetch command history\n * storage items. This override provides caching + optimizations specific to\n * command history. We cache the results to avoid excessive PouchDB queries\n * during scrolling. The cache should only need to be invalidated when search\n * filter changes or commands are added to the storage history.\n *\n * @param viewport\n * @param selector\n * @param sort\n * @returns Promise to array of command history storage items\n */\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n async fetchViewportData(\n viewport: StorageTableViewport,\n selector: PouchDB.Find.Selector,\n sort: PouchDBSort\n ): Promise<ViewportData<CommandHistoryStorageItem>> {\n const data = await this.fetchData(selector);\n\n log.debug(\n 'Fetching viewport data',\n viewport.top,\n viewport.bottom + 1,\n sort,\n data\n );\n\n const isReversed = typeof sort[0] === 'object' && sort[0].id === 'desc';\n const docs = isReversed ? data.docs.slice(0).reverse() : data.docs;\n const items = docs.slice(viewport.top, viewport.bottom + 1);\n\n return {\n items,\n offset: viewport.top,\n };\n }\n\n /**\n * Mark given items as `_deleted` in the database.\n * @param items\n */\n async pruneItems(items: CommandHistoryDoc[]): Promise<void> {\n if (this.cache.isPruning.get(this.cacheKey) === true) {\n log.debug('Pruning already in progress. Skipping.');\n return;\n }\n\n try {\n log.debug(`Pruning ${items.length} command history items`);\n\n // Disable change notifications while we bulk delete to avoid locking up\n // the app\n const resumeListeners = this.cache.pauseChangeListeners(this.cacheKey);\n\n this.cache.isPruning.set(this.cacheKey, true);\n await this.db.bulkDocs(items.map(item => ({ ...item, _deleted: true })));\n this.cache.isPruning.set(this.cacheKey, false);\n\n resumeListeners();\n\n log.debug('Finished pruning command history items');\n } catch (err) {\n log.error('An error occurred while pruning db', err);\n }\n }\n\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n close(): void {\n log.debug(\n 'Closing table',\n this,\n this.cache.tableRegistry.get(this.cacheKey)?.size\n );\n this.cache.tableRegistry.get(this.cacheKey)?.delete(this);\n this.changes?.cancel();\n super.close();\n }\n}\n\nexport default PouchCommandHistoryTable;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PouchCommandHistoryTable.js","names":["Type","FilterType","Log","StorageUtils","PromiseUtils","siftPrunableItems","PouchStorageTable","COMMAND_HISTORY_ITEMS_MAX","COMMAND_HISTORY_ITEMS_PRUNE","log","module","PouchCommandHistoryTable","constructor","language","cache","_this$cache$tableRegi","concat","auto_compaction","revs_limit","_defineProperty","tableRegistry","has","cacheKey","set","Set","debug","get","add","db","name","setSearch","searchText","trim","toLowerCase","setFilters","makeFilterConfig","makeFilterItem","contains","dbUpdate","event","response","delete","fetchData","_selector","_this","_asyncToGenerator","withTimeout","viewport","allDocs","include_docs","then","result","allItems","rows","map","row","doc","filter","_ref2","length","_siftPrunableItems","toKeep","toPrune","pruneItems","docs","_objectSpread","_ref3","includes","fetchInfo","selector","_this2","fetchViewportData","sort","_this3","data","top","bottom","isReversed","id","slice","reverse","items","offset","_this4","isPruning","resumeListeners","pauseChangeListeners","bulkDocs","item","_deleted","err","error","close","_this$cache$tableRegi2","_this$cache$tableRegi3","_this$changes","size","changes","cancel"],"sources":["../src/PouchCommandHistoryTable.ts"],"sourcesContent":["import {\n type CommandHistoryStorageItem,\n type CommandHistoryTable,\n} from '@deephaven/console';\nimport { Type as FilterType } from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport {\n type StorageTableViewport,\n StorageUtils,\n type ViewportData,\n} from '@deephaven/storage';\nimport { PromiseUtils } from '@deephaven/utils';\nimport type PouchCommandHistoryCache from './PouchCommandHistoryCache';\nimport { siftPrunableItems } from './pouchCommandHistoryUtils';\nimport PouchStorageTable, {\n type PouchDBSort,\n type PouchStorageItem,\n} from './PouchStorageTable';\n\nconst COMMAND_HISTORY_ITEMS_MAX = 2500;\nconst COMMAND_HISTORY_ITEMS_PRUNE = 2000;\n\nconst log = Log.module('PouchCommandHistoryTable');\n\ntype CommandHistoryDoc = PouchDB.Core.ExistingDocument<\n CommandHistoryStorageItem & PouchStorageItem & PouchDB.Core.AllDocsMeta\n>;\n\nexport class PouchCommandHistoryTable\n extends PouchStorageTable<CommandHistoryStorageItem>\n implements CommandHistoryTable\n{\n constructor(\n language: string,\n private cache: PouchCommandHistoryCache\n ) {\n super(`CommandHistoryStorage.${language}`, {\n // Optimizations to cut down on growing table size. These should be safe\n // since we don't care about revision history for command history\n // documents.\n auto_compaction: true,\n revs_limit: 1,\n });\n\n // Add this table instance to the table registry\n if (!this.cache.tableRegistry.has(this.cacheKey)) {\n this.cache.tableRegistry.set(this.cacheKey, new Set());\n }\n\n log.debug('Adding table to registry', this.cacheKey);\n this.cache.tableRegistry.get(this.cacheKey)?.add(this);\n }\n\n private searchText?: string;\n\n private get cacheKey(): string {\n return this.db.name;\n }\n\n setSearch(searchText: string): void {\n log.debug('Setting search filters', searchText);\n\n this.searchText = searchText.trim().toLowerCase();\n\n this.setFilters(\n searchText\n ? [\n StorageUtils.makeFilterConfig([\n StorageUtils.makeFilterItem(\n 'name',\n FilterType.contains,\n searchText\n ),\n ]),\n ]\n : []\n );\n }\n\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n dbUpdate(\n event: PouchDB.Core.ChangesResponseChange<CommandHistoryStorageItem>\n ): void {\n log.debug('Clearing cache and refreshing data', event);\n\n this.cache.response.delete(this.cacheKey);\n\n super.dbUpdate(event);\n }\n\n /**\n * Fetch command history data from `this.cache.response` or from\n * PouchDB if data is not found in the cache. If the number of total items in\n * the db exceeds COMMAND_HISTORY_ITEMS_MAX, the database will be pruned down\n * to COMMAND_HISTORY_ITEMS_PRUNE total items. Note that PouchDB doesn't\n * actually remove them from the underlying IndexDB, they are just marked\n * as deleted and won't be present in our query results.\n * @param selector\n */\n private async fetchData(\n _selector: PouchDB.Find.Selector\n ): Promise<\n PouchDB.Find.FindResponse<CommandHistoryStorageItem & PouchStorageItem>\n > {\n // Wrapping this in a setTimeout so that it executes on next call stack.\n // This is necessary to ensure `this.cache` has been initialized due to some\n // nuances with property initilization with inherited classes.\n return PromiseUtils.withTimeout(0, async () => {\n if (this.cache.response.has(this.cacheKey)) {\n log.debug('Fetching from cache', this.searchText, this.viewport);\n } else {\n log.debug('Fetching from PouchDB', this.searchText, this.viewport);\n\n this.cache.response.set(\n this.cacheKey,\n this.db\n .allDocs({\n include_docs: true,\n })\n .then(result => {\n const allItems = result.rows\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .map(row => row.doc!)\n .filter(({ name }) => name);\n\n log.debug(`Fetched ${allItems.length} command history items`);\n\n const { toKeep, toPrune } = siftPrunableItems(\n allItems,\n COMMAND_HISTORY_ITEMS_MAX,\n COMMAND_HISTORY_ITEMS_PRUNE\n );\n\n // If number of items in PouchDB has exceeded COMMAND_HISTORY_ITEMS_MAX\n // prune them down so we have COMMAND_HISTORY_ITEMS_PRUNE left\n if (toPrune.length) {\n this.pruneItems(toPrune);\n }\n\n return {\n docs: toKeep,\n };\n })\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const result = this.cache.response.get(this.cacheKey)!;\n\n if (this.searchText == null || this.searchText === '') {\n return result;\n }\n\n return {\n ...result,\n docs: (await result).docs.filter(({ name }) =>\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name.toLowerCase().includes(this.searchText!)\n ),\n };\n });\n }\n\n /**\n * Override `PouchStorageTable.fetchInfo` so we can make use of\n * `PouchCommandHistoryCache`\n * @param selector\n */\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n async fetchInfo(\n selector: PouchDB.Find.Selector\n ): Promise<\n PouchDB.Find.FindResponse<CommandHistoryStorageItem & PouchStorageItem>\n > {\n return this.fetchData(selector);\n }\n\n /**\n * Override `PouchStorageTable.fetchViewportData` to fetch command history\n * storage items. This override provides caching + optimizations specific to\n * command history. We cache the results to avoid excessive PouchDB queries\n * during scrolling. The cache should only need to be invalidated when search\n * filter changes or commands are added to the storage history.\n *\n * @param viewport\n * @param selector\n * @param sort\n * @returns Promise to array of command history storage items\n */\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n async fetchViewportData(\n viewport: StorageTableViewport,\n selector: PouchDB.Find.Selector,\n sort: PouchDBSort\n ): Promise<ViewportData<CommandHistoryStorageItem>> {\n const data = await this.fetchData(selector);\n\n log.debug(\n 'Fetching viewport data',\n viewport.top,\n viewport.bottom + 1,\n sort,\n data\n );\n\n const isReversed = typeof sort[0] === 'object' && sort[0].id === 'desc';\n const docs = isReversed ? data.docs.slice(0).reverse() : data.docs;\n const items = docs.slice(viewport.top, viewport.bottom + 1);\n\n return {\n items,\n offset: viewport.top,\n };\n }\n\n /**\n * Mark given items as `_deleted` in the database.\n * @param items\n */\n async pruneItems(items: CommandHistoryDoc[]): Promise<void> {\n if (this.cache.isPruning.get(this.cacheKey) === true) {\n log.debug('Pruning already in progress. Skipping.');\n return;\n }\n\n try {\n log.debug(`Pruning ${items.length} command history items`);\n\n // Disable change notifications while we bulk delete to avoid locking up\n // the app\n const resumeListeners = this.cache.pauseChangeListeners(this.cacheKey);\n\n this.cache.isPruning.set(this.cacheKey, true);\n await this.db.bulkDocs(items.map(item => ({ ...item, _deleted: true })));\n this.cache.isPruning.set(this.cacheKey, false);\n\n resumeListeners();\n\n log.debug('Finished pruning command history items');\n } catch (err) {\n log.error('An error occurred while pruning db', err);\n }\n }\n\n // Our current version of eslint + prettier doesn't always like the `override`\n // keyword. Whenever we upgrade, we should annotate this function with `override`.\n close(): void {\n log.debug(\n 'Closing table',\n this,\n this.cache.tableRegistry.get(this.cacheKey)?.size\n );\n this.cache.tableRegistry.get(this.cacheKey)?.delete(this);\n this.changes?.cancel();\n super.close();\n }\n}\n\nexport default PouchCommandHistoryTable;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
2
8
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
9
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
@@ -57,18 +63,14 @@ export function makePouchFilter(type, value) {
57
63
  }
58
64
  }
59
65
  function makePouchSelectorFromConfig(config) {
60
- var {
61
- filterItems,
62
- filterOperators
63
- } = config;
66
+ var filterItems = config.filterItems,
67
+ filterOperators = config.filterOperators;
64
68
  var filter = null;
65
69
  for (var i = 0; i < filterItems.length; i += 1) {
66
70
  var filterItem = filterItems[i];
67
- var {
68
- columnName,
69
- type,
70
- value
71
- } = filterItem;
71
+ var columnName = filterItem.columnName,
72
+ type = filterItem.type,
73
+ value = filterItem.value;
72
74
  var newFilter = {
73
75
  [columnName]: makePouchFilter(type, value)
74
76
  };
@@ -233,9 +235,7 @@ export class PouchStorageTable {
233
235
  sendUpdate() {
234
236
  var _this$currentViewport;
235
237
  // Retain a reference to it in case a listener gets removed while sending an update
236
- var {
237
- listeners
238
- } = this;
238
+ var listeners = this.listeners;
239
239
  var data = (_this$currentViewport = this.currentViewportData) !== null && _this$currentViewport !== void 0 ? _this$currentViewport : {
240
240
  items: [],
241
241
  offset: 0
@@ -364,7 +364,9 @@ export class PouchStorageTable {
364
364
  yield Promise.all(sortedRanges.map(/*#__PURE__*/function () {
365
365
  var _ref2 = _asyncToGenerator(function* (_ref) {
366
366
  var _this8$currentFilter;
367
- var [from, to] = _ref;
367
+ var _ref3 = _slicedToArray(_ref, 2),
368
+ from = _ref3[0],
369
+ to = _ref3[1];
368
370
  var limit = to - from + 1;
369
371
  return _this8.db.find({
370
372
  selector: selectorWithFilters((_this8$currentFilter = _this8.currentFilter) !== null && _this8$currentFilter !== void 0 ? _this8$currentFilter : []),
@@ -1 +1 @@
1
- {"version":3,"file":"PouchStorageTable.js","names":["PouchDB","PouchDBFind","Operator","FilterOperator","Type","FilterType","Log","PromiseUtils","log","module","DB_PREFIX","plugin","makePouchFilter","type","value","in","contains","$regex","RegExp","concat","toString","inIgnoreCase","eq","$eq","notEq","$ne","greaterThan","$gt","greaterThanOrEqualTo","$gte","lessThan","$lt","lessThanOrEqualTo","$lte","startsWith","Error","makePouchSelectorFromConfig","config","filterItems","filterOperators","filter","i","length","filterItem","columnName","newFilter","filterOperator","and","$and","or","$or","selectorWithFilters","filters","arguments","undefined","map","name","id","sortWithConfigs","sorts","_sorts$map","reverse","sort","column","direction","PouchStorageTable","constructor","databaseName","dbOptions","_defineProperty","Map","db","_remote","listenForChanges","createIndex","index","fields","refreshInfo","changes","live","since","include_docs","on","dbUpdate","bind","onUpdate","callback","listeners","other","onItemUpdate","listener","itemListeners","has","set","get","refreshItem","close","size","currentSize","viewport","currentViewport","setReversed","reversed","currentReverse","currentViewportData","refreshData","setViewport","setSorts","currentSort","setFilters","currentFilter","data","getViewportData","_this","_asyncToGenerator","_this$viewportUpdateP","viewportUpdatePromise","Promise","resolve","items","offset","put","item","_this2","newItem","_objectSpread","_id","sendUpdate","_this$currentViewport","sendItemUpdate","event","debug","doc","fetchInfo","selector","_this3","find","_this4","_this4$infoUpdateProm","_this4$currentFilter","infoUpdatePromise","cancel","makeCancelable","findResult","docs","e","isCanceled","error","fetchViewportData","_this5","skip","top","limit","bottom","then","_this6","_this6$currentFilter","_this6$viewportUpdate","viewportData","_this7","getSnapshot","sortedRanges","_this8","itemMap","all","_ref2","_ref","_this8$currentFilter","from","to","findSnapshotResult","_x","apply"],"sources":["../src/PouchStorageTable.ts"],"sourcesContent":["import PouchDB from 'pouchdb-browser';\nimport PouchDBFind from 'pouchdb-find';\nimport {\n Operator as FilterOperator,\n Type as FilterType,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport {\n type FilterConfig,\n type FilterValue,\n type SortConfig,\n type StorageItem,\n type StorageTable,\n type StorageListenerRemover,\n type StorageTableViewport,\n type StorageItemListener,\n type StorageSnapshot,\n type ViewportData,\n type ViewportUpdateCallback,\n type IndexRange,\n} from '@deephaven/storage';\nimport {\n type CancelablePromise,\n type OnlyOneProp,\n PromiseUtils,\n} from '@deephaven/utils';\n\nconst log = Log.module('PouchStorageTable');\n\nconst DB_PREFIX = 'Deephaven.';\n\nPouchDB.plugin(PouchDBFind);\n\nexport interface PouchStorageItem {\n _id?: string;\n}\n\nexport type PouchDBSort = Array<\n string | { [propName: string]: 'asc' | 'desc' }\n>;\n\ntype PouchFilter = OnlyOneProp<\n Pick<\n PouchDB.Find.ConditionOperators,\n '$eq' | '$ne' | '$gt' | '$gte' | '$lt' | '$lte' | '$regex'\n >\n>;\n\nexport function makePouchFilter(\n type: string,\n value: FilterValue | FilterValue[]\n): PouchFilter {\n switch (type) {\n case FilterType.in:\n case FilterType.contains:\n return { $regex: new RegExp(`${value}`).toString() };\n case FilterType.inIgnoreCase:\n return { $regex: new RegExp(`${value}`, 'i').toString() };\n case FilterType.eq:\n return { $eq: value };\n case FilterType.notEq:\n return { $ne: value };\n case FilterType.greaterThan:\n return { $gt: value };\n case FilterType.greaterThanOrEqualTo:\n return { $gte: value };\n case FilterType.lessThan:\n return { $lt: value };\n case FilterType.lessThanOrEqualTo:\n return { $lte: value };\n case FilterType.startsWith:\n return { $regex: new RegExp(`^${value}.*`).toString() };\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n\nfunction makePouchSelectorFromConfig(\n config: FilterConfig\n): PouchDB.Find.Selector {\n const { filterItems, filterOperators } = config;\n let filter = null;\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { columnName, type, value } = filterItem;\n const newFilter = { [columnName]: makePouchFilter(type, value) };\n if (i === 0) {\n filter = newFilter;\n } else if (filter !== null && i - 1 < filterOperators.length) {\n const filterOperator = filterOperators[i - 1];\n if (filterOperator === FilterOperator.and) {\n filter = { $and: [filter, newFilter] };\n } else if (filterOperator === FilterOperator.or) {\n filter = { $or: [filter, newFilter] };\n } else {\n throw new Error(\n `Unexpected filter operator ${filterOperator}, ${newFilter}`\n );\n }\n }\n }\n if (filter == null) {\n throw new Error(`Invalid filter config ${config}`);\n }\n return filter;\n}\n\nfunction selectorWithFilters(\n filters: FilterConfig[] = []\n): PouchDB.Find.Selector {\n return {\n $and: [\n ...filters.map(filter => makePouchSelectorFromConfig(filter)),\n { name: { $gt: null } },\n { id: { $gt: null } },\n ],\n };\n}\n\nfunction sortWithConfigs(\n sorts: SortConfig[] | null,\n reverse = false\n): PouchDBSort {\n return [\n { id: reverse ? 'desc' : 'asc' },\n ...(sorts?.map(sort => ({ [sort.column]: sort.direction })) ?? []),\n ];\n}\n\nexport class PouchStorageTable<T extends StorageItem = StorageItem>\n implements StorageTable<T>\n{\n protected db: PouchDB.Database<T & PouchStorageItem>;\n\n changes?: PouchDB.Core.Changes<T & PouchStorageItem>;\n\n private listeners: ViewportUpdateCallback<T>[] = [];\n\n private itemListeners: Map<string, StorageItemListener<T>[]> = new Map();\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private currentReverse = false;\n\n private currentFilter: FilterConfig[] | null = null;\n\n private currentSort: SortConfig[] | null = null;\n\n private infoUpdatePromise?: CancelablePromise<\n PouchDB.Find.FindResponse<T & PouchStorageItem>\n >;\n\n private viewportUpdatePromise?: CancelablePromise<ViewportData<T>>;\n\n private currentViewportData?: ViewportData<T>;\n\n constructor(\n databaseName: string,\n dbOptions?: PouchDB.Configuration.DatabaseConfiguration\n ) {\n this.db = new PouchDB<T & PouchStorageItem>(\n `${DB_PREFIX}${databaseName}`,\n dbOptions\n );\n\n // Need to set `_remote` to false to remove deprecation warnings: https://github.com/pouchdb/pouchdb/issues/6106\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-underscore-dangle\n (this.db as any)._remote = false;\n\n this.listenForChanges();\n\n this.db.createIndex({ index: { fields: ['id', 'name'] } });\n\n this.refreshInfo();\n }\n\n /**\n * Listen for db changes. This can be cancelled by calling\n * `this.changes?.cancel()`\n */\n listenForChanges(): void {\n this.changes = this.db\n .changes({ live: true, since: 'now', include_docs: true })\n .on('change', this.dbUpdate.bind(this));\n }\n\n onUpdate(callback: ViewportUpdateCallback<T>): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n onItemUpdate(\n id: string,\n listener: StorageItemListener<T>\n ): StorageListenerRemover {\n if (!this.itemListeners.has(id)) {\n this.itemListeners.set(id, []);\n }\n\n this.itemListeners.set(id, [\n ...(this.itemListeners.get(id) as StorageItemListener<T>[]),\n listener,\n ]);\n\n this.refreshItem(id);\n\n return () => {\n this.itemListeners.set(\n id,\n (this.itemListeners.get(id) as StorageItemListener<T>[]).filter(\n other => other !== listener\n )\n );\n };\n }\n\n close(): void {\n this.listeners = [];\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n get viewport(): StorageTableViewport | undefined {\n return this.currentViewport;\n }\n\n setReversed(reversed: boolean): void {\n this.currentReverse = reversed;\n\n this.currentViewportData = undefined;\n\n this.refreshData();\n }\n\n setViewport(viewport: StorageTableViewport | undefined): void {\n this.currentViewport = viewport;\n\n this.refreshInfo();\n\n this.refreshData();\n }\n\n setSorts(config: SortConfig[] | null): void {\n this.currentSort = config;\n\n this.currentViewportData = undefined;\n\n this.refreshData();\n }\n\n setFilters(config: FilterConfig[] | null): void {\n this.currentFilter = config;\n\n this.currentViewportData = undefined;\n\n this.refreshInfo();\n\n this.refreshData();\n }\n\n get data(): ViewportData<T> | undefined {\n return this.currentViewportData;\n }\n\n async getViewportData(): Promise<ViewportData<T>> {\n if (!this.viewportUpdatePromise) {\n this.refreshData();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n async put(item: T): Promise<T> {\n // Put the item ID in both the _id and the id slot\n // PouchDB uses _id everywhere, StorageTable just uses `id` though\n const newItem = {\n ...item,\n _id: item.id,\n } as T;\n\n await this.db.put(newItem);\n\n return newItem;\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 private sendItemUpdate(item: T): void {\n const listeners = this.itemListeners.get(item.id);\n if (listeners !== undefined) {\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](item);\n }\n }\n }\n\n protected dbUpdate(event: PouchDB.Core.ChangesResponseChange<T>): void {\n log.debug('Update received', event);\n\n this.refreshInfo();\n\n if (event.doc !== undefined) {\n this.sendItemUpdate(event.doc);\n }\n\n this.refreshData();\n }\n\n /**\n * Fetch infor for a given selector.\n * @param selector\n */\n protected async fetchInfo(\n selector: PouchDB.Find.Selector\n ): Promise<PouchDB.Find.FindResponse<T & PouchStorageItem>> {\n return this.db.find({\n selector,\n fields: [],\n });\n }\n\n private async refreshInfo(): Promise<void> {\n try {\n this.infoUpdatePromise?.cancel();\n\n this.infoUpdatePromise = PromiseUtils.makeCancelable(\n this.fetchInfo(selectorWithFilters(this.currentFilter ?? []))\n );\n\n const findResult = await this.infoUpdatePromise;\n\n this.currentSize = findResult.docs.length;\n\n this.sendUpdate();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refreshInfo', e);\n throw e;\n }\n }\n }\n\n /**\n * Fetch data for the given viewport, selector, and sort.\n * @param viewport\n * @param selector\n * @param sort\n */\n protected async fetchViewportData(\n viewport: StorageTableViewport,\n selector: PouchDB.Find.Selector,\n sort: PouchDBSort\n ): Promise<ViewportData<T>> {\n return this.db\n .find({\n selector,\n skip: viewport.top,\n limit: viewport.bottom - viewport.top + 1,\n sort,\n fields: ['id', 'name'],\n })\n .then(findResult => ({\n items: findResult.docs,\n offset: viewport.top,\n }));\n }\n\n private async refreshData(): Promise<ViewportData<T> | undefined> {\n if (!this.currentViewport) {\n return;\n }\n\n try {\n const selector = selectorWithFilters(this.currentFilter ?? []);\n const sort = sortWithConfigs(this.currentSort, this.currentReverse);\n\n this.viewportUpdatePromise?.cancel();\n\n this.viewportUpdatePromise = PromiseUtils.makeCancelable(\n this.fetchViewportData(this.currentViewport, selector, sort)\n );\n\n const viewportData = await this.viewportUpdatePromise;\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refreshData', e);\n throw e;\n }\n }\n }\n\n async refreshItem(id: string): Promise<T | undefined> {\n const findResult = await this.db.find({\n selector: { id },\n limit: 1,\n });\n\n const item = findResult.docs[0];\n\n if (item !== undefined) {\n this.sendItemUpdate(item);\n }\n\n return item;\n }\n\n async getSnapshot(sortedRanges: IndexRange[]): Promise<StorageSnapshot<T>> {\n const itemMap = new Map();\n\n const sort: PouchDBSort = [{ id: this.currentReverse ? 'desc' : 'asc' }];\n\n await Promise.all(\n sortedRanges.map(async ([from, to]) => {\n const limit = to - from + 1;\n return this.db\n .find({\n selector: selectorWithFilters(this.currentFilter ?? []),\n skip: from,\n limit,\n sort,\n fields: ['id', 'name'],\n })\n .then(findSnapshotResult => {\n for (let i = 0; i < limit; i += 1) {\n const index = from + i;\n itemMap.set(index, findSnapshotResult.docs[i]);\n }\n });\n })\n );\n\n return itemMap;\n }\n}\n\nexport default PouchStorageTable;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PouchStorageTable.js","names":["PouchDB","PouchDBFind","Operator","FilterOperator","Type","FilterType","Log","PromiseUtils","log","module","DB_PREFIX","plugin","makePouchFilter","type","value","in","contains","$regex","RegExp","concat","toString","inIgnoreCase","eq","$eq","notEq","$ne","greaterThan","$gt","greaterThanOrEqualTo","$gte","lessThan","$lt","lessThanOrEqualTo","$lte","startsWith","Error","makePouchSelectorFromConfig","config","filterItems","filterOperators","filter","i","length","filterItem","columnName","newFilter","filterOperator","and","$and","or","$or","selectorWithFilters","filters","arguments","undefined","map","name","id","sortWithConfigs","sorts","_sorts$map","reverse","sort","column","direction","PouchStorageTable","constructor","databaseName","dbOptions","_defineProperty","Map","db","_remote","listenForChanges","createIndex","index","fields","refreshInfo","changes","live","since","include_docs","on","dbUpdate","bind","onUpdate","callback","listeners","other","onItemUpdate","listener","itemListeners","has","set","get","refreshItem","close","size","currentSize","viewport","currentViewport","setReversed","reversed","currentReverse","currentViewportData","refreshData","setViewport","setSorts","currentSort","setFilters","currentFilter","data","getViewportData","_this","_asyncToGenerator","_this$viewportUpdateP","viewportUpdatePromise","Promise","resolve","items","offset","put","item","_this2","newItem","_objectSpread","_id","sendUpdate","_this$currentViewport","sendItemUpdate","event","debug","doc","fetchInfo","selector","_this3","find","_this4","_this4$infoUpdateProm","_this4$currentFilter","infoUpdatePromise","cancel","makeCancelable","findResult","docs","e","isCanceled","error","fetchViewportData","_this5","skip","top","limit","bottom","then","_this6","_this6$currentFilter","_this6$viewportUpdate","viewportData","_this7","getSnapshot","sortedRanges","_this8","itemMap","all","_ref2","_ref","_this8$currentFilter","_ref3","_slicedToArray","from","to","findSnapshotResult","_x","apply"],"sources":["../src/PouchStorageTable.ts"],"sourcesContent":["import PouchDB from 'pouchdb-browser';\nimport PouchDBFind from 'pouchdb-find';\nimport {\n Operator as FilterOperator,\n Type as FilterType,\n} from '@deephaven/filters';\nimport Log from '@deephaven/log';\nimport {\n type FilterConfig,\n type FilterValue,\n type SortConfig,\n type StorageItem,\n type StorageTable,\n type StorageListenerRemover,\n type StorageTableViewport,\n type StorageItemListener,\n type StorageSnapshot,\n type ViewportData,\n type ViewportUpdateCallback,\n type IndexRange,\n} from '@deephaven/storage';\nimport {\n type CancelablePromise,\n type OnlyOneProp,\n PromiseUtils,\n} from '@deephaven/utils';\n\nconst log = Log.module('PouchStorageTable');\n\nconst DB_PREFIX = 'Deephaven.';\n\nPouchDB.plugin(PouchDBFind);\n\nexport interface PouchStorageItem {\n _id?: string;\n}\n\nexport type PouchDBSort = Array<\n string | { [propName: string]: 'asc' | 'desc' }\n>;\n\ntype PouchFilter = OnlyOneProp<\n Pick<\n PouchDB.Find.ConditionOperators,\n '$eq' | '$ne' | '$gt' | '$gte' | '$lt' | '$lte' | '$regex'\n >\n>;\n\nexport function makePouchFilter(\n type: string,\n value: FilterValue | FilterValue[]\n): PouchFilter {\n switch (type) {\n case FilterType.in:\n case FilterType.contains:\n return { $regex: new RegExp(`${value}`).toString() };\n case FilterType.inIgnoreCase:\n return { $regex: new RegExp(`${value}`, 'i').toString() };\n case FilterType.eq:\n return { $eq: value };\n case FilterType.notEq:\n return { $ne: value };\n case FilterType.greaterThan:\n return { $gt: value };\n case FilterType.greaterThanOrEqualTo:\n return { $gte: value };\n case FilterType.lessThan:\n return { $lt: value };\n case FilterType.lessThanOrEqualTo:\n return { $lte: value };\n case FilterType.startsWith:\n return { $regex: new RegExp(`^${value}.*`).toString() };\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n\nfunction makePouchSelectorFromConfig(\n config: FilterConfig\n): PouchDB.Find.Selector {\n const { filterItems, filterOperators } = config;\n let filter = null;\n for (let i = 0; i < filterItems.length; i += 1) {\n const filterItem = filterItems[i];\n const { columnName, type, value } = filterItem;\n const newFilter = { [columnName]: makePouchFilter(type, value) };\n if (i === 0) {\n filter = newFilter;\n } else if (filter !== null && i - 1 < filterOperators.length) {\n const filterOperator = filterOperators[i - 1];\n if (filterOperator === FilterOperator.and) {\n filter = { $and: [filter, newFilter] };\n } else if (filterOperator === FilterOperator.or) {\n filter = { $or: [filter, newFilter] };\n } else {\n throw new Error(\n `Unexpected filter operator ${filterOperator}, ${newFilter}`\n );\n }\n }\n }\n if (filter == null) {\n throw new Error(`Invalid filter config ${config}`);\n }\n return filter;\n}\n\nfunction selectorWithFilters(\n filters: FilterConfig[] = []\n): PouchDB.Find.Selector {\n return {\n $and: [\n ...filters.map(filter => makePouchSelectorFromConfig(filter)),\n { name: { $gt: null } },\n { id: { $gt: null } },\n ],\n };\n}\n\nfunction sortWithConfigs(\n sorts: SortConfig[] | null,\n reverse = false\n): PouchDBSort {\n return [\n { id: reverse ? 'desc' : 'asc' },\n ...(sorts?.map(sort => ({ [sort.column]: sort.direction })) ?? []),\n ];\n}\n\nexport class PouchStorageTable<T extends StorageItem = StorageItem>\n implements StorageTable<T>\n{\n protected db: PouchDB.Database<T & PouchStorageItem>;\n\n changes?: PouchDB.Core.Changes<T & PouchStorageItem>;\n\n private listeners: ViewportUpdateCallback<T>[] = [];\n\n private itemListeners: Map<string, StorageItemListener<T>[]> = new Map();\n\n private currentSize = 0;\n\n private currentViewport?: StorageTableViewport;\n\n private currentReverse = false;\n\n private currentFilter: FilterConfig[] | null = null;\n\n private currentSort: SortConfig[] | null = null;\n\n private infoUpdatePromise?: CancelablePromise<\n PouchDB.Find.FindResponse<T & PouchStorageItem>\n >;\n\n private viewportUpdatePromise?: CancelablePromise<ViewportData<T>>;\n\n private currentViewportData?: ViewportData<T>;\n\n constructor(\n databaseName: string,\n dbOptions?: PouchDB.Configuration.DatabaseConfiguration\n ) {\n this.db = new PouchDB<T & PouchStorageItem>(\n `${DB_PREFIX}${databaseName}`,\n dbOptions\n );\n\n // Need to set `_remote` to false to remove deprecation warnings: https://github.com/pouchdb/pouchdb/issues/6106\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-underscore-dangle\n (this.db as any)._remote = false;\n\n this.listenForChanges();\n\n this.db.createIndex({ index: { fields: ['id', 'name'] } });\n\n this.refreshInfo();\n }\n\n /**\n * Listen for db changes. This can be cancelled by calling\n * `this.changes?.cancel()`\n */\n listenForChanges(): void {\n this.changes = this.db\n .changes({ live: true, since: 'now', include_docs: true })\n .on('change', this.dbUpdate.bind(this));\n }\n\n onUpdate(callback: ViewportUpdateCallback<T>): StorageListenerRemover {\n this.listeners = [...this.listeners, callback];\n return () => {\n this.listeners = this.listeners.filter(other => other !== callback);\n };\n }\n\n onItemUpdate(\n id: string,\n listener: StorageItemListener<T>\n ): StorageListenerRemover {\n if (!this.itemListeners.has(id)) {\n this.itemListeners.set(id, []);\n }\n\n this.itemListeners.set(id, [\n ...(this.itemListeners.get(id) as StorageItemListener<T>[]),\n listener,\n ]);\n\n this.refreshItem(id);\n\n return () => {\n this.itemListeners.set(\n id,\n (this.itemListeners.get(id) as StorageItemListener<T>[]).filter(\n other => other !== listener\n )\n );\n };\n }\n\n close(): void {\n this.listeners = [];\n }\n\n get size(): number {\n return this.currentSize;\n }\n\n get viewport(): StorageTableViewport | undefined {\n return this.currentViewport;\n }\n\n setReversed(reversed: boolean): void {\n this.currentReverse = reversed;\n\n this.currentViewportData = undefined;\n\n this.refreshData();\n }\n\n setViewport(viewport: StorageTableViewport | undefined): void {\n this.currentViewport = viewport;\n\n this.refreshInfo();\n\n this.refreshData();\n }\n\n setSorts(config: SortConfig[] | null): void {\n this.currentSort = config;\n\n this.currentViewportData = undefined;\n\n this.refreshData();\n }\n\n setFilters(config: FilterConfig[] | null): void {\n this.currentFilter = config;\n\n this.currentViewportData = undefined;\n\n this.refreshInfo();\n\n this.refreshData();\n }\n\n get data(): ViewportData<T> | undefined {\n return this.currentViewportData;\n }\n\n async getViewportData(): Promise<ViewportData<T>> {\n if (!this.viewportUpdatePromise) {\n this.refreshData();\n }\n return (\n this.viewportUpdatePromise ?? Promise.resolve({ items: [], offset: 0 })\n );\n }\n\n async put(item: T): Promise<T> {\n // Put the item ID in both the _id and the id slot\n // PouchDB uses _id everywhere, StorageTable just uses `id` though\n const newItem = {\n ...item,\n _id: item.id,\n } as T;\n\n await this.db.put(newItem);\n\n return newItem;\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 private sendItemUpdate(item: T): void {\n const listeners = this.itemListeners.get(item.id);\n if (listeners !== undefined) {\n for (let i = 0; i < listeners.length; i += 1) {\n listeners[i](item);\n }\n }\n }\n\n protected dbUpdate(event: PouchDB.Core.ChangesResponseChange<T>): void {\n log.debug('Update received', event);\n\n this.refreshInfo();\n\n if (event.doc !== undefined) {\n this.sendItemUpdate(event.doc);\n }\n\n this.refreshData();\n }\n\n /**\n * Fetch infor for a given selector.\n * @param selector\n */\n protected async fetchInfo(\n selector: PouchDB.Find.Selector\n ): Promise<PouchDB.Find.FindResponse<T & PouchStorageItem>> {\n return this.db.find({\n selector,\n fields: [],\n });\n }\n\n private async refreshInfo(): Promise<void> {\n try {\n this.infoUpdatePromise?.cancel();\n\n this.infoUpdatePromise = PromiseUtils.makeCancelable(\n this.fetchInfo(selectorWithFilters(this.currentFilter ?? []))\n );\n\n const findResult = await this.infoUpdatePromise;\n\n this.currentSize = findResult.docs.length;\n\n this.sendUpdate();\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refreshInfo', e);\n throw e;\n }\n }\n }\n\n /**\n * Fetch data for the given viewport, selector, and sort.\n * @param viewport\n * @param selector\n * @param sort\n */\n protected async fetchViewportData(\n viewport: StorageTableViewport,\n selector: PouchDB.Find.Selector,\n sort: PouchDBSort\n ): Promise<ViewportData<T>> {\n return this.db\n .find({\n selector,\n skip: viewport.top,\n limit: viewport.bottom - viewport.top + 1,\n sort,\n fields: ['id', 'name'],\n })\n .then(findResult => ({\n items: findResult.docs,\n offset: viewport.top,\n }));\n }\n\n private async refreshData(): Promise<ViewportData<T> | undefined> {\n if (!this.currentViewport) {\n return;\n }\n\n try {\n const selector = selectorWithFilters(this.currentFilter ?? []);\n const sort = sortWithConfigs(this.currentSort, this.currentReverse);\n\n this.viewportUpdatePromise?.cancel();\n\n this.viewportUpdatePromise = PromiseUtils.makeCancelable(\n this.fetchViewportData(this.currentViewport, selector, sort)\n );\n\n const viewportData = await this.viewportUpdatePromise;\n\n this.currentViewportData = viewportData;\n\n this.sendUpdate();\n\n return viewportData;\n } catch (e) {\n if (!PromiseUtils.isCanceled(e)) {\n log.error('Unable to refreshData', e);\n throw e;\n }\n }\n }\n\n async refreshItem(id: string): Promise<T | undefined> {\n const findResult = await this.db.find({\n selector: { id },\n limit: 1,\n });\n\n const item = findResult.docs[0];\n\n if (item !== undefined) {\n this.sendItemUpdate(item);\n }\n\n return item;\n }\n\n async getSnapshot(sortedRanges: IndexRange[]): Promise<StorageSnapshot<T>> {\n const itemMap = new Map();\n\n const sort: PouchDBSort = [{ id: this.currentReverse ? 'desc' : 'asc' }];\n\n await Promise.all(\n sortedRanges.map(async ([from, to]) => {\n const limit = to - from + 1;\n return this.db\n .find({\n selector: selectorWithFilters(this.currentFilter ?? []),\n skip: from,\n limit,\n sort,\n fields: ['id', 'name'],\n })\n .then(findSnapshotResult => {\n for (let i = 0; i < limit; i += 1) {\n const index = from + i;\n itemMap.set(index, findSnapshotResult.docs[i]);\n }\n });\n })\n );\n\n return itemMap;\n }\n}\n\nexport default PouchStorageTable;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/pouch-storage",
3
- "version": "1.22.1-alpha-pivot-builder.0+fb17c45",
3
+ "version": "1.22.2-alpha-pivot-builder.0+e2a2077",
4
4
  "description": "Deephaven Storage based on PouchDB",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -21,11 +21,11 @@
21
21
  "build:babel": "babel ./src --out-dir ./dist --extensions \".ts,.tsx,.js,.jsx\" --source-maps --root-mode upward"
22
22
  },
23
23
  "dependencies": {
24
- "@deephaven/console": "^1.22.1-alpha-pivot-builder.0+fb17c45",
25
- "@deephaven/filters": "^1.22.1-alpha-pivot-builder.0+fb17c45",
26
- "@deephaven/log": "^1.22.1-alpha-pivot-builder.0+fb17c45",
27
- "@deephaven/storage": "^1.22.1-alpha-pivot-builder.0+fb17c45",
28
- "@deephaven/utils": "^1.22.1-alpha-pivot-builder.0+fb17c45",
24
+ "@deephaven/console": "^1.22.2-alpha-pivot-builder.0+e2a2077",
25
+ "@deephaven/filters": "^1.22.2-alpha-pivot-builder.0+e2a2077",
26
+ "@deephaven/log": "^1.22.2-alpha-pivot-builder.0+e2a2077",
27
+ "@deephaven/storage": "^1.22.2-alpha-pivot-builder.0+e2a2077",
28
+ "@deephaven/utils": "^1.22.2-alpha-pivot-builder.0+e2a2077",
29
29
  "lodash.throttle": "^4.1.1",
30
30
  "pouchdb-browser": "^7.3.0",
31
31
  "pouchdb-find": "^7.3.0"
@@ -40,5 +40,5 @@
40
40
  "publishConfig": {
41
41
  "access": "public"
42
42
  },
43
- "gitHead": "fb17c45114ceb8f1ab670ac20dac74f8e8bd65fb"
43
+ "gitHead": "e2a207700c2da1195164130643e7c5e5b223485a"
44
44
  }