@vuu-ui/vuu-utils 0.8.92 → 0.8.94

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/cjs/DataWindow.js CHANGED
@@ -3,16 +3,21 @@
3
3
  var rangeUtils = require('./range-utils.js');
4
4
  var columnUtils = require('./column-utils.js');
5
5
 
6
+ var __defProp = Object.defineProperty;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
9
  const { KEY } = columnUtils.metadataKeys;
7
10
  class DataWindow {
8
11
  constructor({ from, to }) {
9
- this.rowCount = 0;
10
- this.setRowCount = (rowCount) => {
12
+ __publicField(this, "range");
13
+ __publicField(this, "data");
14
+ __publicField(this, "rowCount", 0);
15
+ __publicField(this, "setRowCount", (rowCount) => {
11
16
  if (rowCount < this.data.length) {
12
17
  this.data.length = rowCount;
13
18
  }
14
19
  this.rowCount = rowCount;
15
- };
20
+ });
16
21
  this.range = new rangeUtils.WindowRange(from, to);
17
22
  this.data = new Array(to - from);
18
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":["metadataKeys","WindowRange"],"mappings":"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"}
1
+ {"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":["metadataKeys","WindowRange"],"mappings":";;;;;;;;AA0BA,MAAM,EAAE,KAAQ,GAAAA,wBAAA,CAAA;AAIT,MAAM,UAAW,CAAA;AAAA,EAItB,WAAY,CAAA,EAAE,IAAM,EAAA,EAAA,EAAiB,EAAA;AAHrC,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AACR,IAAO,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;AACP,IAAA,aAAA,CAAA,IAAA,EAAO,UAAW,EAAA,CAAA,CAAA,CAAA;AASlB,IAAA,aAAA,CAAA,IAAA,EAAA,aAAA,EAAc,CAAC,QAAqB,KAAA;AAElC,MAAI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,MAAS,GAAA,QAAA,CAAA;AAAA,OACrB;AACA,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAAA,KAClB,CAAA,CAAA;AAbE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAIC,sBAAY,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAErC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA,CAAA;AAAA,GAGjC;AAAA;AAAA,EAWA,IAAI,IAAe,EAAA;AACjB,IAAM,MAAA,CAAC,KAAK,CAAI,GAAA,IAAA,CAAA;AAChB,IAAI,IAAA,IAAA,CAAK,aAAc,CAAA,KAAK,CAAG,EAAA;AAC7B,MAAM,MAAA,aAAA,GAAgB,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AACzC,MAAA,MAAM,QAAW,GAAA,IAAA,CAAK,IAAK,CAAA,aAAa,CAAM,KAAA,KAAA,CAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,CAAI,GAAA,IAAA,CAAA;AAC3B,MAAO,OAAA,QAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,WAAW,KAAe,EAAA;AACxB,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAC9B,IAAA,IAAA,CAAK,KAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,IAAK,OACpC,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CACjC,GAAA,KAAA,CAAA,CAAA;AAAA,GACN;AAAA,EAEA,SAAS,GAAa,EAAA;AACpB,IAAO,OAAA,IAAA,CAAK,KAAK,IAAK,CAAA,CAAC,QAAQ,GAAI,CAAA,GAAG,MAAM,GAAG,CAAA,CAAA;AAAA,GACjD;AAAA,EAEA,cAAc,KAAe,EAAA;AAC3B,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,IAAK,SAAS,IAAK,CAAA,QAAA,CAAA;AAAA,GACrD;AAAA,EAEA,QAAA,CAAS,MAAc,EAAY,EAAA;AAEjC,IAAA,IAAI,SAAS,IAAK,CAAA,KAAA,CAAM,QAAQ,EAAO,KAAA,IAAA,CAAK,MAAM,EAAI,EAAA;AACpD,MAAM,MAAA,CAAC,aAAa,SAAS,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAA;AAC5D,MAAA,MAAM,OAAU,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA,CAAA;AACnC,MAAA,KAAA,IAAS,CAAI,GAAA,WAAA,EAAa,CAAI,GAAA,SAAA,EAAW,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC9B,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,QAAQ,CAAI,GAAA,IAAA,CAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,IAAA,CAAA;AAAA,SACnB;AAAA,OACF;AACA,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA,CAAA;AACZ,MAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,MAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KAClB;AAAA,GACF;AAAA,EAEA,OAAA,CAAQ,MAAc,EAAY,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,KAAK,KAAM,CAAA,IAAA,CAAA;AAC1B,IAAA,MAAM,QAAQ,IAAO,GAAA,MAAA,CAAA;AACrB,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,CAAA,EAAA,GAAK,SAAS,CAAG,EAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA;AACvD,IAAO,OAAA,IAAA,CAAK,KAAK,KAAK,CAAA,KAAM,UAAa,IAAK,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,KAAA,CAAA,CAAA;AAAA,GAC9D;AAAA,EAEA,OAAA,CAAQ,MAAc,EAAmB,EAAA;AACvC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAI,IAAK,CAAA,KAAA,CAAA;AAClC,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,OAAO,UAAU,CAAA,CAAA;AACjD,IAAA,MAAM,YAAY,IAAK,CAAA,GAAA,CAAI,KAAK,UAAY,EAAA,IAAA,CAAK,YAAY,EAAE,CAAA,CAAA;AAC/D,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AAAA,GAC/C;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataSourceContext.js","sources":["../../src/context-definitions/DataSourceContext.tsx"],"sourcesContent":["import type { ServerAPI } from \"@vuu-ui/vuu-data-remote\";\nimport type {\n DataSource,\n DataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataSourceContextProps {\n isLocalData: boolean;\n VuuDataSource: DataSourceConstructor;\n vuuModuleNames?: string[];\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\">\n >;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataSourceProvider has been installed\");\n};\n\nclass NullDataSource {\n constructor() {\n throw Error(\"no DataSourceProvider has been installed\");\n }\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSource as any,\n});\n"],"names":["createContext"],"mappings":";;;;AAoBA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AACxD,CAAA,CAAA;AAEA,MAAM,cAAe,CAAA;AAAA,EACnB,WAAc,GAAA;AACZ,IAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AAAA,GACxD;AACF,CAAA;AAEO,MAAM,oBAAoBA,mBAAsC,CAAA;AAAA,EACrE,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA,cAAA;AACjB,CAAC;;;;"}
1
+ {"version":3,"file":"DataSourceContext.js","sources":["../../src/context-definitions/DataSourceContext.tsx"],"sourcesContent":["import type {\n DataSource,\n DataSourceConstructorProps,\n ServerAPI,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataSourceContextProps {\n isLocalData: boolean;\n VuuDataSource: DataSourceConstructor;\n vuuModuleNames?: string[];\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\">\n >;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataSourceProvider has been installed\");\n};\n\nclass NullDataSource {\n constructor() {\n throw Error(\"no DataSourceProvider has been installed\");\n }\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSource as any,\n});\n"],"names":["createContext"],"mappings":";;;;AAoBA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AACxD,CAAA,CAAA;AAEA,MAAM,cAAe,CAAA;AAAA,EACnB,WAAc,GAAA;AACZ,IAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AAAA,GACxD;AACF,CAAA;AAEO,MAAM,oBAAoBA,mBAAsC,CAAA;AAAA,EACrE,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA,cAAA;AACjB,CAAC;;;;"}
@@ -133,7 +133,6 @@ const hasFilter = (config) => config?.filterSpec !== void 0 && config.filterSpec
133
133
  const hasSort = (config) => config?.sort !== void 0 && Array.isArray(config.sort?.sortDefs) && config.sort.sortDefs.length > 0;
134
134
  const isTypeaheadSuggestionProvider = (source) => typeof source["getTypeaheadSuggestions"] === "function";
135
135
  const isTableSchemaMessage = (message) => message.type === "TABLE_META_RESP";
136
- const isConnectionStatusMessage = (msg) => msg.type === "connection-status";
137
136
  const isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
138
137
  const messageHasResult = (msg) => typeof msg.result !== "undefined";
139
138
  const isErrorResponse = (response) => response?.type === "VP_EDIT_RPC_REJECT";
@@ -179,7 +178,6 @@ exports.hasGroupBy = hasGroupBy;
179
178
  exports.hasSort = hasSort;
180
179
  exports.isConfigChanged = isConfigChanged;
181
180
  exports.isConnectionQualityMetrics = isConnectionQualityMetrics;
182
- exports.isConnectionStatusMessage = isConnectionStatusMessage;
183
181
  exports.isErrorResponse = isErrorResponse;
184
182
  exports.isFilterChanged = isFilterChanged;
185
183
  exports.isGroupByChanged = isGroupByChanged;
@@ -1 +1 @@
1
- {"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"./column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage,\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuUIMessageInRPCEditReject =>\n response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const withConfigDefaults = (\n config: DataSourceConfig,\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"./column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuUIMessageInRPCEditReject =>\n response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const withConfigDefaults = (\n config: DataSourceConfig,\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
@@ -2,12 +2,15 @@
2
2
 
3
3
  var loggingUtils = require('./logging-utils.js');
4
4
 
5
+ var __defProp = Object.defineProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
8
  const { debug, debugEnabled } = loggingUtils.logger("range-monitor");
6
9
  class RangeMonitor {
7
10
  constructor(source) {
8
11
  this.source = source;
9
- this.range = { from: 0, to: 0 };
10
- this.timestamp = 0;
12
+ __publicField(this, "range", { from: 0, to: 0 });
13
+ __publicField(this, "timestamp", 0);
11
14
  }
12
15
  isSet() {
13
16
  return this.timestamp !== 0;
@@ -1 +1 @@
1
- {"version":3,"file":"debug-utils.js","sources":["../src/debug-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { logger } from \"./logging-utils\";\n\nconst { debug, debugEnabled } = logger(\"range-monitor\");\n\nexport class RangeMonitor {\n public range: VuuRange = { from: 0, to: 0 };\n public timestamp = 0;\n\n constructor(private source: string) {}\n\n isSet() {\n return this.timestamp !== 0;\n }\n set({ from, to }: VuuRange) {\n const { timestamp } = this;\n this.range.from = from;\n this.range.to = to;\n this.timestamp = performance.now();\n if (timestamp) {\n debugEnabled &&\n debug(\n `<${this.source}> [${from}-${to}], ${(\n this.timestamp - timestamp\n ).toFixed(0)} ms elapsed`,\n );\n } else {\n return 0;\n }\n }\n}\n"],"names":["logger"],"mappings":";;;;AAGA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAIA,oBAAO,eAAe,CAAA,CAAA;AAE/C,MAAM,YAAa,CAAA;AAAA,EAIxB,YAAoB,MAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAHpB,IAAA,IAAA,CAAO,KAAkB,GAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE,EAAA,CAAA;AAC1C,IAAA,IAAA,CAAO,SAAY,GAAA,CAAA,CAAA;AAAA,GAEkB;AAAA,EAErC,KAAQ,GAAA;AACN,IAAA,OAAO,KAAK,SAAc,KAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,GAAI,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC1B,IAAM,MAAA,EAAE,WAAc,GAAA,IAAA,CAAA;AACtB,IAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAChB,IAAK,IAAA,CAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AACjC,IAAA,IAAI,SAAW,EAAA;AACb,MACE,YAAA,IAAA,KAAA;AAAA,QACE,CAAI,CAAA,EAAA,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAA,CAC7B,IAAK,CAAA,SAAA,GAAY,SACjB,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,OACd,CAAA;AAAA,KACG,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"debug-utils.js","sources":["../src/debug-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { logger } from \"./logging-utils\";\n\nconst { debug, debugEnabled } = logger(\"range-monitor\");\n\nexport class RangeMonitor {\n public range: VuuRange = { from: 0, to: 0 };\n public timestamp = 0;\n\n constructor(private source: string) {}\n\n isSet() {\n return this.timestamp !== 0;\n }\n set({ from, to }: VuuRange) {\n const { timestamp } = this;\n this.range.from = from;\n this.range.to = to;\n this.timestamp = performance.now();\n if (timestamp) {\n debugEnabled &&\n debug(\n `<${this.source}> [${from}-${to}], ${(\n this.timestamp - timestamp\n ).toFixed(0)} ms elapsed`,\n );\n } else {\n return 0;\n }\n }\n}\n"],"names":["logger"],"mappings":";;;;;;;AAGA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAIA,oBAAO,eAAe,CAAA,CAAA;AAE/C,MAAM,YAAa,CAAA;AAAA,EAIxB,YAAoB,MAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAHpB,IAAA,aAAA,CAAA,IAAA,EAAO,OAAkB,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE,EAAA,CAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAO,WAAY,EAAA,CAAA,CAAA,CAAA;AAAA,GAEkB;AAAA,EAErC,KAAQ,GAAA;AACN,IAAA,OAAO,KAAK,SAAc,KAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,GAAI,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC1B,IAAM,MAAA,EAAE,WAAc,GAAA,IAAA,CAAA;AACtB,IAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAChB,IAAK,IAAA,CAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AACjC,IAAA,IAAI,SAAW,EAAA;AACb,MACE,YAAA,IAAA,KAAA;AAAA,QACE,CAAI,CAAA,EAAA,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAA,CAC7B,IAAK,CAAA,SAAA,GAAY,SACjB,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,OACd,CAAA;AAAA,KACG,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF;;;;"}
package/cjs/index.js CHANGED
@@ -40,6 +40,7 @@ var index = require('./nanoid/index.js');
40
40
  var reactUtils = require('./react-utils.js');
41
41
  var roundDecimal = require('./round-decimal.js');
42
42
  var perfUtils = require('./perf-utils.js');
43
+ var promiseUtils = require('./promise-utils.js');
43
44
  var protocolMessageUtils = require('./protocol-message-utils.js');
44
45
  var rangeUtils = require('./range-utils.js');
45
46
  var rowUtils = require('./row-utils.js');
@@ -178,7 +179,6 @@ exports.hasGroupBy = datasourceUtils.hasGroupBy;
178
179
  exports.hasSort = datasourceUtils.hasSort;
179
180
  exports.isConfigChanged = datasourceUtils.isConfigChanged;
180
181
  exports.isConnectionQualityMetrics = datasourceUtils.isConnectionQualityMetrics;
181
- exports.isConnectionStatusMessage = datasourceUtils.isConnectionStatusMessage;
182
182
  exports.isErrorResponse = datasourceUtils.isErrorResponse;
183
183
  exports.isFilterChanged = datasourceUtils.isFilterChanged;
184
184
  exports.isGroupByChanged = datasourceUtils.isGroupByChanged;
@@ -295,6 +295,7 @@ exports.asReactElements = reactUtils.asReactElements;
295
295
  exports.roundDecimal = roundDecimal.roundDecimal;
296
296
  exports.debounce = perfUtils.debounce;
297
297
  exports.throttle = perfUtils.throttle;
298
+ exports.DeferredPromise = promiseUtils.DeferredPromise;
298
299
  exports.isActionMessage = protocolMessageUtils.isActionMessage;
299
300
  exports.isEditCellRequest = protocolMessageUtils.isEditCellRequest;
300
301
  exports.isOpenDialogAction = protocolMessageUtils.isOpenDialogAction;
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/cjs/keyset.js CHANGED
@@ -1,10 +1,14 @@
1
1
  'use strict';
2
2
 
3
+ var __defProp = Object.defineProperty;
4
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3
6
  const EMPTY = [];
4
7
  class KeySet {
5
8
  constructor(range) {
6
- this.keys = /* @__PURE__ */ new Map();
7
- this.nextKeyValue = 0;
9
+ __publicField(this, "keys", /* @__PURE__ */ new Map());
10
+ __publicField(this, "nextKeyValue", 0);
11
+ __publicField(this, "range");
8
12
  this.range = range;
9
13
  this.init(range);
10
14
  }
package/cjs/keyset.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var __typeError = (msg) => {
4
+ throw TypeError(msg);
5
+ };
6
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
7
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
8
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
10
+ var _promise, _resolve, _reject, _resolved;
11
+ class DeferredPromise {
12
+ constructor() {
13
+ __privateAdd(this, _promise);
14
+ __privateAdd(this, _resolve, () => console.log("resolve was not set"));
15
+ __privateAdd(this, _reject, () => console.log("reject was not set"));
16
+ __privateAdd(this, _resolved, false);
17
+ __privateSet(this, _promise, new Promise((resolve, reject) => {
18
+ __privateSet(this, _resolve, resolve);
19
+ __privateSet(this, _reject, reject);
20
+ }));
21
+ }
22
+ get promise() {
23
+ return __privateGet(this, _promise);
24
+ }
25
+ get isResolved() {
26
+ return __privateGet(this, _resolved);
27
+ }
28
+ resolve(value) {
29
+ __privateSet(this, _resolved, true);
30
+ return __privateGet(this, _resolve).call(this, value);
31
+ }
32
+ get reject() {
33
+ return __privateGet(this, _reject);
34
+ }
35
+ }
36
+ _promise = new WeakMap();
37
+ _resolve = new WeakMap();
38
+ _reject = new WeakMap();
39
+ _resolved = new WeakMap();
40
+
41
+ exports.DeferredPromise = DeferredPromise;
42
+ //# sourceMappingURL=promise-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-utils.js","sources":["../src/promise-utils.ts"],"sourcesContent":["export class DeferredPromise<T = unknown> {\n #promise: Promise<T>;\n #resolve: (value: T) => void = () => console.log(\"resolve was not set\");\n #reject: (err: unknown) => void = () => console.log(\"reject was not set\");\n #resolved = false;\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolve = resolve;\n this.#reject = reject;\n });\n }\n\n get promise() {\n return this.#promise;\n }\n\n get isResolved() {\n return this.#resolved;\n }\n\n resolve(value: T) {\n this.#resolved = true;\n return this.#resolve(value);\n }\n\n get reject() {\n return this.#reject;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAAA,IAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,CAAA;AAAO,MAAM,eAA6B,CAAA;AAAA,EAMxC,WAAc,GAAA;AALd,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACA,IAA+B,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,qBAAqB,CAAA,CAAA,CAAA;AACtE,IAAkC,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA,CAAA;AACxE,IAAY,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;AAGV,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAI,OAAW,CAAA,CAAC,SAAS,MAAW,KAAA;AAClD,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAChB,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA,CAAA;AAAA,KAChB,CAAA,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,QAAQ,KAAU,EAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,IAAA,CAAA,CAAA;AACjB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,UAAL,IAAc,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GACvB;AAAA,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AA5BE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -1,5 +1,8 @@
1
1
  'use strict';
2
2
 
3
+ var __defProp = Object.defineProperty;
4
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3
6
  const NULL_RANGE = { from: 0, to: 0 };
4
7
  const rangesAreSame = (r1, r2) => {
5
8
  return r1?.from === r2?.from && r1?.to === r2?.to;
@@ -49,6 +52,8 @@ const rangeNewItems = ({ from: from1, to: to1 }, newRange) => {
49
52
  };
50
53
  class WindowRange {
51
54
  constructor(from, to) {
55
+ __publicField(this, "from");
56
+ __publicField(this, "to");
52
57
  this.from = from;
53
58
  this.to = to;
54
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
package/esm/DataWindow.js CHANGED
@@ -1,16 +1,21 @@
1
1
  import { WindowRange } from './range-utils.js';
2
2
  import { metadataKeys } from './column-utils.js';
3
3
 
4
+ var __defProp = Object.defineProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
7
  const { KEY } = metadataKeys;
5
8
  class DataWindow {
6
9
  constructor({ from, to }) {
7
- this.rowCount = 0;
8
- this.setRowCount = (rowCount) => {
10
+ __publicField(this, "range");
11
+ __publicField(this, "data");
12
+ __publicField(this, "rowCount", 0);
13
+ __publicField(this, "setRowCount", (rowCount) => {
9
14
  if (rowCount < this.data.length) {
10
15
  this.data.length = rowCount;
11
16
  }
12
17
  this.rowCount = rowCount;
13
- };
18
+ });
14
19
  this.range = new WindowRange(from, to);
15
20
  this.data = new Array(to - from);
16
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataSourceContext.js","sources":["../../src/context-definitions/DataSourceContext.tsx"],"sourcesContent":["import type { ServerAPI } from \"@vuu-ui/vuu-data-remote\";\nimport type {\n DataSource,\n DataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataSourceContextProps {\n isLocalData: boolean;\n VuuDataSource: DataSourceConstructor;\n vuuModuleNames?: string[];\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\">\n >;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataSourceProvider has been installed\");\n};\n\nclass NullDataSource {\n constructor() {\n throw Error(\"no DataSourceProvider has been installed\");\n }\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSource as any,\n});\n"],"names":[],"mappings":";;AAoBA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AACxD,CAAA,CAAA;AAEA,MAAM,cAAe,CAAA;AAAA,EACnB,WAAc,GAAA;AACZ,IAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AAAA,GACxD;AACF,CAAA;AAEO,MAAM,oBAAoB,aAAsC,CAAA;AAAA,EACrE,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA,cAAA;AACjB,CAAC;;;;"}
1
+ {"version":3,"file":"DataSourceContext.js","sources":["../../src/context-definitions/DataSourceContext.tsx"],"sourcesContent":["import type {\n DataSource,\n DataSourceConstructorProps,\n ServerAPI,\n} from \"@vuu-ui/vuu-data-types\";\nimport { createContext } from \"react\";\n\nexport type DataSourceConstructor = {\n new (props: DataSourceConstructorProps): DataSource;\n};\n\nexport interface DataSourceContextProps {\n isLocalData: boolean;\n VuuDataSource: DataSourceConstructor;\n vuuModuleNames?: string[];\n getServerAPI: () => Promise<\n Pick<ServerAPI, \"getTableList\" | \"getTableSchema\">\n >;\n}\n\nconst getServerAPI = () => {\n throw Error(\"no DataSourceProvider has been installed\");\n};\n\nclass NullDataSource {\n constructor() {\n throw Error(\"no DataSourceProvider has been installed\");\n }\n}\n\nexport const DataSourceContext = createContext<DataSourceContextProps>({\n isLocalData: false,\n getServerAPI,\n VuuDataSource: NullDataSource as any,\n});\n"],"names":[],"mappings":";;AAoBA,MAAM,eAAe,MAAM;AACzB,EAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AACxD,CAAA,CAAA;AAEA,MAAM,cAAe,CAAA;AAAA,EACnB,WAAc,GAAA;AACZ,IAAA,MAAM,MAAM,0CAA0C,CAAA,CAAA;AAAA,GACxD;AACF,CAAA;AAEO,MAAM,oBAAoB,aAAsC,CAAA;AAAA,EACrE,WAAa,EAAA,KAAA;AAAA,EACb,YAAA;AAAA,EACA,aAAe,EAAA,cAAA;AACjB,CAAC;;;;"}
@@ -131,7 +131,6 @@ const hasFilter = (config) => config?.filterSpec !== void 0 && config.filterSpec
131
131
  const hasSort = (config) => config?.sort !== void 0 && Array.isArray(config.sort?.sortDefs) && config.sort.sortDefs.length > 0;
132
132
  const isTypeaheadSuggestionProvider = (source) => typeof source["getTypeaheadSuggestions"] === "function";
133
133
  const isTableSchemaMessage = (message) => message.type === "TABLE_META_RESP";
134
- const isConnectionStatusMessage = (msg) => msg.type === "connection-status";
135
134
  const isConnectionQualityMetrics = (msg) => msg.type === "connection-metrics";
136
135
  const messageHasResult = (msg) => typeof msg.result !== "undefined";
137
136
  const isErrorResponse = (response) => response?.type === "VP_EDIT_RPC_REJECT";
@@ -168,5 +167,5 @@ const dataSourceRowToEntity = (row, columnMap) => Object.entries(columnMap).redu
168
167
  {}
169
168
  );
170
169
 
171
- export { NO_CONFIG_CHANGES, NoFilter, NoSort, dataSourceRowToEntity, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchemaMessage, isTypeaheadSuggestionProvider, isViewportMessage, isVisualLinkMessage, messageHasDataRows, messageHasResult, vanillaConfig, withConfigDefaults };
170
+ export { NO_CONFIG_CHANGES, NoFilter, NoSort, dataSourceRowToEntity, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchemaMessage, isTypeaheadSuggestionProvider, isViewportMessage, isVisualLinkMessage, messageHasDataRows, messageHasResult, vanillaConfig, withConfigDefaults };
172
171
  //# sourceMappingURL=datasource-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n ConnectionStatusMessage,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"./column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionStatusMessage = (\n msg: object | ConnectionStatusMessage,\n): msg is ConnectionStatusMessage =>\n (msg as ConnectionStatusMessage).type === \"connection-status\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuUIMessageInRPCEditReject =>\n response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const withConfigDefaults = (\n config: DataSourceConfig,\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasource-utils.js","sources":["../src/datasource-utils.ts"],"sourcesContent":["import {\n ConnectionQualityMetrics,\n DataSourceCallbackMessage,\n DataSourceConfig,\n DataSourceDataMessage,\n DataSourceRow,\n RpcResponse,\n TypeaheadSuggestionProvider,\n VuuUIMessageIn,\n VuuUIMessageInRPC,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInTableMeta,\n VuuUIMessageOutViewport,\n WithFilter,\n WithFullConfig,\n WithGroupBy,\n WithSort,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n LinkDescriptorWithLabel,\n VuuCreateVisualLink,\n VuuFilter,\n VuuRemoveVisualLink,\n VuuRowDataItemType,\n VuuSort,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap } from \"./column-utils\";\n\nexport const NoFilter: VuuFilter = { filter: \"\" };\nexport const NoSort: VuuSort = { sortDefs: [] };\n\nexport const vanillaConfig: WithFullConfig = {\n aggregations: [],\n columns: [],\n filterSpec: NoFilter,\n groupBy: [],\n sort: NoSort,\n};\n\nexport type DataSourceConfigChanges = {\n aggregationsChanged: boolean;\n columnsChanged: boolean;\n filterChanged: boolean;\n groupByChanged: boolean;\n sortChanged: boolean;\n visualLinkChanged: boolean;\n};\n\nexport type MaybeDataSourceConfigChanges = DataSourceConfigChanges & {\n noChanges: boolean;\n};\n\ntype DataConfigPredicate = (\n config: DataSourceConfig,\n newConfig: DataSourceConfig,\n) => boolean;\n\nconst equivalentAggregations: DataConfigPredicate = (\n { aggregations: agg1 },\n { aggregations: agg2 },\n) =>\n (agg1 === undefined && agg2?.length === 0) ||\n (agg2 === undefined && agg1?.length === 0);\n\nconst equivalentColumns: DataConfigPredicate = (\n { columns: cols1 },\n { columns: cols2 },\n) =>\n (cols1 === undefined && cols2?.length === 0) ||\n (cols2 === undefined && cols1?.length === 0);\n\nconst equivalentFilter: DataConfigPredicate = (\n { filterSpec: f1 },\n { filterSpec: f2 },\n) =>\n (f1 === undefined && f2?.filter === \"\") ||\n (f2 === undefined && f1?.filter === \"\");\n\nconst equivalentGroupBy: DataConfigPredicate = (\n { groupBy: val1 },\n { groupBy: val2 },\n) =>\n (val1 === undefined && val2?.length === 0) ||\n (val2 === undefined && val1?.length === 0);\n\nconst equivalentSort: DataConfigPredicate = ({ sort: s1 }, { sort: s2 }) =>\n (s1 === undefined && s2?.sortDefs.length === 0) ||\n (s2 === undefined && s1?.sortDefs.length === 0);\n\nconst exactlyTheSame = (a: unknown, b: unknown) => {\n if (a === b) {\n return true;\n } else if (a === undefined && b === undefined) {\n return true;\n } else {\n return false;\n }\n};\n\nconst isAggregationsChanged: DataConfigPredicate = (config, newConfig) => {\n const { aggregations: agg1 } = config;\n const { aggregations: agg2 } = newConfig;\n if (exactlyTheSame(agg1, agg2) || equivalentAggregations(config, newConfig)) {\n return false;\n } else if (agg1 === undefined || agg2 === undefined) {\n return true;\n } else if (agg1.length !== agg2.length) {\n return true;\n }\n return agg1.some(\n ({ column, aggType }, i) =>\n column !== agg2[i].column || aggType !== agg2[i].aggType,\n );\n};\n\nconst isColumnsChanged: DataConfigPredicate = (config, newConfig) => {\n const { columns: cols1 } = config;\n const { columns: cols2 } = newConfig;\n\n if (exactlyTheSame(cols1, cols2) || equivalentColumns(config, newConfig)) {\n return false;\n } else if (cols1 === undefined || cols2 === undefined) {\n return true;\n } else if (cols1?.length !== cols2?.length) {\n return true;\n }\n return cols1.some((column, i) => column !== cols2?.[i]);\n};\n\nexport const isFilterChanged: DataConfigPredicate = (c1, c2) => {\n if (equivalentFilter(c1, c2)) {\n return false;\n } else {\n return c1.filterSpec?.filter !== c2.filterSpec?.filter;\n }\n};\n\nexport const isGroupByChanged: DataConfigPredicate = (config, newConfig) => {\n const { groupBy: g1 } = config;\n const { groupBy: g2 } = newConfig;\n if (exactlyTheSame(g1, g2) || equivalentGroupBy(config, newConfig)) {\n return false;\n } else if (g1 === undefined || g2 === undefined) {\n return true;\n } else if (g1?.length !== g2?.length) {\n return true;\n }\n return g1.some((column, i) => column !== g2?.[i]);\n};\n\nconst isSortChanged: DataConfigPredicate = (config, newConfig) => {\n const { sort: s1 } = config;\n const { sort: s2 } = newConfig;\n if (exactlyTheSame(s1, s2) || equivalentSort(config, newConfig)) {\n return false;\n } else if (s1 === undefined || s2 === undefined) {\n return true;\n } else if (s1?.sortDefs.length !== s2?.sortDefs.length) {\n return true;\n }\n return s1.sortDefs.some(\n ({ column, sortType }, i) =>\n column !== s2.sortDefs[i].column || sortType !== s2.sortDefs[i].sortType,\n );\n};\n\nconst isVisualLinkChanged: DataConfigPredicate = (\n { visualLink: v1 },\n { visualLink: v2 },\n) => {\n if (exactlyTheSame(v1, v2)) {\n return false;\n }\n if (v1 === undefined || v2 === undefined) {\n return true;\n }\n return v1.label !== v2.label || v2.parentVpId !== v2.parentVpId;\n};\n\nexport const NO_CONFIG_CHANGES: MaybeDataSourceConfigChanges = {\n aggregationsChanged: false,\n columnsChanged: false,\n filterChanged: false,\n groupByChanged: false,\n noChanges: true,\n sortChanged: false,\n visualLinkChanged: false,\n};\n\nexport const isConfigChanged = (\n config: DataSourceConfig | undefined,\n newConfig: DataSourceConfig | undefined,\n): MaybeDataSourceConfigChanges => {\n if (exactlyTheSame(config, newConfig)) {\n return NO_CONFIG_CHANGES;\n }\n\n if (config === undefined && newConfig == undefined) {\n return NO_CONFIG_CHANGES;\n } else if (config === undefined) {\n return isConfigChanged({}, newConfig);\n } else if (newConfig === undefined) {\n return isConfigChanged(config, {});\n }\n\n const aggregationsChanged = isAggregationsChanged(config, newConfig);\n const columnsChanged = isColumnsChanged(config, newConfig);\n const filterChanged = isFilterChanged(config, newConfig);\n const groupByChanged = isGroupByChanged(config, newConfig);\n const sortChanged = isSortChanged(config, newConfig);\n const visualLinkChanged = isVisualLinkChanged(config, newConfig);\n\n const noChanges = !(\n aggregationsChanged ||\n columnsChanged ||\n filterChanged ||\n groupByChanged ||\n sortChanged ||\n visualLinkChanged\n );\n\n return {\n aggregationsChanged,\n columnsChanged,\n filterChanged,\n groupByChanged,\n noChanges,\n sortChanged,\n visualLinkChanged,\n };\n};\n\nexport const hasGroupBy = (config?: DataSourceConfig): config is WithGroupBy =>\n config !== undefined &&\n config.groupBy !== undefined &&\n config.groupBy.length > 0;\n\nexport const hasFilter = (config?: DataSourceConfig): config is WithFilter =>\n config?.filterSpec !== undefined && config.filterSpec.filter.length > 0;\n\nexport const hasSort = (config?: DataSourceConfig): config is WithSort =>\n config?.sort !== undefined &&\n Array.isArray(config.sort?.sortDefs) &&\n config.sort.sortDefs.length > 0;\n\nexport const isTypeaheadSuggestionProvider = (\n source: unknown,\n): source is TypeaheadSuggestionProvider =>\n typeof (source as TypeaheadSuggestionProvider)[\"getTypeaheadSuggestions\"] ===\n \"function\";\n\nexport const isTableSchemaMessage = (\n message: VuuUIMessageIn,\n): message is VuuUIMessageInTableMeta => message.type === \"TABLE_META_RESP\";\n\nexport const isConnectionQualityMetrics = (\n msg: object,\n): msg is ConnectionQualityMetrics =>\n (msg as ConnectionQualityMetrics).type === \"connection-metrics\";\n\nexport const messageHasResult = (msg: object): msg is VuuUIMessageInRPC =>\n typeof (msg as VuuUIMessageInRPC).result !== \"undefined\";\n\nexport const isErrorResponse = (\n response?: Partial<RpcResponse>,\n): response is VuuUIMessageInRPCEditReject =>\n response?.type === \"VP_EDIT_RPC_REJECT\";\n\nexport const isVisualLinkMessage = (\n msg: unknown,\n): msg is VuuCreateVisualLink | VuuRemoveVisualLink =>\n (msg as VuuCreateVisualLink).type.endsWith(\"_VISUAL_LINK\");\n\nexport const isViewportMessage = (\n msg: object,\n): msg is VuuUIMessageOutViewport => \"viewport\" in msg;\n\nexport type DataSourceDataMessageWithRows = Omit<\n DataSourceDataMessage,\n \"rows\"\n> & {\n rows: DataSourceRow[];\n};\nexport const messageHasDataRows = (\n message: DataSourceCallbackMessage,\n): message is DataSourceDataMessageWithRows =>\n message.type === \"viewport-update\" && Array.isArray(message.rows);\n\nexport const withConfigDefaults = (\n config: DataSourceConfig,\n): WithFullConfig & { visualLink?: LinkDescriptorWithLabel } => {\n if (\n config.aggregations &&\n config.columns &&\n config.filterSpec &&\n config.groupBy &&\n config.sort\n ) {\n return config as WithFullConfig;\n } else {\n const {\n aggregations = [],\n columns = [],\n filterSpec: filter = { filter: \"\" },\n groupBy = [],\n sort = { sortDefs: [] },\n visualLink,\n } = config;\n\n return {\n aggregations,\n columns,\n filterSpec: filter,\n groupBy,\n sort,\n visualLink,\n };\n }\n};\n\nexport type Entity = Record<string, VuuRowDataItemType>;\n// export type EntityKey<T extends Entity = Entity> = Extract<keyof T, \"string\">;\n\nexport const dataSourceRowToEntity = <T extends Entity = Entity>(\n row: DataSourceRow,\n columnMap: ColumnMap,\n) =>\n Object.entries(columnMap).reduce(\n (entity, [name, index]) => ({\n ...entity,\n [name]: row[index],\n }),\n {} as T,\n );\n"],"names":[],"mappings":"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"}
@@ -1,11 +1,14 @@
1
1
  import { logger } from './logging-utils.js';
2
2
 
3
+ var __defProp = Object.defineProperty;
4
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
3
6
  const { debug, debugEnabled } = logger("range-monitor");
4
7
  class RangeMonitor {
5
8
  constructor(source) {
6
9
  this.source = source;
7
- this.range = { from: 0, to: 0 };
8
- this.timestamp = 0;
10
+ __publicField(this, "range", { from: 0, to: 0 });
11
+ __publicField(this, "timestamp", 0);
9
12
  }
10
13
  isSet() {
11
14
  return this.timestamp !== 0;
@@ -1 +1 @@
1
- {"version":3,"file":"debug-utils.js","sources":["../src/debug-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { logger } from \"./logging-utils\";\n\nconst { debug, debugEnabled } = logger(\"range-monitor\");\n\nexport class RangeMonitor {\n public range: VuuRange = { from: 0, to: 0 };\n public timestamp = 0;\n\n constructor(private source: string) {}\n\n isSet() {\n return this.timestamp !== 0;\n }\n set({ from, to }: VuuRange) {\n const { timestamp } = this;\n this.range.from = from;\n this.range.to = to;\n this.timestamp = performance.now();\n if (timestamp) {\n debugEnabled &&\n debug(\n `<${this.source}> [${from}-${to}], ${(\n this.timestamp - timestamp\n ).toFixed(0)} ms elapsed`,\n );\n } else {\n return 0;\n }\n }\n}\n"],"names":[],"mappings":";;AAGA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAI,OAAO,eAAe,CAAA,CAAA;AAE/C,MAAM,YAAa,CAAA;AAAA,EAIxB,YAAoB,MAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAHpB,IAAA,IAAA,CAAO,KAAkB,GAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE,EAAA,CAAA;AAC1C,IAAA,IAAA,CAAO,SAAY,GAAA,CAAA,CAAA;AAAA,GAEkB;AAAA,EAErC,KAAQ,GAAA;AACN,IAAA,OAAO,KAAK,SAAc,KAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,GAAI,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC1B,IAAM,MAAA,EAAE,WAAc,GAAA,IAAA,CAAA;AACtB,IAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAChB,IAAK,IAAA,CAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AACjC,IAAA,IAAI,SAAW,EAAA;AACb,MACE,YAAA,IAAA,KAAA;AAAA,QACE,CAAI,CAAA,EAAA,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAA,CAC7B,IAAK,CAAA,SAAA,GAAY,SACjB,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,OACd,CAAA;AAAA,KACG,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"debug-utils.js","sources":["../src/debug-utils.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { logger } from \"./logging-utils\";\n\nconst { debug, debugEnabled } = logger(\"range-monitor\");\n\nexport class RangeMonitor {\n public range: VuuRange = { from: 0, to: 0 };\n public timestamp = 0;\n\n constructor(private source: string) {}\n\n isSet() {\n return this.timestamp !== 0;\n }\n set({ from, to }: VuuRange) {\n const { timestamp } = this;\n this.range.from = from;\n this.range.to = to;\n this.timestamp = performance.now();\n if (timestamp) {\n debugEnabled &&\n debug(\n `<${this.source}> [${from}-${to}], ${(\n this.timestamp - timestamp\n ).toFixed(0)} ms elapsed`,\n );\n } else {\n return 0;\n }\n }\n}\n"],"names":[],"mappings":";;;;;AAGA,MAAM,EAAE,KAAA,EAAO,YAAa,EAAA,GAAI,OAAO,eAAe,CAAA,CAAA;AAE/C,MAAM,YAAa,CAAA;AAAA,EAIxB,YAAoB,MAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAHpB,IAAA,aAAA,CAAA,IAAA,EAAO,OAAkB,EAAA,EAAE,IAAM,EAAA,CAAA,EAAG,IAAI,CAAE,EAAA,CAAA,CAAA;AAC1C,IAAA,aAAA,CAAA,IAAA,EAAO,WAAY,EAAA,CAAA,CAAA,CAAA;AAAA,GAEkB;AAAA,EAErC,KAAQ,GAAA;AACN,IAAA,OAAO,KAAK,SAAc,KAAA,CAAA,CAAA;AAAA,GAC5B;AAAA,EACA,GAAI,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC1B,IAAM,MAAA,EAAE,WAAc,GAAA,IAAA,CAAA;AACtB,IAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,IAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAChB,IAAK,IAAA,CAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AACjC,IAAA,IAAI,SAAW,EAAA;AACb,MACE,YAAA,IAAA,KAAA;AAAA,QACE,CAAI,CAAA,EAAA,IAAA,CAAK,MAAM,CAAA,GAAA,EAAM,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,GAAA,EAAA,CAC7B,IAAK,CAAA,SAAA,GAAY,SACjB,EAAA,OAAA,CAAQ,CAAC,CAAC,CAAA,WAAA,CAAA;AAAA,OACd,CAAA;AAAA,KACG,MAAA;AACL,MAAO,OAAA,CAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF;;;;"}
package/esm/index.js CHANGED
@@ -8,7 +8,7 @@ export { MEASURES } from './common-types.js';
8
8
  export { importCSS } from './css-utils.js';
9
9
  export { DOWN1, DOWN2, UP1, UP2, getMovingValueDirection, isValidNumber, shallowEquals } from './data-utils.js';
10
10
  export { isViewportMenusAction, isVisualLinkCreatedAction, isVisualLinkRemovedAction, isVisualLinksAction, isVuuFeatureAction } from './datasource-action-utils.js';
11
- export { NO_CONFIG_CHANGES, NoFilter, NoSort, dataSourceRowToEntity, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isConnectionStatusMessage, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchemaMessage, isTypeaheadSuggestionProvider, isViewportMessage, isVisualLinkMessage, messageHasDataRows, messageHasResult, vanillaConfig, withConfigDefaults } from './datasource-utils.js';
11
+ export { NO_CONFIG_CHANGES, NoFilter, NoSort, dataSourceRowToEntity, hasFilter, hasGroupBy, hasSort, isConfigChanged, isConnectionQualityMetrics, isErrorResponse, isFilterChanged, isGroupByChanged, isTableSchemaMessage, isTypeaheadSuggestionProvider, isViewportMessage, isVisualLinkMessage, messageHasDataRows, messageHasResult, vanillaConfig, withConfigDefaults } from './datasource-utils.js';
12
12
  export { formatDate, getDateFormatter } from './date/formatter.js';
13
13
  export { dateTimeLabelByType, isDatePattern, isDateTimePattern, isTimePattern, supportedDateTimePatterns } from './date/types.js';
14
14
  export { toCalendarDate } from './date/date-utils.js';
@@ -38,6 +38,7 @@ export { uuid } from './nanoid/index.js';
38
38
  export { asReactElements } from './react-utils.js';
39
39
  export { roundDecimal } from './round-decimal.js';
40
40
  export { debounce, throttle } from './perf-utils.js';
41
+ export { DeferredPromise } from './promise-utils.js';
41
42
  export { isActionMessage, isEditCellRequest, isOpenDialogAction, isOpenSessionTableDialogMessage, isRequestResponse, isSessionTable, isSessionTableActionMessage, isViewportRpcRequest, isVuuMenuRpcRequest, viewportRpcRequest, vuuAddRowRequest, vuuDeleteRowRequest, vuuEditCellRequest } from './protocol-message-utils.js';
42
43
  export { NULL_RANGE, WindowRange, getFullRange, rangeNewItems, rangesAreSame, resetRange, withinRange } from './range-utils.js';
43
44
  export { actualRowPositioning, asDataSourceRowObject, getIndexFromRowElement, getRowElementAtIndex, virtualRowPositioning } from './row-utils.js';
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/esm/keyset.js CHANGED
@@ -1,8 +1,12 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1
4
  const EMPTY = [];
2
5
  class KeySet {
3
6
  constructor(range) {
4
- this.keys = /* @__PURE__ */ new Map();
5
- this.nextKeyValue = 0;
7
+ __publicField(this, "keys", /* @__PURE__ */ new Map());
8
+ __publicField(this, "nextKeyValue", 0);
9
+ __publicField(this, "range");
6
10
  this.range = range;
7
11
  this.init(range);
8
12
  }
package/esm/keyset.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keyset.js","sources":["../src/keyset.ts"],"sourcesContent":["import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst EMPTY: number[] = [];\nexport class KeySet {\n private keys = new Map<number, number>();\n private nextKeyValue = 0;\n private range: VuuRange;\n\n constructor(range: VuuRange) {\n this.range = range;\n this.init(range);\n }\n\n public next(free: number[] = EMPTY): number {\n if (free.length > 0) {\n return free.shift() as number;\n } else {\n return this.nextKeyValue++;\n }\n }\n\n private init({ from, to }: VuuRange) {\n this.keys.clear();\n this.nextKeyValue = 0;\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n const nextKeyValue = this.next();\n this.keys.set(rowIndex, nextKeyValue);\n }\n\n return true;\n }\n\n public reset(range: VuuRange) {\n const { from, to } = range;\n\n const newSize = to - from;\n const currentSize = this.range.to - this.range.from;\n this.range = range;\n\n if (currentSize > newSize) {\n // We re-initialize the range when the range size reduces, even though this will\n // potentially re-render all items.\n return this.init(range);\n }\n\n const freeKeys: number[] = [];\n\n this.keys.forEach((keyValue, rowIndex) => {\n if (rowIndex < from || rowIndex >= to) {\n freeKeys.push(keyValue);\n this.keys.delete(rowIndex);\n }\n });\n\n for (let rowIndex = from; rowIndex < to; rowIndex++) {\n if (!this.keys.has(rowIndex)) {\n const nextKeyValue = this.next(freeKeys);\n this.keys.set(rowIndex, nextKeyValue);\n }\n }\n\n return false;\n }\n\n public keyFor(rowIndex: number): number {\n const key = this.keys.get(rowIndex);\n if (key === undefined) {\n console.log(`key not found\n keys: ${this.toDebugString()}\n `);\n throw Error(`KeySet, no key found for rowIndex ${rowIndex}`);\n }\n return key;\n }\n\n public toDebugString() {\n return `${this.keys.size} keys\n${Array.from(this.keys.entries())\n .sort(([key1], [key2]) => key1 - key2)\n .map<string>(([k, v]) => `${k}=>${v}`)\n .join(\",\")}]\\n`;\n }\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,QAAkB,EAAC,CAAA;AAClB,MAAM,MAAO,CAAA;AAAA,EAKlB,YAAY,KAAiB,EAAA;AAJ7B,IAAQ,aAAA,CAAA,IAAA,EAAA,MAAA,sBAAW,GAAoB,EAAA,CAAA,CAAA;AACvC,IAAA,aAAA,CAAA,IAAA,EAAQ,cAAe,EAAA,CAAA,CAAA,CAAA;AACvB,IAAQ,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAGN,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,GACjB;AAAA,EAEO,IAAA,CAAK,OAAiB,KAAe,EAAA;AAC1C,IAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,MAAA,OAAO,KAAK,KAAM,EAAA,CAAA;AAAA,KACb,MAAA;AACL,MAAA,OAAO,IAAK,CAAA,YAAA,EAAA,CAAA;AAAA,KACd;AAAA,GACF;AAAA,EAEQ,IAAK,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AACnC,IAAA,IAAA,CAAK,KAAK,KAAM,EAAA,CAAA;AAChB,IAAA,IAAA,CAAK,YAAe,GAAA,CAAA,CAAA;AAEpB,IAAA,KAAA,IAAS,QAAW,GAAA,IAAA,EAAM,QAAW,GAAA,EAAA,EAAI,QAAY,EAAA,EAAA;AACnD,MAAM,MAAA,YAAA,GAAe,KAAK,IAAK,EAAA,CAAA;AAC/B,MAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,KACtC;AAEA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAAA,EAEO,MAAM,KAAiB,EAAA;AAC5B,IAAM,MAAA,EAAE,IAAM,EAAA,EAAA,EAAO,GAAA,KAAA,CAAA;AAErB,IAAA,MAAM,UAAU,EAAK,GAAA,IAAA,CAAA;AACrB,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,KAAM,CAAA,EAAA,GAAK,KAAK,KAAM,CAAA,IAAA,CAAA;AAC/C,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAEb,IAAA,IAAI,cAAc,OAAS,EAAA;AAGzB,MAAO,OAAA,IAAA,CAAK,KAAK,KAAK,CAAA,CAAA;AAAA,KACxB;AAEA,IAAA,MAAM,WAAqB,EAAC,CAAA;AAE5B,IAAA,IAAA,CAAK,IAAK,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAU,QAAa,KAAA;AACxC,MAAI,IAAA,QAAA,GAAW,IAAQ,IAAA,QAAA,IAAY,EAAI,EAAA;AACrC,QAAA,QAAA,CAAS,KAAK,QAAQ,CAAA,CAAA;AACtB,QAAK,IAAA,CAAA,IAAA,CAAK,OAAO,QAAQ,CAAA,CAAA;AAAA,OAC3B;AAAA,KACD,CAAA,CAAA;AAED,IAAA,KAAA,IAAS,QAAW,GAAA,IAAA,EAAM,QAAW,GAAA,EAAA,EAAI,QAAY,EAAA,EAAA;AACnD,MAAA,IAAI,CAAC,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAG,EAAA;AAC5B,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AACvC,QAAK,IAAA,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,OACtC;AAAA,KACF;AAEA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAAA,EAEO,OAAO,QAA0B,EAAA;AACtC,IAAA,MAAM,GAAM,GAAA,IAAA,CAAK,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AAClC,IAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,MAAA,OAAA,CAAQ,GAAI,CAAA,CAAA;AAAA,cACF,EAAA,IAAA,CAAK,eAAe,CAAA;AAAA,MAC7B,CAAA,CAAA,CAAA;AACD,MAAM,MAAA,KAAA,CAAM,CAAqC,kCAAA,EAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,KAC7D;AACA,IAAO,OAAA,GAAA,CAAA;AAAA,GACT;AAAA,EAEO,aAAgB,GAAA;AACrB,IAAO,OAAA,CAAA,EAAG,IAAK,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,EAC1B,KAAM,CAAA,IAAA,CAAK,IAAK,CAAA,IAAA,CAAK,SAAS,CAAA,CAC7B,IAAK,CAAA,CAAC,CAAC,IAAI,CAAG,EAAA,CAAC,IAAI,CAAM,KAAA,IAAA,GAAO,IAAI,CAAA,CACpC,GAAY,CAAA,CAAC,CAAC,CAAA,EAAG,CAAC,CAAM,KAAA,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CACpC,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,CAAA,CAAA;AAAA,GACV;AACF;;;;"}
@@ -0,0 +1,40 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var _promise, _resolve, _reject, _resolved;
9
+ class DeferredPromise {
10
+ constructor() {
11
+ __privateAdd(this, _promise);
12
+ __privateAdd(this, _resolve, () => console.log("resolve was not set"));
13
+ __privateAdd(this, _reject, () => console.log("reject was not set"));
14
+ __privateAdd(this, _resolved, false);
15
+ __privateSet(this, _promise, new Promise((resolve, reject) => {
16
+ __privateSet(this, _resolve, resolve);
17
+ __privateSet(this, _reject, reject);
18
+ }));
19
+ }
20
+ get promise() {
21
+ return __privateGet(this, _promise);
22
+ }
23
+ get isResolved() {
24
+ return __privateGet(this, _resolved);
25
+ }
26
+ resolve(value) {
27
+ __privateSet(this, _resolved, true);
28
+ return __privateGet(this, _resolve).call(this, value);
29
+ }
30
+ get reject() {
31
+ return __privateGet(this, _reject);
32
+ }
33
+ }
34
+ _promise = new WeakMap();
35
+ _resolve = new WeakMap();
36
+ _reject = new WeakMap();
37
+ _resolved = new WeakMap();
38
+
39
+ export { DeferredPromise };
40
+ //# sourceMappingURL=promise-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promise-utils.js","sources":["../src/promise-utils.ts"],"sourcesContent":["export class DeferredPromise<T = unknown> {\n #promise: Promise<T>;\n #resolve: (value: T) => void = () => console.log(\"resolve was not set\");\n #reject: (err: unknown) => void = () => console.log(\"reject was not set\");\n #resolved = false;\n\n constructor() {\n this.#promise = new Promise<T>((resolve, reject) => {\n this.#resolve = resolve;\n this.#reject = reject;\n });\n }\n\n get promise() {\n return this.#promise;\n }\n\n get isResolved() {\n return this.#resolved;\n }\n\n resolve(value: T) {\n this.#resolved = true;\n return this.#resolve(value);\n }\n\n get reject() {\n return this.#reject;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA,IAAA,QAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,CAAA;AAAO,MAAM,eAA6B,CAAA;AAAA,EAMxC,WAAc,GAAA;AALd,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AACA,IAA+B,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,qBAAqB,CAAA,CAAA,CAAA;AACtE,IAAkC,YAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAM,OAAQ,CAAA,GAAA,CAAI,oBAAoB,CAAA,CAAA,CAAA;AACxE,IAAY,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA;AAGV,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,IAAI,OAAW,CAAA,CAAC,SAAS,MAAW,KAAA;AAClD,MAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAChB,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA,CAAA;AAAA,KAChB,CAAA,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GACd;AAAA,EAEA,QAAQ,KAAU,EAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,SAAY,EAAA,IAAA,CAAA,CAAA;AACjB,IAAO,OAAA,YAAA,CAAA,IAAA,EAAK,UAAL,IAAc,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA;AAAA,GACvB;AAAA,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AA5BE,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,SAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
1
4
  const NULL_RANGE = { from: 0, to: 0 };
2
5
  const rangesAreSame = (r1, r2) => {
3
6
  return r1?.from === r2?.from && r1?.to === r2?.to;
@@ -47,6 +50,8 @@ const rangeNewItems = ({ from: from1, to: to1 }, newRange) => {
47
50
  };
48
51
  class WindowRange {
49
52
  constructor(from, to) {
53
+ __publicField(this, "from");
54
+ __publicField(this, "to");
50
55
  this.from = from;
51
56
  this.to = to;
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range-utils.js","sources":["../src/range-utils.ts"],"sourcesContent":["export interface VuuRange {\n from: number;\n to: number;\n bufferSize?: number;\n reset?: boolean;\n}\n\ninterface FromToRange {\n from: number;\n to: number;\n}\n\nexport const NULL_RANGE: VuuRange = { from: 0, to: 0 } as const;\n\nexport const rangesAreSame = (\n r1: VuuRange | undefined,\n r2: VuuRange | undefined\n) => {\n return r1?.from === r2?.from && r1?.to === r2?.to;\n};\n\nexport function getFullRange(\n { from, to }: VuuRange,\n bufferSize = 0,\n totalRowCount: number = Number.MAX_SAFE_INTEGER\n): FromToRange {\n if (from === 0 && to === 0) {\n return { from, to };\n } else if (bufferSize === 0) {\n if (totalRowCount < from) {\n return { from: 0, to: 0 };\n } else {\n return { from, to: Math.min(to, totalRowCount) };\n }\n } else if (from === 0) {\n return { from, to: Math.min(to + bufferSize, totalRowCount) };\n } else {\n const shortfallBefore = from - bufferSize < 0;\n const shortfallAfter = totalRowCount - (to + bufferSize) < 0;\n if (shortfallBefore && shortfallAfter) {\n return { from: 0, to: totalRowCount };\n } else if (shortfallBefore) {\n return { from: 0, to: to + bufferSize };\n } else if (shortfallAfter) {\n return {\n from: Math.max(0, from - bufferSize),\n to: totalRowCount,\n };\n } else {\n return { from: from - bufferSize, to: to + bufferSize };\n }\n }\n}\n\nexport function resetRange({ from, to, bufferSize = 0 }: VuuRange): VuuRange {\n return {\n from: 0,\n to: to - from,\n bufferSize,\n reset: true,\n };\n}\n\nexport const withinRange = (value: number, { from, to }: VuuRange) =>\n value >= from && value < to;\n\n// export const rangeOverlap = (\n// { from: from1, to: to1 }: VuuRange,\n// { from: from2, to: to2 }: VuuRange\n// ): VuuRange => {\n// return from2 >= to1 || to2 < from1\n// ? { from: 0, to: 0 }\n// : { from: Math.max(from2, from1), to: Math.min(to2, to1) };\n// };\n\nexport const rangeNewItems = (\n { from: from1, to: to1 }: VuuRange,\n newRange: VuuRange\n): VuuRange => {\n const { from: from2, to: to2 } = newRange;\n const noOverlap = from2 >= to1 || to2 <= from1;\n const newFullySubsumesOld = from2 < from1 && to2 > to1;\n return noOverlap || newFullySubsumesOld\n ? newRange\n : to2 > to1\n ? { from: to1, to: to2 }\n : { from: from2, to: from1 };\n};\n\nexport class WindowRange {\n public from: number;\n public to: number;\n\n constructor(from: number, to: number) {\n this.from = from;\n this.to = to;\n }\n\n public isWithin(index: number) {\n return withinRange(index, this);\n }\n\n //find the overlap of this range and a new one\n public overlap(from: number, to: number): [number, number] {\n return from >= this.to || to < this.from\n ? [0, 0]\n : [Math.max(from, this.from), Math.min(to, this.to)];\n }\n\n public copy(): WindowRange {\n return new WindowRange(this.from, this.to);\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
- "version": "0.8.92",
2
+ "version": "0.8.94",
3
3
  "author": "heswell",
4
4
  "license": "Apache-2.0",
5
5
  "types": "types/index.d.ts",
6
6
  "devDependencies": {
7
- "@vuu-ui/vuu-data-types": "0.8.92",
8
- "@vuu-ui/vuu-table-types": "0.8.92",
9
- "@vuu-ui/vuu-filter-types": "0.8.92",
10
- "@vuu-ui/vuu-protocol-types": "0.8.92"
7
+ "@vuu-ui/vuu-data-types": "0.8.94",
8
+ "@vuu-ui/vuu-table-types": "0.8.94",
9
+ "@vuu-ui/vuu-filter-types": "0.8.94",
10
+ "@vuu-ui/vuu-protocol-types": "0.8.94"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@internationalized/date": "^3.0.0",
14
- "@vuu-ui/vuu-filter-parser": "0.8.92",
14
+ "@vuu-ui/vuu-filter-parser": "0.8.94",
15
15
  "clsx": "^2.0.0",
16
16
  "react": ">=17.0.2",
17
17
  "react-dom": ">=17.0.2"
@@ -1,6 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { ServerAPI } from "@vuu-ui/vuu-data-remote";
3
- import type { DataSource, DataSourceConstructorProps } from "@vuu-ui/vuu-data-types";
2
+ import type { DataSource, DataSourceConstructorProps, ServerAPI } from "@vuu-ui/vuu-data-types";
4
3
  export type DataSourceConstructor = {
5
4
  new (props: DataSourceConstructorProps): DataSource;
6
5
  };
@@ -1,4 +1,4 @@
1
- import { ConnectionQualityMetrics, ConnectionStatusMessage, DataSourceCallbackMessage, DataSourceConfig, DataSourceDataMessage, DataSourceRow, RpcResponse, TypeaheadSuggestionProvider, VuuUIMessageIn, VuuUIMessageInRPC, VuuUIMessageInRPCEditReject, VuuUIMessageInTableMeta, VuuUIMessageOutViewport, WithFilter, WithFullConfig, WithGroupBy, WithSort } from "@vuu-ui/vuu-data-types";
1
+ import { ConnectionQualityMetrics, DataSourceCallbackMessage, DataSourceConfig, DataSourceDataMessage, DataSourceRow, RpcResponse, TypeaheadSuggestionProvider, VuuUIMessageIn, VuuUIMessageInRPC, VuuUIMessageInRPCEditReject, VuuUIMessageInTableMeta, VuuUIMessageOutViewport, WithFilter, WithFullConfig, WithGroupBy, WithSort } from "@vuu-ui/vuu-data-types";
2
2
  import { LinkDescriptorWithLabel, VuuCreateVisualLink, VuuFilter, VuuRemoveVisualLink, VuuRowDataItemType, VuuSort } from "@vuu-ui/vuu-protocol-types";
3
3
  import { ColumnMap } from "./column-utils";
4
4
  export declare const NoFilter: VuuFilter;
@@ -25,7 +25,6 @@ export declare const hasFilter: (config?: DataSourceConfig) => config is WithFil
25
25
  export declare const hasSort: (config?: DataSourceConfig) => config is WithSort;
26
26
  export declare const isTypeaheadSuggestionProvider: (source: unknown) => source is TypeaheadSuggestionProvider;
27
27
  export declare const isTableSchemaMessage: (message: VuuUIMessageIn) => message is VuuUIMessageInTableMeta;
28
- export declare const isConnectionStatusMessage: (msg: object | ConnectionStatusMessage) => msg is ConnectionStatusMessage;
29
28
  export declare const isConnectionQualityMetrics: (msg: object) => msg is ConnectionQualityMetrics;
30
29
  export declare const messageHasResult: (msg: object) => msg is VuuUIMessageInRPC;
31
30
  export declare const isErrorResponse: (response?: Partial<RpcResponse>) => response is VuuUIMessageInRPCEditReject;
package/types/index.d.ts CHANGED
@@ -37,6 +37,7 @@ export * from "./nanoid";
37
37
  export * from "./react-utils";
38
38
  export * from "./round-decimal";
39
39
  export * from "./perf-utils";
40
+ export * from "./promise-utils";
40
41
  export * from "./protocol-message-utils";
41
42
  export * from "./range-utils";
42
43
  export * from "./row-utils";
@@ -0,0 +1,8 @@
1
+ export declare class DeferredPromise<T = unknown> {
2
+ #private;
3
+ constructor();
4
+ get promise(): Promise<T>;
5
+ get isResolved(): boolean;
6
+ resolve(value: T): void;
7
+ get reject(): (err: unknown) => void;
8
+ }