@hrforte/react-pivottable 2.1.0 → 2.1.1
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/dist/PivotDataWorker.js +2 -0
- package/dist/PivotDataWorker.js.map +1 -1
- package/dist/PivotTableUI.js +33 -25
- package/dist/PivotTableUI.js.map +1 -1
- package/dist/Utilities.js +1 -1
- package/dist/Utilities.js.map +1 -1
- package/dist/pivot-worker.js +4 -8
- package/dist/pivotCompute.js +4 -8
- package/dist/pivotCompute.js.map +1 -1
- package/dist/pivottable.css +1 -1
- package/package.json +1 -1
package/dist/Utilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Utilities.js"],"names":["addSeparators","nStr","thousandsSep","decimalSep","x","String","split","x1","x2","length","rgx","test","replace","numberFormat","opts_in","defaults","digitsAfterDecimal","scaler","prefix","suffix","showOriginal","opts","Object","assign","isNaN","isFinite","scaledValue","fixedValue","toFixed","result","rx","rd","rz","naturalSort","as","bs","nas","Number","nbs","a","b","match","a1","shift","b1","sortAs","order","mapping","l_mapping","i","toLowerCase","builtInSorters","number","undefined","numA","parseFloat","numB","date","dateA","Date","dateB","getTime","string","strA","strB","stringCaseInsensitive","natural","detectDataType","values","sampleSize","Math","min","samples","slice","numberCount","dateCount","stringCount","val","parse","createSorterByType","dataType","Array","isArray","detectedType","getSort","sorters","attr","attrValues","sort","sorter","keys","usFmt","usFmtInt","usFmtPct","RECORD_PROGRESS_BATCH_SIZE","sortersHaveFunctions","some","aggregatorTemplates","count","formatter","push","value","format","uniques","fn","uniq","record","from","includes","numInputs","sum","extremes","mode","data","quantile","q","vals","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","Error","sumOverSum","num","denom","sumNum","sumDenom","fractionOf","wrapped","type","rowKey","colKey","selector","total","row","col","inner","aggregator","getAggregator","countUnique","f","listUnique","join","max","first","last","median","average","var","stdev","AggregatorCell","instances","primaryKey","forEach","key","targetKey","aggregators","Count","tpl","Sum","Average","Median","Minimum","Maximum","First","Last","locales","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","mthNamesEn","dayNamesEn","zeroPad","substr","derivers","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","p","PivotData","inputProps","props","defaultProps","PropTypes","checkPropTypes","propTypes","aggregations","normalizeAggregations","aggregationKeyLookup","agg","aggregatorName","primaryAggregation","primaryAggregatorName","aggregatorFactories","buildAggregatorFactories","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","createAggregatorCell","sorted","precomputedData","hydrateFromPrecomputed","progressHook","onRecordProcessed","recordHandler","filter","processRecord","recordsProcessed","forEachRecord","derivedAttributes","precomputed","formatSources","makeCell","serializedCell","source","outlet","hydrateTotals","target","flatKey","map","flatRowKey","k","valueFilter","criteria","callback","v","attrs","sortersArr","comparison","r","c","rowSorts","rows","sortDir","arrSort","rowOrder","colSorts","cols","colOrder","sortKeys","fromCharCode","flatColKey","aggregationKey","resolvedKey","cell","getAggregatorCell","emptyAggregator","getInstance","grouped","aggName","defaultAggregatorName","aggregationsProvided","legacyAggregatorName","fallbackAggregatorName","fallbackVals","idx","normalizedVals","label","factories","input","addRecord","getOwnPropertyNames","derived","compactRecord","j","result1","oneOfType","array","object","func","isRequired","arrayOf","shape","objectOf","bool","oneOf"],"mappings":"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","file":"Utilities.js","sourcesContent":["/* eslint-disable no-undefined */\nimport PropTypes from 'prop-types';\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS104: Avoid inline assignments\n * DS201: Simplify complex destructure assignments\n * DS203: Remove `|| {}` from converted for-own loops\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nconst addSeparators = function(nStr, thousandsSep, decimalSep) {\n const x = String(nStr).split('.');\n let x1 = x[0];\n const x2 = x.length > 1 ? decimalSep + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${thousandsSep}$2`);\n }\n return x1 + x2;\n};\n\nconst numberFormat = function(opts_in) {\n const defaults = {\n digitsAfterDecimal: 2,\n scaler: 1,\n thousandsSep: ',',\n decimalSep: '.',\n prefix: '',\n suffix: '',\n showOriginal: false,\n };\n const opts = Object.assign({}, defaults, opts_in);\n return function(x) {\n if (isNaN(x) || !isFinite(x)) {\n return '';\n }\n // Show completely original value if showOriginal is true\n if (opts.showOriginal) {\n return String(opts.scaler * x);\n }\n // When thousandsSep is empty, apply decimal formatting but skip thousand separator\n if (opts.thousandsSep === '') {\n const scaledValue = opts.scaler * x;\n const fixedValue = scaledValue.toFixed(opts.digitsAfterDecimal);\n // Apply decimal separator if needed\n const result = fixedValue.replace('.', opts.decimalSep);\n return `${opts.prefix}${result}${opts.suffix}`;\n }\n // Normal formatting with thousand separator\n const result = addSeparators(\n (opts.scaler * x).toFixed(opts.digitsAfterDecimal),\n opts.thousandsSep,\n opts.decimalSep\n );\n return `${opts.prefix}${result}${opts.suffix}`;\n };\n};\n\nconst rx = /(\\d+)|(\\D+)/g;\nconst rd = /\\d/;\nconst rz = /^0/;\nconst naturalSort = (as, bs) => {\n // nulls first\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n\n // then raw NaNs\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n\n // numbers and numbery strings group together\n const nas = Number(as);\n const nbs = Number(bs);\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n\n // within that, true numbers before numbery strings\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n\n // 'Infinity' is a textual number, so less than 'A'\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n\n // finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n let a = String(as);\n let b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!rd.test(a) || !rd.test(b)) {\n return a > b ? 1 : -1;\n }\n\n // special treatment for strings containing digits\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n const a1 = a.shift();\n const b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return a1.replace(rz, '.0') - b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n};\n\nconst sortAs = function(order) {\n const mapping = {};\n\n // sort lowercased keys similarly\n const l_mapping = {};\n for (const i in order) {\n const x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n l_mapping[x.toLowerCase()] = i;\n }\n }\n return function(a, b) {\n if (a in mapping && b in mapping) {\n return mapping[a] - mapping[b];\n } else if (a in mapping) {\n return -1;\n } else if (b in mapping) {\n return 1;\n } else if (a in l_mapping && b in l_mapping) {\n return l_mapping[a] - l_mapping[b];\n } else if (a in l_mapping) {\n return -1;\n } else if (b in l_mapping) {\n return 1;\n }\n return naturalSort(a, b);\n };\n};\n\n// Built-in sort functions for different data types\nconst builtInSorters = {\n // Number sorter - handles numeric values\n number: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const numA = typeof a === 'number' ? a : parseFloat(a);\n const numB = typeof b === 'number' ? b : parseFloat(b);\n if (isNaN(numA) && isNaN(numB)) {\n return 0;\n }\n if (isNaN(numA)) {\n return -1;\n }\n if (isNaN(numB)) {\n return 1;\n }\n return numA - numB;\n },\n\n // Date sorter - handles date values\n date: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const dateA = a instanceof Date ? a : new Date(a);\n const dateB = b instanceof Date ? b : new Date(b);\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) {\n return 0;\n }\n if (isNaN(dateA.getTime())) {\n return -1;\n }\n if (isNaN(dateB.getTime())) {\n return 1;\n }\n return dateA.getTime() - dateB.getTime();\n },\n\n // String sorter - case-sensitive\n string: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a);\n const strB = String(b);\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // String sorter - case-insensitive\n stringCaseInsensitive: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a).toLowerCase();\n const strB = String(b).toLowerCase();\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // Natural sort (default)\n natural: naturalSort,\n};\n\n// Alias for backward compatibility\n// const sorters = builtInSorters;\n\n// Auto-detect data type from sample values\nconst detectDataType = function(values) {\n if (!values || values.length === 0) {\n return 'natural';\n }\n\n const sampleSize = Math.min(10, values.length);\n const samples = values.slice(0, sampleSize);\n\n let numberCount = 0;\n let dateCount = 0;\n let stringCount = 0;\n\n for (const val of samples) {\n if (val === null || val === undefined || val === '') {\n continue;\n }\n\n // Check if it's a number\n if (typeof val === 'number' || (!isNaN(parseFloat(val)) && isFinite(val))) {\n numberCount++;\n }\n // Check if it's a date\n else if (\n val instanceof Date ||\n (!isNaN(Date.parse(val)) && String(val).match(/^\\d{4}-\\d{2}-\\d{2}/))\n ) {\n dateCount++;\n }\n // Otherwise it's a string\n else {\n stringCount++;\n }\n }\n\n // Determine the most common type\n if (numberCount > dateCount && numberCount > stringCount) {\n return 'number';\n } else if (dateCount > stringCount) {\n return 'date';\n } else if (stringCount > 0) {\n return 'string';\n }\n\n return 'natural';\n};\n\n// Create a sorter based on data type\nconst createSorterByType = function(dataType) {\n if (typeof dataType === 'function') {\n return dataType;\n }\n\n if (typeof dataType === 'string' && dataType in builtInSorters) {\n return builtInSorters[dataType];\n }\n\n // Auto-detect if dataType is an array of values\n if (Array.isArray(dataType)) {\n const detectedType = detectDataType(dataType);\n return builtInSorters[detectedType] || naturalSort;\n }\n\n return naturalSort;\n};\n\n// Get sorter for an attribute, with auto-detection support\nconst getSort = function(sorters, attr, attrValues = null) {\n if (sorters) {\n if (typeof sorters === 'function') {\n const sort = sorters(attr);\n if (typeof sort === 'function') {\n return sort;\n }\n } else if (attr in sorters) {\n const sorter = sorters[attr];\n // If it's a string (data type name) or array (sample values), create appropriate sorter\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n return createSorterByType(sorter);\n }\n // If it's already a function, use it\n if (typeof sorter === 'function') {\n return sorter;\n }\n }\n }\n\n // Auto-detect if attrValues are provided\n if (attrValues && typeof attrValues === 'object') {\n const values = Object.keys(attrValues);\n if (values.length > 0) {\n const detectedType = detectDataType(values);\n return builtInSorters[detectedType] || naturalSort;\n }\n }\n\n return naturalSort;\n};\n\n// aggregator templates default to US number formatting but this is overrideable\nconst usFmt = numberFormat();\nconst usFmtInt = numberFormat({digitsAfterDecimal: 0});\nconst usFmtPct = numberFormat({\n digitsAfterDecimal: 1,\n scaler: 100,\n suffix: '%',\n});\n\n// Emit a progress callback every N processed records without adding\n// measurable overhead to the per-record loop.\nconst RECORD_PROGRESS_BATCH_SIZE = 25000;\n\n// Returns true when the sorters prop itself, or any of its entries, is a\n// function. Function-based sorters cannot be transferred to a Web Worker, so\n// PivotData re-applies them on the main thread after worker hydration.\nconst sortersHaveFunctions = function(sorters) {\n if (typeof sorters === 'function') {\n return true;\n }\n if (!sorters || typeof sorters !== 'object') {\n return false;\n }\n return Object.keys(sorters).some(attr => typeof sorters[attr] === 'function');\n};\n\nconst aggregatorTemplates = {\n count(formatter = usFmtInt) {\n return () =>\n function() {\n return {\n count: 0,\n push() {\n this.count++;\n },\n value() {\n return this.count;\n },\n format: formatter,\n };\n };\n },\n\n uniques(fn, formatter = usFmtInt) {\n return function([attr]) {\n return function() {\n return {\n uniq: [],\n push(record) {\n if (!Array.from(this.uniq).includes(record[attr])) {\n this.uniq.push(record[attr]);\n }\n },\n value() {\n return fn(this.uniq);\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sum(formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n sum: 0,\n push(record) {\n if (!isNaN(parseFloat(record[attr]))) {\n this.sum += parseFloat(record[attr]);\n }\n },\n value() {\n return this.sum;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n extremes(mode, formatter = usFmt) {\n return function([attr]) {\n return function(data) {\n return {\n val: null,\n sorter: getSort(\n typeof data !== 'undefined' ? data.sorters : null,\n attr\n ),\n push(record) {\n let x = record[attr];\n if (['min', 'max'].includes(mode)) {\n x = parseFloat(x);\n if (!isNaN(x)) {\n this.val = Math[mode](x, this.val !== null ? this.val : x);\n }\n }\n if (\n mode === 'first' &&\n this.sorter(x, this.val !== null ? this.val : x) <= 0\n ) {\n this.val = x;\n }\n if (\n mode === 'last' &&\n this.sorter(x, this.val !== null ? this.val : x) >= 0\n ) {\n this.val = x;\n }\n },\n value() {\n return this.val;\n },\n format(x) {\n if (isNaN(x)) {\n return x;\n }\n return formatter(x);\n },\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n quantile(q, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n vals: [],\n push(record) {\n const x = parseFloat(record[attr]);\n if (!isNaN(x)) {\n this.vals.push(x);\n }\n },\n value() {\n if (this.vals.length === 0) {\n return null;\n }\n this.vals.sort((a, b) => a - b);\n const i = (this.vals.length - 1) * q;\n return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n runningStat(mode = 'mean', ddof = 1, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n n: 0.0,\n m: 0.0,\n s: 0.0,\n push(record) {\n const x = parseFloat(record[attr]);\n if (isNaN(x)) {\n return;\n }\n this.n += 1.0;\n if (this.n === 1.0) {\n this.m = x;\n }\n const m_new = this.m + (x - this.m) / this.n;\n this.s = this.s + (x - this.m) * (x - m_new);\n this.m = m_new;\n },\n value() {\n if (mode === 'mean') {\n if (this.n === 0) {\n return 0 / 0;\n }\n return this.m;\n }\n if (this.n <= ddof) {\n return 0;\n }\n switch (mode) {\n case 'var':\n return this.s / (this.n - ddof);\n case 'stdev':\n return Math.sqrt(this.s / (this.n - ddof));\n default:\n throw new Error('unknown mode for runningStat');\n }\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sumOverSum(formatter = usFmt) {\n return function([num, denom]) {\n return function() {\n return {\n sumNum: 0,\n sumDenom: 0,\n push(record) {\n if (!isNaN(parseFloat(record[num]))) {\n this.sumNum += parseFloat(record[num]);\n }\n if (!isNaN(parseFloat(record[denom]))) {\n this.sumDenom += parseFloat(record[denom]);\n }\n },\n value() {\n return this.sumNum / this.sumDenom;\n },\n format: formatter,\n numInputs:\n typeof num !== 'undefined' && typeof denom !== 'undefined' ? 0 : 2,\n };\n };\n };\n },\n\n fractionOf(wrapped, type = 'total', formatter = usFmtPct) {\n return (...x) =>\n function(data, rowKey, colKey) {\n return {\n selector: {total: [[], []], row: [rowKey, []], col: [[], colKey]}[\n type\n ],\n inner: wrapped(...Array.from(x || []))(data, rowKey, colKey),\n push(record) {\n this.inner.push(record);\n },\n format: formatter,\n value() {\n const aggregator = data.getAggregator(\n ...Array.from(this.selector || [])\n );\n\n return (\n this.inner.value() /\n ((aggregator.inner && aggregator.inner.value()) || 0)\n );\n },\n numInputs: wrapped(...Array.from(x || []))().numInputs,\n };\n };\n },\n};\n\naggregatorTemplates.countUnique = f =>\n aggregatorTemplates.uniques(x => x.length, f);\naggregatorTemplates.listUnique = s =>\n aggregatorTemplates.uniques(\n x => x.join(s),\n x => x\n );\naggregatorTemplates.max = f => aggregatorTemplates.extremes('max', f);\naggregatorTemplates.min = f => aggregatorTemplates.extremes('min', f);\naggregatorTemplates.first = f => aggregatorTemplates.extremes('first', f);\naggregatorTemplates.last = f => aggregatorTemplates.extremes('last', f);\naggregatorTemplates.median = f => aggregatorTemplates.quantile(0.5, f);\naggregatorTemplates.average = f =>\n aggregatorTemplates.runningStat('mean', 1, f);\naggregatorTemplates.var = (ddof, f) =>\n aggregatorTemplates.runningStat('var', ddof, f);\naggregatorTemplates.stdev = (ddof, f) =>\n aggregatorTemplates.runningStat('stdev', ddof, f);\n\nclass AggregatorCell {\n constructor(instances, primaryKey) {\n this.instances = instances;\n this.primaryKey = primaryKey;\n }\n\n push(record) {\n Object.keys(this.instances).forEach(key => {\n this.instances[key].push(record);\n });\n }\n\n getInstance(key) {\n const targetKey = key || this.primaryKey;\n if (targetKey && this.instances[targetKey]) {\n return this.instances[targetKey];\n }\n const first =\n this.instances[this.primaryKey] ||\n this.instances[Object.keys(this.instances)[0]];\n return first || null;\n }\n}\n\n// default aggregators & renderers use US naming and number formatting\nconst aggregators = (tpl => ({\n Count: tpl.count(usFmtInt),\n 'Count Unique Values': tpl.countUnique(usFmtInt),\n 'List Unique Values': tpl.listUnique(', '),\n Sum: tpl.sum(usFmt),\n 'Integer Sum': tpl.sum(usFmtInt),\n Average: tpl.average(usFmt),\n Median: tpl.median(usFmt),\n 'Sample Variance': tpl.var(1, usFmt),\n 'Sample Standard Deviation': tpl.stdev(1, usFmt),\n Minimum: tpl.min(usFmt),\n Maximum: tpl.max(usFmt),\n First: tpl.first(usFmt),\n Last: tpl.last(usFmt),\n 'Sum over Sum': tpl.sumOverSum(usFmt),\n 'Sum as Fraction of Total': tpl.fractionOf(tpl.sum(), 'total', usFmtPct),\n 'Sum as Fraction of Rows': tpl.fractionOf(tpl.sum(), 'row', usFmtPct),\n 'Sum as Fraction of Columns': tpl.fractionOf(tpl.sum(), 'col', usFmtPct),\n 'Count as Fraction of Total': tpl.fractionOf(tpl.count(), 'total', usFmtPct),\n 'Count as Fraction of Rows': tpl.fractionOf(tpl.count(), 'row', usFmtPct),\n 'Count as Fraction of Columns': tpl.fractionOf(tpl.count(), 'col', usFmtPct),\n}))(aggregatorTemplates);\n\nconst locales = {\n en: {\n aggregators,\n localeStrings: {\n renderError: 'An error occurred rendering the PivotTable results.',\n computeError: 'An error occurred computing the PivotTable results.',\n uiRenderError: 'An error occurred rendering the PivotTable UI.',\n selectAll: 'Select All',\n selectNone: 'Select None',\n tooMany: '(too many to list)',\n filterResults: 'Filter values',\n apply: 'Apply',\n cancel: 'Cancel',\n totals: 'Totals',\n vs: 'vs',\n by: 'by',\n },\n },\n};\n\n// dateFormat deriver l10n requires month and day names to be passed in directly\nconst mthNamesEn = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst dayNamesEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst zeroPad = number => `0${number}`.substr(-2, 2); // eslint-disable-line no-magic-numbers\n\nconst derivers = {\n bin(col, binWidth) {\n return record => record[col] - (record[col] % binWidth);\n },\n dateFormat(\n col,\n formatString,\n utcOutput = false,\n mthNames = mthNamesEn,\n dayNames = dayNamesEn\n ) {\n const utc = utcOutput ? 'UTC' : '';\n return function(record) {\n const date = new Date(Date.parse(record[col]));\n if (isNaN(date)) {\n return '';\n }\n return formatString.replace(/%(.)/g, function(m, p) {\n switch (p) {\n case 'y':\n return date[`get${utc}FullYear`]();\n case 'm':\n return zeroPad(date[`get${utc}Month`]() + 1);\n case 'n':\n return mthNames[date[`get${utc}Month`]()];\n case 'd':\n return zeroPad(date[`get${utc}Date`]());\n case 'w':\n return dayNames[date[`get${utc}Day`]()];\n case 'x':\n return date[`get${utc}Day`]();\n case 'H':\n return zeroPad(date[`get${utc}Hours`]());\n case 'M':\n return zeroPad(date[`get${utc}Minutes`]());\n case 'S':\n return zeroPad(date[`get${utc}Seconds`]());\n default:\n return `%${p}`;\n }\n });\n };\n },\n};\n\n/*\nData Model class\n*/\n\nclass PivotData {\n constructor(inputProps = {}) {\n this.props = Object.assign({}, PivotData.defaultProps, inputProps);\n PropTypes.checkPropTypes(\n PivotData.propTypes,\n this.props,\n 'prop',\n 'PivotData'\n );\n\n this.aggregations = this.normalizeAggregations();\n this.aggregationKeyLookup = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.aggregationKeyLookup)) {\n this.aggregationKeyLookup[agg.aggregatorName] = agg.key;\n }\n });\n if (this.aggregations.length === 0) {\n throw new Error('PivotData requires at least one aggregation');\n }\n this.primaryAggregation = this.aggregations[0];\n this.primaryAggregatorName = this.primaryAggregation.aggregatorName;\n\n this.aggregatorFactories = this.buildAggregatorFactories();\n this.tree = {};\n this.rowKeys = [];\n this.colKeys = [];\n this.rowTotals = {};\n this.colTotals = {};\n this.allTotal = this.createAggregatorCell([], []);\n this.sorted = false;\n\n if (this.props.precomputedData) {\n // Results computed by the Web Worker (or any previous pass) are\n // hydrated instead of re-scanning every record on the main thread.\n this.hydrateFromPrecomputed(this.props.precomputedData);\n return;\n }\n\n const progressHook = this.props.onRecordProcessed;\n const recordHandler = record => {\n if (this.filter(record)) {\n this.processRecord(record);\n }\n };\n if (typeof progressHook === 'function') {\n let recordsProcessed = 0;\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n recordHandler(record);\n recordsProcessed++;\n if (recordsProcessed % RECORD_PROGRESS_BATCH_SIZE === 0) {\n progressHook(recordsProcessed);\n }\n }\n );\n } else {\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n recordHandler\n );\n }\n }\n\n /*\n * Rebuilds tree/totals from a serialized PivotData payload (as produced by\n * `serializePivotData` inside the worker). Aggregated values are final, so\n * only lightweight stub aggregators with the correct `value()` and\n * `format()` behavior are created per cell.\n */\n hydrateFromPrecomputed(precomputed) {\n // One real aggregator instance per aggregation provides `format()` and\n // `numInputs` for every hydrated stub cell.\n const formatSources = {};\n this.aggregations.forEach(agg => {\n formatSources[agg.key] = this.aggregatorFactories[agg.key](this, [], []);\n });\n\n const makeCell = serializedCell => {\n const values = (serializedCell && serializedCell.values) || {};\n const instances = {};\n this.aggregations.forEach(agg => {\n const source = formatSources[agg.key];\n const value = values[agg.key];\n instances[agg.key] = {\n push() {},\n value() {\n return value;\n },\n format(x) {\n return source.format(x);\n },\n numInputs: source.numInputs,\n outlet: source.outlet,\n };\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n };\n\n const hydrateTotals = (source, target) => {\n Object.keys(source || {}).forEach(flatKey => {\n target[flatKey] = makeCell(source[flatKey]);\n });\n };\n\n this.rowKeys = (precomputed.rowKeys || []).map(key => key.slice());\n this.colKeys = (precomputed.colKeys || []).map(key => key.slice());\n this.rowTotals = {};\n hydrateTotals(precomputed.rowTotals, this.rowTotals);\n this.colTotals = {};\n hydrateTotals(precomputed.colTotals, this.colTotals);\n this.tree = {};\n Object.keys(precomputed.tree || {}).forEach(flatRowKey => {\n this.tree[flatRowKey] = {};\n hydrateTotals(precomputed.tree[flatRowKey], this.tree[flatRowKey]);\n });\n this.allTotal = makeCell(precomputed.allTotal);\n\n // Keys were already sorted inside the worker; only re-sort on the main\n // thread when a sorter could not cross the worker boundary (functions).\n this.sorted = !sortersHaveFunctions(this.props.sorters);\n }\n\n filter(record) {\n for (const k in this.props.valueFilter) {\n if (record[k] in this.props.valueFilter[k]) {\n return false;\n }\n }\n return true;\n }\n\n forEachMatchingRecord(criteria, callback) {\n return PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (!this.filter(record)) {\n return;\n }\n for (const k in criteria) {\n const v = criteria[k];\n if (v !== (k in record ? record[k] : 'null')) {\n return;\n }\n }\n callback(record);\n }\n );\n }\n\n arrSort(attrs) {\n let a;\n const sortersArr = (() => {\n const result = [];\n for (a of Array.from(attrs)) {\n result.push(getSort(this.props.sorters, a));\n }\n return result;\n })();\n return function(a, b) {\n for (const i of Object.keys(sortersArr || {})) {\n const sorter = sortersArr[i];\n const comparison = sorter(a[i], b[i]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n }\n\n sortKeys() {\n if (!this.sorted) {\n this.sorted = true;\n const v = (r, c) => this.getAggregator(r, c).value();\n\n // Handle per-row sorting\n if (this.props.rowSorts && Object.keys(this.props.rowSorts).length > 0) {\n const rowSorts = this.props.rowSorts;\n this.rowKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.rows.length; i++) {\n const attr = this.props.rows[i];\n if (attr && rowSorts[attr]) {\n const sortDir = rowSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.rows)(a, b);\n });\n } else {\n // Use global row order\n switch (this.props.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort((a, b) => naturalSort(v(a, []), v(b, [])));\n break;\n case 'value_z_to_a':\n this.rowKeys.sort((a, b) => -naturalSort(v(a, []), v(b, [])));\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.props.rows));\n }\n }\n\n // Handle per-column sorting\n if (this.props.colSorts && Object.keys(this.props.colSorts).length > 0) {\n const colSorts = this.props.colSorts;\n this.colKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.cols.length; i++) {\n const attr = this.props.cols[i];\n if (attr && colSorts[attr]) {\n const sortDir = colSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.cols)(a, b);\n });\n } else {\n // Use global col order\n switch (this.props.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort((a, b) => naturalSort(v([], a), v([], b)));\n break;\n case 'value_z_to_a':\n this.colKeys.sort((a, b) => -naturalSort(v([], a), v([], b)));\n break;\n default:\n this.colKeys.sort(this.arrSort(this.props.cols));\n }\n }\n }\n }\n\n getColKeys() {\n this.sortKeys();\n return this.colKeys;\n }\n\n getRowKeys() {\n this.sortKeys();\n return this.rowKeys;\n }\n\n processRecord(record) {\n // this code is called in a tight loop\n const colKey = [];\n const rowKey = [];\n for (const x of Array.from(this.props.cols)) {\n colKey.push(x in record ? record[x] : 'null');\n }\n for (const x of Array.from(this.props.rows)) {\n rowKey.push(x in record ? record[x] : 'null');\n }\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n\n this.allTotal.push(record);\n\n if (rowKey.length !== 0) {\n if (!this.rowTotals[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowTotals[flatRowKey] = this.createAggregatorCell(rowKey, []);\n }\n this.rowTotals[flatRowKey].push(record);\n }\n\n if (colKey.length !== 0) {\n if (!this.colTotals[flatColKey]) {\n this.colKeys.push(colKey);\n this.colTotals[flatColKey] = this.createAggregatorCell([], colKey);\n }\n this.colTotals[flatColKey].push(record);\n }\n\n if (colKey.length !== 0 && rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (!this.tree[flatRowKey][flatColKey]) {\n this.tree[flatRowKey][flatColKey] = this.createAggregatorCell(\n rowKey,\n colKey\n );\n }\n this.tree[flatRowKey][flatColKey].push(record);\n }\n }\n\n getAggregator(rowKey, colKey, aggregationKey = this.primaryAggregation.key) {\n let resolvedKey = aggregationKey;\n if (\n resolvedKey &&\n !(resolvedKey in this.aggregatorFactories) &&\n this.aggregationKeyLookup[resolvedKey]\n ) {\n resolvedKey = this.aggregationKeyLookup[resolvedKey];\n }\n const cell = this.getAggregatorCell(rowKey, colKey);\n if (!cell) {\n return PivotData.emptyAggregator;\n }\n return cell.getInstance(resolvedKey) || PivotData.emptyAggregator;\n }\n\n getAggregatorCell(rowKey, colKey) {\n let cell;\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n if (rowKey.length === 0 && colKey.length === 0) {\n cell = this.allTotal;\n } else if (rowKey.length === 0) {\n cell = this.colTotals[flatColKey];\n } else if (colKey.length === 0) {\n cell = this.rowTotals[flatRowKey];\n } else {\n cell =\n this.tree[flatRowKey] && this.tree[flatRowKey][flatColKey]\n ? this.tree[flatRowKey][flatColKey]\n : null;\n }\n return cell || null;\n }\n\n getAggregatorNames() {\n return this.aggregations.map(agg => agg.aggregatorName);\n }\n\n getAggregations() {\n return this.aggregations.map(agg => Object.assign({}, agg));\n }\n\n getPrimaryAggregatorName() {\n return this.primaryAggregatorName;\n }\n\n getPrimaryAggregation() {\n return Object.assign({}, this.primaryAggregation);\n }\n\n /**\n * Groups aggregations by their aggregatorName\n * @returns {Object} Object mapping aggregator names to arrays of aggregations\n * Example: { 'Count': [agg1, agg2], 'Sum': [agg3] }\n */\n groupAggregationsByType() {\n const grouped = {};\n this.aggregations.forEach(agg => {\n const aggName = agg.aggregatorName;\n if (!grouped[aggName]) {\n grouped[aggName] = [];\n }\n grouped[aggName].push(agg);\n });\n return grouped;\n }\n\n /**\n * Gets aggregations for a specific aggregator type\n * @param {string} aggregatorName - The aggregator name (e.g., 'Count', 'Sum')\n * @returns {Array} Array of aggregation configurations\n */\n getAggregationsByType(aggregatorName) {\n return this.aggregations.filter(\n agg => agg.aggregatorName === aggregatorName\n );\n }\n\n normalizeAggregations() {\n const defaultAggregatorName = Object.keys(this.props.aggregators)[0];\n const aggregationsProvided =\n Array.isArray(this.props.aggregations) &&\n this.props.aggregations.length > 0;\n const legacyAggregatorName =\n typeof this.props.aggregatorName === 'string'\n ? this.props.aggregatorName\n : null;\n const fallbackAggregatorName =\n legacyAggregatorName || defaultAggregatorName;\n const fallbackVals = Array.isArray(this.props.vals) ? this.props.vals : [];\n let aggregations = [];\n if (aggregationsProvided) {\n aggregations = this.props.aggregations;\n } else {\n aggregations = [\n {\n aggregatorName: fallbackAggregatorName,\n vals: fallbackVals,\n },\n ];\n }\n return aggregations.map((agg, idx) => {\n const aggregatorName =\n agg.aggregatorName ||\n (aggregationsProvided ? defaultAggregatorName : fallbackAggregatorName);\n const vals =\n typeof agg.vals !== 'undefined'\n ? agg.vals\n : aggregationsProvided\n ? []\n : fallbackVals.slice();\n const normalizedVals = Array.isArray(vals) ? vals : [];\n const key =\n agg.key ||\n `${aggregatorName || 'agg'}-${\n normalizedVals.length ? normalizedVals.join('|') : ''\n }-${idx}`;\n const label =\n agg.label ||\n (normalizedVals.length\n ? `${aggregatorName} of ${normalizedVals.join(', ')}`\n : aggregatorName);\n return {\n key,\n aggregatorName,\n vals: normalizedVals,\n label,\n };\n });\n }\n\n buildAggregatorFactories() {\n const factories = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.props.aggregators)) {\n throw new Error(`unknown aggregator ${agg.aggregatorName}`);\n }\n factories[agg.key] = this.props.aggregators[agg.aggregatorName](agg.vals);\n });\n return factories;\n }\n\n createAggregatorCell(rowKey, colKey) {\n const instances = {};\n this.aggregations.forEach(agg => {\n instances[agg.key] = this.aggregatorFactories[agg.key](\n this,\n rowKey,\n colKey\n );\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n }\n}\n\nPivotData.emptyAggregator = {\n push() {},\n value() {\n return null;\n },\n format() {\n return '';\n },\n};\n\n// can handle arrays or jQuery selections of tables\nPivotData.forEachRecord = function(input, derivedAttributes, f) {\n let addRecord, record;\n if (Object.getOwnPropertyNames(derivedAttributes).length === 0) {\n addRecord = f;\n } else {\n addRecord = function(record) {\n for (const k in derivedAttributes) {\n const derived = derivedAttributes[k](record);\n if (derived !== null) {\n record[k] = derived;\n }\n }\n return f(record);\n };\n }\n\n // if it's a function, have it call us back\n if (typeof input === 'function') {\n return input(addRecord);\n } else if (Array.isArray(input)) {\n if (Array.isArray(input[0])) {\n // array of arrays\n return (() => {\n const result = [];\n for (const i of Object.keys(input || {})) {\n const compactRecord = input[i];\n if (i > 0) {\n record = {};\n for (const j of Object.keys(input[0] || {})) {\n const k = input[0][j];\n record[k] = compactRecord[j];\n }\n result.push(addRecord(record));\n }\n }\n return result;\n })();\n }\n\n // array of objects\n return (() => {\n const result1 = [];\n for (record of Array.from(input)) {\n result1.push(addRecord(record));\n }\n return result1;\n })();\n }\n throw new Error('unknown input format');\n};\n\nPivotData.defaultProps = {\n aggregators: aggregators,\n cols: [],\n rows: [],\n vals: [],\n aggregatorName: Object.keys(aggregators)[0],\n aggregations: [],\n sorters: {},\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n rowSorts: {},\n colSorts: {},\n derivedAttributes: {},\n};\n\nPivotData.propTypes = {\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.func])\n .isRequired,\n aggregatorName: PropTypes.string,\n aggregations: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n aggregatorName: PropTypes.string,\n vals: PropTypes.arrayOf(PropTypes.string),\n label: PropTypes.string,\n })\n ),\n cols: PropTypes.arrayOf(PropTypes.string),\n rows: PropTypes.arrayOf(PropTypes.string),\n vals: PropTypes.arrayOf(PropTypes.string),\n valueFilter: PropTypes.objectOf(PropTypes.objectOf(PropTypes.bool)),\n sorters: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.objectOf(\n PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.array])\n ),\n ]),\n derivedAttributes: PropTypes.objectOf(PropTypes.func),\n precomputedData: PropTypes.object,\n onRecordProcessed: PropTypes.func,\n rowOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n colOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n};\n\nexport {\n aggregatorTemplates,\n aggregators,\n derivers,\n locales,\n naturalSort,\n numberFormat,\n getSort,\n sortAs,\n builtInSorters,\n detectDataType,\n createSorterByType,\n sortersHaveFunctions,\n PivotData,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Utilities.js"],"names":["addSeparators","nStr","thousandsSep","decimalSep","x","String","split","x1","x2","length","rgx","test","replace","numberFormat","opts_in","defaults","digitsAfterDecimal","scaler","prefix","suffix","showOriginal","opts","Object","assign","isNaN","isFinite","scaledValue","fixedValue","toFixed","result","rx","rd","rz","naturalSort","as","bs","nas","Number","nbs","a","b","match","a1","shift","b1","sortAs","order","mapping","l_mapping","i","toLowerCase","builtInSorters","number","undefined","numA","parseFloat","numB","date","dateA","Date","dateB","getTime","string","strA","strB","stringCaseInsensitive","natural","detectDataType","values","sampleSize","Math","min","samples","slice","numberCount","dateCount","stringCount","val","parse","createSorterByType","dataType","Array","isArray","detectedType","getSort","sorters","attr","attrValues","sort","sorter","keys","usFmt","usFmtInt","usFmtPct","RECORD_PROGRESS_BATCH_SIZE","sortersHaveFunctions","some","aggregatorTemplates","count","formatter","push","value","format","uniques","fn","uniq","record","from","includes","numInputs","sum","extremes","mode","data","quantile","q","vals","floor","ceil","runningStat","ddof","n","m","s","m_new","sqrt","Error","sumOverSum","num","denom","sumNum","sumDenom","fractionOf","wrapped","type","rowKey","colKey","selector","total","row","col","inner","aggregator","getAggregator","countUnique","f","listUnique","join","max","first","last","median","average","var","stdev","AggregatorCell","instances","primaryKey","forEach","key","targetKey","aggregators","Count","tpl","Sum","Average","Median","Minimum","Maximum","First","Last","locales","en","localeStrings","renderError","computeError","uiRenderError","selectAll","selectNone","tooMany","filterResults","apply","cancel","totals","vs","by","mthNamesEn","dayNamesEn","zeroPad","substr","derivers","bin","binWidth","dateFormat","formatString","utcOutput","mthNames","dayNames","utc","p","PivotData","inputProps","props","defaultProps","PropTypes","checkPropTypes","propTypes","aggregations","normalizeAggregations","aggregationKeyLookup","agg","aggregatorName","primaryAggregation","primaryAggregatorName","aggregatorFactories","buildAggregatorFactories","tree","rowKeys","colKeys","rowTotals","colTotals","allTotal","createAggregatorCell","sorted","precomputedData","hydrateFromPrecomputed","progressHook","onRecordProcessed","recordHandler","filter","processRecord","recordsProcessed","forEachRecord","derivedAttributes","precomputed","formatSources","makeCell","serializedCell","source","outlet","hydrateTotals","target","flatKey","map","flatRowKey","k","valueFilter","criteria","callback","v","attrs","sortersArr","comparison","r","c","rowSorts","rows","sortDir","arrSort","rowOrder","colSorts","cols","colOrder","sortKeys","fromCharCode","flatColKey","aggregationKey","resolvedKey","cell","getAggregatorCell","emptyAggregator","getInstance","grouped","aggName","defaultAggregatorName","aggregationsProvided","legacyAggregatorName","fallbackAggregatorName","fallbackVals","idx","normalizedVals","label","factories","input","addRecord","getOwnPropertyNames","derived","compactRecord","j","result1","oneOfType","array","object","func","isRequired","arrayOf","shape","objectOf","bool","oneOf"],"mappings":"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","file":"Utilities.js","sourcesContent":["/* eslint-disable no-undefined */\nimport PropTypes from 'prop-types';\n\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS104: Avoid inline assignments\n * DS201: Simplify complex destructure assignments\n * DS203: Remove `|| {}` from converted for-own loops\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nconst addSeparators = function(nStr, thousandsSep, decimalSep) {\n const x = String(nStr).split('.');\n let x1 = x[0];\n const x2 = x.length > 1 ? decimalSep + x[1] : '';\n const rgx = /(\\d+)(\\d{3})/;\n while (rgx.test(x1)) {\n x1 = x1.replace(rgx, `$1${thousandsSep}$2`);\n }\n return x1 + x2;\n};\n\nconst numberFormat = function(opts_in) {\n const defaults = {\n digitsAfterDecimal: 2,\n scaler: 1,\n thousandsSep: ',',\n decimalSep: '.',\n prefix: '',\n suffix: '',\n showOriginal: false,\n };\n const opts = Object.assign({}, defaults, opts_in);\n return function(x) {\n if (isNaN(x) || !isFinite(x)) {\n return '';\n }\n // Show completely original value if showOriginal is true\n if (opts.showOriginal) {\n return String(opts.scaler * x);\n }\n // When thousandsSep is empty, apply decimal formatting but skip thousand separator\n if (opts.thousandsSep === '') {\n const scaledValue = opts.scaler * x;\n const fixedValue = scaledValue.toFixed(opts.digitsAfterDecimal);\n // Apply decimal separator if needed\n const result = fixedValue.replace('.', opts.decimalSep);\n return `${opts.prefix}${result}${opts.suffix}`;\n }\n // Normal formatting with thousand separator\n const result = addSeparators(\n (opts.scaler * x).toFixed(opts.digitsAfterDecimal),\n opts.thousandsSep,\n opts.decimalSep\n );\n return `${opts.prefix}${result}${opts.suffix}`;\n };\n};\n\nconst rx = /(\\d+)|(\\D+)/g;\nconst rd = /\\d/;\nconst rz = /^0/;\nconst naturalSort = (as, bs) => {\n // nulls first\n if (bs !== null && as === null) {\n return -1;\n }\n if (as !== null && bs === null) {\n return 1;\n }\n\n // then raw NaNs\n if (typeof as === 'number' && isNaN(as)) {\n return -1;\n }\n if (typeof bs === 'number' && isNaN(bs)) {\n return 1;\n }\n\n // numbers and numbery strings group together\n const nas = Number(as);\n const nbs = Number(bs);\n if (nas < nbs) {\n return -1;\n }\n if (nas > nbs) {\n return 1;\n }\n\n // within that, true numbers before numbery strings\n if (typeof as === 'number' && typeof bs !== 'number') {\n return -1;\n }\n if (typeof bs === 'number' && typeof as !== 'number') {\n return 1;\n }\n if (typeof as === 'number' && typeof bs === 'number') {\n return 0;\n }\n\n // 'Infinity' is a textual number, so less than 'A'\n if (isNaN(nbs) && !isNaN(nas)) {\n return -1;\n }\n if (isNaN(nas) && !isNaN(nbs)) {\n return 1;\n }\n\n // finally, \"smart\" string sorting per http://stackoverflow.com/a/4373421/112871\n let a = String(as);\n let b = String(bs);\n if (a === b) {\n return 0;\n }\n if (!rd.test(a) || !rd.test(b)) {\n return a > b ? 1 : -1;\n }\n\n // special treatment for strings containing digits\n a = a.match(rx);\n b = b.match(rx);\n while (a.length && b.length) {\n const a1 = a.shift();\n const b1 = b.shift();\n if (a1 !== b1) {\n if (rd.test(a1) && rd.test(b1)) {\n return a1.replace(rz, '.0') - b1.replace(rz, '.0');\n }\n return a1 > b1 ? 1 : -1;\n }\n }\n return a.length - b.length;\n};\n\nconst sortAs = function(order) {\n const mapping = {};\n\n // sort lowercased keys similarly\n const l_mapping = {};\n for (const i in order) {\n const x = order[i];\n mapping[x] = i;\n if (typeof x === 'string') {\n l_mapping[x.toLowerCase()] = i;\n }\n }\n return function(a, b) {\n if (a in mapping && b in mapping) {\n return mapping[a] - mapping[b];\n } else if (a in mapping) {\n return -1;\n } else if (b in mapping) {\n return 1;\n } else if (a in l_mapping && b in l_mapping) {\n return l_mapping[a] - l_mapping[b];\n } else if (a in l_mapping) {\n return -1;\n } else if (b in l_mapping) {\n return 1;\n }\n return naturalSort(a, b);\n };\n};\n\n// Built-in sort functions for different data types\nconst builtInSorters = {\n // Number sorter - handles numeric values\n number: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const numA = typeof a === 'number' ? a : parseFloat(a);\n const numB = typeof b === 'number' ? b : parseFloat(b);\n if (isNaN(numA) && isNaN(numB)) {\n return 0;\n }\n if (isNaN(numA)) {\n return -1;\n }\n if (isNaN(numB)) {\n return 1;\n }\n return numA - numB;\n },\n\n // Date sorter - handles date values\n date: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const dateA = a instanceof Date ? a : new Date(a);\n const dateB = b instanceof Date ? b : new Date(b);\n if (isNaN(dateA.getTime()) && isNaN(dateB.getTime())) {\n return 0;\n }\n if (isNaN(dateA.getTime())) {\n return -1;\n }\n if (isNaN(dateB.getTime())) {\n return 1;\n }\n return dateA.getTime() - dateB.getTime();\n },\n\n // String sorter - case-sensitive\n string: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a);\n const strB = String(b);\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // String sorter - case-insensitive\n stringCaseInsensitive: (a, b) => {\n if (a === null || a === undefined || a === '') {\n return b === null || b === undefined || b === '' ? 0 : -1;\n }\n if (b === null || b === undefined || b === '') {\n return 1;\n }\n const strA = String(a).toLowerCase();\n const strB = String(b).toLowerCase();\n return strA > strB ? 1 : strA < strB ? -1 : 0;\n },\n\n // Natural sort (default)\n natural: naturalSort,\n};\n\n// Alias for backward compatibility\n// const sorters = builtInSorters;\n\n// Auto-detect data type from sample values\nconst detectDataType = function(values) {\n if (!values || values.length === 0) {\n return 'natural';\n }\n\n const sampleSize = Math.min(10, values.length);\n const samples = values.slice(0, sampleSize);\n\n let numberCount = 0;\n let dateCount = 0;\n let stringCount = 0;\n\n for (const val of samples) {\n if (val === null || val === undefined || val === '') {\n continue;\n }\n\n // Check if it's a number\n if (typeof val === 'number' || (!isNaN(parseFloat(val)) && isFinite(val))) {\n numberCount++;\n }\n // Check if it's a date\n else if (\n val instanceof Date ||\n (!isNaN(Date.parse(val)) && String(val).match(/^\\d{4}-\\d{2}-\\d{2}/))\n ) {\n dateCount++;\n }\n // Otherwise it's a string\n else {\n stringCount++;\n }\n }\n\n // Determine the most common type\n if (numberCount > dateCount && numberCount > stringCount) {\n return 'number';\n } else if (dateCount > stringCount) {\n return 'date';\n } else if (stringCount > 0) {\n return 'string';\n }\n\n return 'natural';\n};\n\n// Create a sorter based on data type\nconst createSorterByType = function(dataType) {\n if (typeof dataType === 'function') {\n return dataType;\n }\n\n if (typeof dataType === 'string' && dataType in builtInSorters) {\n return builtInSorters[dataType];\n }\n\n // Auto-detect if dataType is an array of values\n if (Array.isArray(dataType)) {\n const detectedType = detectDataType(dataType);\n return builtInSorters[detectedType] || naturalSort;\n }\n\n return naturalSort;\n};\n\n// Get sorter for an attribute, with auto-detection support\nconst getSort = function(sorters, attr, attrValues = null) {\n if (sorters) {\n if (typeof sorters === 'function') {\n const sort = sorters(attr);\n if (typeof sort === 'function') {\n return sort;\n }\n } else if (attr in sorters) {\n const sorter = sorters[attr];\n // If it's a string (data type name) or array (sample values), create appropriate sorter\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n return createSorterByType(sorter);\n }\n // If it's already a function, use it\n if (typeof sorter === 'function') {\n return sorter;\n }\n }\n }\n\n // Auto-detect if attrValues are provided\n if (attrValues && typeof attrValues === 'object') {\n const values = Object.keys(attrValues);\n if (values.length > 0) {\n const detectedType = detectDataType(values);\n return builtInSorters[detectedType] || naturalSort;\n }\n }\n\n return naturalSort;\n};\n\n// aggregator templates default to US number formatting but this is overrideable\nconst usFmt = numberFormat();\nconst usFmtInt = numberFormat({digitsAfterDecimal: 0});\nconst usFmtPct = numberFormat({\n digitsAfterDecimal: 1,\n scaler: 100,\n suffix: '%',\n});\n\n// Emit a progress callback every N processed records without adding\n// measurable overhead to the per-record loop.\nconst RECORD_PROGRESS_BATCH_SIZE = 200;\n\n// Returns true when the sorters prop itself, or any of its entries, is a\n// function. Function-based sorters cannot be transferred to a Web Worker, so\n// PivotData re-applies them on the main thread after worker hydration.\nconst sortersHaveFunctions = function(sorters) {\n if (typeof sorters === 'function') {\n return true;\n }\n if (!sorters || typeof sorters !== 'object') {\n return false;\n }\n return Object.keys(sorters).some(attr => typeof sorters[attr] === 'function');\n};\n\nconst aggregatorTemplates = {\n count(formatter = usFmtInt) {\n return () =>\n function() {\n return {\n count: 0,\n push() {\n this.count++;\n },\n value() {\n return this.count;\n },\n format: formatter,\n };\n };\n },\n\n uniques(fn, formatter = usFmtInt) {\n return function([attr]) {\n return function() {\n return {\n uniq: [],\n push(record) {\n if (!Array.from(this.uniq).includes(record[attr])) {\n this.uniq.push(record[attr]);\n }\n },\n value() {\n return fn(this.uniq);\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sum(formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n sum: 0,\n push(record) {\n if (!isNaN(parseFloat(record[attr]))) {\n this.sum += parseFloat(record[attr]);\n }\n },\n value() {\n return this.sum;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n extremes(mode, formatter = usFmt) {\n return function([attr]) {\n return function(data) {\n return {\n val: null,\n sorter: getSort(\n typeof data !== 'undefined' ? data.sorters : null,\n attr\n ),\n push(record) {\n let x = record[attr];\n if (['min', 'max'].includes(mode)) {\n x = parseFloat(x);\n if (!isNaN(x)) {\n this.val = Math[mode](x, this.val !== null ? this.val : x);\n }\n }\n if (\n mode === 'first' &&\n this.sorter(x, this.val !== null ? this.val : x) <= 0\n ) {\n this.val = x;\n }\n if (\n mode === 'last' &&\n this.sorter(x, this.val !== null ? this.val : x) >= 0\n ) {\n this.val = x;\n }\n },\n value() {\n return this.val;\n },\n format(x) {\n if (isNaN(x)) {\n return x;\n }\n return formatter(x);\n },\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n quantile(q, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n vals: [],\n push(record) {\n const x = parseFloat(record[attr]);\n if (!isNaN(x)) {\n this.vals.push(x);\n }\n },\n value() {\n if (this.vals.length === 0) {\n return null;\n }\n this.vals.sort((a, b) => a - b);\n const i = (this.vals.length - 1) * q;\n return (this.vals[Math.floor(i)] + this.vals[Math.ceil(i)]) / 2.0;\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n runningStat(mode = 'mean', ddof = 1, formatter = usFmt) {\n return function([attr]) {\n return function() {\n return {\n n: 0.0,\n m: 0.0,\n s: 0.0,\n push(record) {\n const x = parseFloat(record[attr]);\n if (isNaN(x)) {\n return;\n }\n this.n += 1.0;\n if (this.n === 1.0) {\n this.m = x;\n }\n const m_new = this.m + (x - this.m) / this.n;\n this.s = this.s + (x - this.m) * (x - m_new);\n this.m = m_new;\n },\n value() {\n if (mode === 'mean') {\n if (this.n === 0) {\n return 0 / 0;\n }\n return this.m;\n }\n if (this.n <= ddof) {\n return 0;\n }\n switch (mode) {\n case 'var':\n return this.s / (this.n - ddof);\n case 'stdev':\n return Math.sqrt(this.s / (this.n - ddof));\n default:\n throw new Error('unknown mode for runningStat');\n }\n },\n format: formatter,\n numInputs: typeof attr !== 'undefined' ? 0 : 1,\n };\n };\n };\n },\n\n sumOverSum(formatter = usFmt) {\n return function([num, denom]) {\n return function() {\n return {\n sumNum: 0,\n sumDenom: 0,\n push(record) {\n if (!isNaN(parseFloat(record[num]))) {\n this.sumNum += parseFloat(record[num]);\n }\n if (!isNaN(parseFloat(record[denom]))) {\n this.sumDenom += parseFloat(record[denom]);\n }\n },\n value() {\n return this.sumNum / this.sumDenom;\n },\n format: formatter,\n numInputs:\n typeof num !== 'undefined' && typeof denom !== 'undefined' ? 0 : 2,\n };\n };\n };\n },\n\n fractionOf(wrapped, type = 'total', formatter = usFmtPct) {\n return (...x) =>\n function(data, rowKey, colKey) {\n return {\n selector: {total: [[], []], row: [rowKey, []], col: [[], colKey]}[\n type\n ],\n inner: wrapped(...Array.from(x || []))(data, rowKey, colKey),\n push(record) {\n this.inner.push(record);\n },\n format: formatter,\n value() {\n const aggregator = data.getAggregator(\n ...Array.from(this.selector || [])\n );\n\n return (\n this.inner.value() /\n ((aggregator.inner && aggregator.inner.value()) || 0)\n );\n },\n numInputs: wrapped(...Array.from(x || []))().numInputs,\n };\n };\n },\n};\n\naggregatorTemplates.countUnique = f =>\n aggregatorTemplates.uniques(x => x.length, f);\naggregatorTemplates.listUnique = s =>\n aggregatorTemplates.uniques(\n x => x.join(s),\n x => x\n );\naggregatorTemplates.max = f => aggregatorTemplates.extremes('max', f);\naggregatorTemplates.min = f => aggregatorTemplates.extremes('min', f);\naggregatorTemplates.first = f => aggregatorTemplates.extremes('first', f);\naggregatorTemplates.last = f => aggregatorTemplates.extremes('last', f);\naggregatorTemplates.median = f => aggregatorTemplates.quantile(0.5, f);\naggregatorTemplates.average = f =>\n aggregatorTemplates.runningStat('mean', 1, f);\naggregatorTemplates.var = (ddof, f) =>\n aggregatorTemplates.runningStat('var', ddof, f);\naggregatorTemplates.stdev = (ddof, f) =>\n aggregatorTemplates.runningStat('stdev', ddof, f);\n\nclass AggregatorCell {\n constructor(instances, primaryKey) {\n this.instances = instances;\n this.primaryKey = primaryKey;\n }\n\n push(record) {\n Object.keys(this.instances).forEach(key => {\n this.instances[key].push(record);\n });\n }\n\n getInstance(key) {\n const targetKey = key || this.primaryKey;\n if (targetKey && this.instances[targetKey]) {\n return this.instances[targetKey];\n }\n const first =\n this.instances[this.primaryKey] ||\n this.instances[Object.keys(this.instances)[0]];\n return first || null;\n }\n}\n\n// default aggregators & renderers use US naming and number formatting\nconst aggregators = (tpl => ({\n Count: tpl.count(usFmtInt),\n 'Count Unique Values': tpl.countUnique(usFmtInt),\n 'List Unique Values': tpl.listUnique(', '),\n Sum: tpl.sum(usFmt),\n 'Integer Sum': tpl.sum(usFmtInt),\n Average: tpl.average(usFmt),\n Median: tpl.median(usFmt),\n 'Sample Variance': tpl.var(1, usFmt),\n 'Sample Standard Deviation': tpl.stdev(1, usFmt),\n Minimum: tpl.min(usFmt),\n Maximum: tpl.max(usFmt),\n First: tpl.first(usFmt),\n Last: tpl.last(usFmt),\n 'Sum over Sum': tpl.sumOverSum(usFmt),\n 'Sum as Fraction of Total': tpl.fractionOf(tpl.sum(), 'total', usFmtPct),\n 'Sum as Fraction of Rows': tpl.fractionOf(tpl.sum(), 'row', usFmtPct),\n 'Sum as Fraction of Columns': tpl.fractionOf(tpl.sum(), 'col', usFmtPct),\n 'Count as Fraction of Total': tpl.fractionOf(tpl.count(), 'total', usFmtPct),\n 'Count as Fraction of Rows': tpl.fractionOf(tpl.count(), 'row', usFmtPct),\n 'Count as Fraction of Columns': tpl.fractionOf(tpl.count(), 'col', usFmtPct),\n}))(aggregatorTemplates);\n\nconst locales = {\n en: {\n aggregators,\n localeStrings: {\n renderError: 'An error occurred rendering the PivotTable results.',\n computeError: 'An error occurred computing the PivotTable results.',\n uiRenderError: 'An error occurred rendering the PivotTable UI.',\n selectAll: 'Select All',\n selectNone: 'Select None',\n tooMany: '(too many to list)',\n filterResults: 'Filter values',\n apply: 'Apply',\n cancel: 'Cancel',\n totals: 'Totals',\n vs: 'vs',\n by: 'by',\n },\n },\n};\n\n// dateFormat deriver l10n requires month and day names to be passed in directly\nconst mthNamesEn = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst dayNamesEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\nconst zeroPad = number => `0${number}`.substr(-2, 2); // eslint-disable-line no-magic-numbers\n\nconst derivers = {\n bin(col, binWidth) {\n return record => record[col] - (record[col] % binWidth);\n },\n dateFormat(\n col,\n formatString,\n utcOutput = false,\n mthNames = mthNamesEn,\n dayNames = dayNamesEn\n ) {\n const utc = utcOutput ? 'UTC' : '';\n return function(record) {\n const date = new Date(Date.parse(record[col]));\n if (isNaN(date)) {\n return '';\n }\n return formatString.replace(/%(.)/g, function(m, p) {\n switch (p) {\n case 'y':\n return date[`get${utc}FullYear`]();\n case 'm':\n return zeroPad(date[`get${utc}Month`]() + 1);\n case 'n':\n return mthNames[date[`get${utc}Month`]()];\n case 'd':\n return zeroPad(date[`get${utc}Date`]());\n case 'w':\n return dayNames[date[`get${utc}Day`]()];\n case 'x':\n return date[`get${utc}Day`]();\n case 'H':\n return zeroPad(date[`get${utc}Hours`]());\n case 'M':\n return zeroPad(date[`get${utc}Minutes`]());\n case 'S':\n return zeroPad(date[`get${utc}Seconds`]());\n default:\n return `%${p}`;\n }\n });\n };\n },\n};\n\n/*\nData Model class\n*/\n\nclass PivotData {\n constructor(inputProps = {}) {\n this.props = Object.assign({}, PivotData.defaultProps, inputProps);\n PropTypes.checkPropTypes(\n PivotData.propTypes,\n this.props,\n 'prop',\n 'PivotData'\n );\n\n this.aggregations = this.normalizeAggregations();\n this.aggregationKeyLookup = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.aggregationKeyLookup)) {\n this.aggregationKeyLookup[agg.aggregatorName] = agg.key;\n }\n });\n if (this.aggregations.length === 0) {\n throw new Error('PivotData requires at least one aggregation');\n }\n this.primaryAggregation = this.aggregations[0];\n this.primaryAggregatorName = this.primaryAggregation.aggregatorName;\n\n this.aggregatorFactories = this.buildAggregatorFactories();\n this.tree = {};\n this.rowKeys = [];\n this.colKeys = [];\n this.rowTotals = {};\n this.colTotals = {};\n this.allTotal = this.createAggregatorCell([], []);\n this.sorted = false;\n\n if (this.props.precomputedData) {\n // Results computed by the Web Worker (or any previous pass) are\n // hydrated instead of re-scanning every record on the main thread.\n this.hydrateFromPrecomputed(this.props.precomputedData);\n return;\n }\n\n const progressHook = this.props.onRecordProcessed;\n const recordHandler = record => {\n if (this.filter(record)) {\n this.processRecord(record);\n }\n };\n if (typeof progressHook === 'function') {\n let recordsProcessed = 0;\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n recordHandler(record);\n recordsProcessed++;\n if (recordsProcessed % RECORD_PROGRESS_BATCH_SIZE === 0) {\n progressHook(recordsProcessed);\n }\n }\n );\n } else {\n PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n recordHandler\n );\n }\n }\n\n /*\n * Rebuilds tree/totals from a serialized PivotData payload (as produced by\n * `serializePivotData` inside the worker). Aggregated values are final, so\n * only lightweight stub aggregators with the correct `value()` and\n * `format()` behavior are created per cell.\n */\n hydrateFromPrecomputed(precomputed) {\n // One real aggregator instance per aggregation provides `format()` and\n // `numInputs` for every hydrated stub cell.\n const formatSources = {};\n this.aggregations.forEach(agg => {\n formatSources[agg.key] = this.aggregatorFactories[agg.key](this, [], []);\n });\n\n const makeCell = serializedCell => {\n const values = (serializedCell && serializedCell.values) || {};\n const instances = {};\n this.aggregations.forEach(agg => {\n const source = formatSources[agg.key];\n const value = values[agg.key];\n instances[agg.key] = {\n push() {},\n value() {\n return value;\n },\n format(x) {\n return source.format(x);\n },\n numInputs: source.numInputs,\n outlet: source.outlet,\n };\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n };\n\n const hydrateTotals = (source, target) => {\n Object.keys(source || {}).forEach(flatKey => {\n target[flatKey] = makeCell(source[flatKey]);\n });\n };\n\n this.rowKeys = (precomputed.rowKeys || []).map(key => key.slice());\n this.colKeys = (precomputed.colKeys || []).map(key => key.slice());\n this.rowTotals = {};\n hydrateTotals(precomputed.rowTotals, this.rowTotals);\n this.colTotals = {};\n hydrateTotals(precomputed.colTotals, this.colTotals);\n this.tree = {};\n Object.keys(precomputed.tree || {}).forEach(flatRowKey => {\n this.tree[flatRowKey] = {};\n hydrateTotals(precomputed.tree[flatRowKey], this.tree[flatRowKey]);\n });\n this.allTotal = makeCell(precomputed.allTotal);\n\n // Keys were already sorted inside the worker; only re-sort on the main\n // thread when a sorter could not cross the worker boundary (functions).\n this.sorted = !sortersHaveFunctions(this.props.sorters);\n }\n\n filter(record) {\n for (const k in this.props.valueFilter) {\n if (record[k] in this.props.valueFilter[k]) {\n return false;\n }\n }\n return true;\n }\n\n forEachMatchingRecord(criteria, callback) {\n return PivotData.forEachRecord(\n this.props.data,\n this.props.derivedAttributes,\n record => {\n if (!this.filter(record)) {\n return;\n }\n for (const k in criteria) {\n const v = criteria[k];\n if (v !== (k in record ? record[k] : 'null')) {\n return;\n }\n }\n callback(record);\n }\n );\n }\n\n arrSort(attrs) {\n let a;\n const sortersArr = (() => {\n const result = [];\n for (a of Array.from(attrs)) {\n result.push(getSort(this.props.sorters, a));\n }\n return result;\n })();\n return function(a, b) {\n for (const i of Object.keys(sortersArr || {})) {\n const sorter = sortersArr[i];\n const comparison = sorter(a[i], b[i]);\n if (comparison !== 0) {\n return comparison;\n }\n }\n return 0;\n };\n }\n\n sortKeys() {\n if (!this.sorted) {\n this.sorted = true;\n const v = (r, c) => this.getAggregator(r, c).value();\n\n // Handle per-row sorting\n if (this.props.rowSorts && Object.keys(this.props.rowSorts).length > 0) {\n const rowSorts = this.props.rowSorts;\n this.rowKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.rows.length; i++) {\n const attr = this.props.rows[i];\n if (attr && rowSorts[attr]) {\n const sortDir = rowSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.rows)(a, b);\n });\n } else {\n // Use global row order\n switch (this.props.rowOrder) {\n case 'value_a_to_z':\n this.rowKeys.sort((a, b) => naturalSort(v(a, []), v(b, [])));\n break;\n case 'value_z_to_a':\n this.rowKeys.sort((a, b) => -naturalSort(v(a, []), v(b, [])));\n break;\n default:\n this.rowKeys.sort(this.arrSort(this.props.rows));\n }\n }\n\n // Handle per-column sorting\n if (this.props.colSorts && Object.keys(this.props.colSorts).length > 0) {\n const colSorts = this.props.colSorts;\n this.colKeys.sort((a, b) => {\n // First, check if any sorted attribute has a difference\n for (let i = 0; i < this.props.cols.length; i++) {\n const attr = this.props.cols[i];\n if (attr && colSorts[attr]) {\n const sortDir = colSorts[attr] === 'ASC' ? 1 : -1;\n const sorter = getSort(this.props.sorters, attr);\n const comparison = sorter(a[i] || '', b[i] || '');\n if (comparison !== 0) {\n return sortDir * comparison;\n }\n }\n }\n // If sorted attributes are equal, use default sorting for remaining attributes\n return this.arrSort(this.props.cols)(a, b);\n });\n } else {\n // Use global col order\n switch (this.props.colOrder) {\n case 'value_a_to_z':\n this.colKeys.sort((a, b) => naturalSort(v([], a), v([], b)));\n break;\n case 'value_z_to_a':\n this.colKeys.sort((a, b) => -naturalSort(v([], a), v([], b)));\n break;\n default:\n this.colKeys.sort(this.arrSort(this.props.cols));\n }\n }\n }\n }\n\n getColKeys() {\n this.sortKeys();\n return this.colKeys;\n }\n\n getRowKeys() {\n this.sortKeys();\n return this.rowKeys;\n }\n\n processRecord(record) {\n // this code is called in a tight loop\n const colKey = [];\n const rowKey = [];\n for (const x of Array.from(this.props.cols)) {\n colKey.push(x in record ? record[x] : 'null');\n }\n for (const x of Array.from(this.props.rows)) {\n rowKey.push(x in record ? record[x] : 'null');\n }\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n\n this.allTotal.push(record);\n\n if (rowKey.length !== 0) {\n if (!this.rowTotals[flatRowKey]) {\n this.rowKeys.push(rowKey);\n this.rowTotals[flatRowKey] = this.createAggregatorCell(rowKey, []);\n }\n this.rowTotals[flatRowKey].push(record);\n }\n\n if (colKey.length !== 0) {\n if (!this.colTotals[flatColKey]) {\n this.colKeys.push(colKey);\n this.colTotals[flatColKey] = this.createAggregatorCell([], colKey);\n }\n this.colTotals[flatColKey].push(record);\n }\n\n if (colKey.length !== 0 && rowKey.length !== 0) {\n if (!this.tree[flatRowKey]) {\n this.tree[flatRowKey] = {};\n }\n if (!this.tree[flatRowKey][flatColKey]) {\n this.tree[flatRowKey][flatColKey] = this.createAggregatorCell(\n rowKey,\n colKey\n );\n }\n this.tree[flatRowKey][flatColKey].push(record);\n }\n }\n\n getAggregator(rowKey, colKey, aggregationKey = this.primaryAggregation.key) {\n let resolvedKey = aggregationKey;\n if (\n resolvedKey &&\n !(resolvedKey in this.aggregatorFactories) &&\n this.aggregationKeyLookup[resolvedKey]\n ) {\n resolvedKey = this.aggregationKeyLookup[resolvedKey];\n }\n const cell = this.getAggregatorCell(rowKey, colKey);\n if (!cell) {\n return PivotData.emptyAggregator;\n }\n return cell.getInstance(resolvedKey) || PivotData.emptyAggregator;\n }\n\n getAggregatorCell(rowKey, colKey) {\n let cell;\n const flatRowKey = rowKey.join(String.fromCharCode(0));\n const flatColKey = colKey.join(String.fromCharCode(0));\n if (rowKey.length === 0 && colKey.length === 0) {\n cell = this.allTotal;\n } else if (rowKey.length === 0) {\n cell = this.colTotals[flatColKey];\n } else if (colKey.length === 0) {\n cell = this.rowTotals[flatRowKey];\n } else {\n cell =\n this.tree[flatRowKey] && this.tree[flatRowKey][flatColKey]\n ? this.tree[flatRowKey][flatColKey]\n : null;\n }\n return cell || null;\n }\n\n getAggregatorNames() {\n return this.aggregations.map(agg => agg.aggregatorName);\n }\n\n getAggregations() {\n return this.aggregations.map(agg => Object.assign({}, agg));\n }\n\n getPrimaryAggregatorName() {\n return this.primaryAggregatorName;\n }\n\n getPrimaryAggregation() {\n return Object.assign({}, this.primaryAggregation);\n }\n\n /**\n * Groups aggregations by their aggregatorName\n * @returns {Object} Object mapping aggregator names to arrays of aggregations\n * Example: { 'Count': [agg1, agg2], 'Sum': [agg3] }\n */\n groupAggregationsByType() {\n const grouped = {};\n this.aggregations.forEach(agg => {\n const aggName = agg.aggregatorName;\n if (!grouped[aggName]) {\n grouped[aggName] = [];\n }\n grouped[aggName].push(agg);\n });\n return grouped;\n }\n\n /**\n * Gets aggregations for a specific aggregator type\n * @param {string} aggregatorName - The aggregator name (e.g., 'Count', 'Sum')\n * @returns {Array} Array of aggregation configurations\n */\n getAggregationsByType(aggregatorName) {\n return this.aggregations.filter(\n agg => agg.aggregatorName === aggregatorName\n );\n }\n\n normalizeAggregations() {\n const defaultAggregatorName = Object.keys(this.props.aggregators)[0];\n const aggregationsProvided =\n Array.isArray(this.props.aggregations) &&\n this.props.aggregations.length > 0;\n const legacyAggregatorName =\n typeof this.props.aggregatorName === 'string'\n ? this.props.aggregatorName\n : null;\n const fallbackAggregatorName =\n legacyAggregatorName || defaultAggregatorName;\n const fallbackVals = Array.isArray(this.props.vals) ? this.props.vals : [];\n let aggregations = [];\n if (aggregationsProvided) {\n aggregations = this.props.aggregations;\n } else {\n aggregations = [\n {\n aggregatorName: fallbackAggregatorName,\n vals: fallbackVals,\n },\n ];\n }\n return aggregations.map((agg, idx) => {\n const aggregatorName =\n agg.aggregatorName ||\n (aggregationsProvided ? defaultAggregatorName : fallbackAggregatorName);\n const vals =\n typeof agg.vals !== 'undefined'\n ? agg.vals\n : aggregationsProvided\n ? []\n : fallbackVals.slice();\n const normalizedVals = Array.isArray(vals) ? vals : [];\n const key =\n agg.key ||\n `${aggregatorName || 'agg'}-${\n normalizedVals.length ? normalizedVals.join('|') : ''\n }-${idx}`;\n const label =\n agg.label ||\n (normalizedVals.length\n ? `${aggregatorName} of ${normalizedVals.join(', ')}`\n : aggregatorName);\n return {\n key,\n aggregatorName,\n vals: normalizedVals,\n label,\n };\n });\n }\n\n buildAggregatorFactories() {\n const factories = {};\n this.aggregations.forEach(agg => {\n if (!(agg.aggregatorName in this.props.aggregators)) {\n throw new Error(`unknown aggregator ${agg.aggregatorName}`);\n }\n factories[agg.key] = this.props.aggregators[agg.aggregatorName](agg.vals);\n });\n return factories;\n }\n\n createAggregatorCell(rowKey, colKey) {\n const instances = {};\n this.aggregations.forEach(agg => {\n instances[agg.key] = this.aggregatorFactories[agg.key](\n this,\n rowKey,\n colKey\n );\n });\n return new AggregatorCell(instances, this.primaryAggregation.key);\n }\n}\n\nPivotData.emptyAggregator = {\n push() {},\n value() {\n return null;\n },\n format() {\n return '';\n },\n};\n\n// can handle arrays or jQuery selections of tables\nPivotData.forEachRecord = function(input, derivedAttributes, f) {\n let addRecord, record;\n if (Object.getOwnPropertyNames(derivedAttributes).length === 0) {\n addRecord = f;\n } else {\n addRecord = function(record) {\n for (const k in derivedAttributes) {\n const derived = derivedAttributes[k](record);\n if (derived !== null) {\n record[k] = derived;\n }\n }\n return f(record);\n };\n }\n\n // if it's a function, have it call us back\n if (typeof input === 'function') {\n return input(addRecord);\n } else if (Array.isArray(input)) {\n if (Array.isArray(input[0])) {\n // array of arrays\n return (() => {\n const result = [];\n for (const i of Object.keys(input || {})) {\n const compactRecord = input[i];\n if (i > 0) {\n record = {};\n for (const j of Object.keys(input[0] || {})) {\n const k = input[0][j];\n record[k] = compactRecord[j];\n }\n result.push(addRecord(record));\n }\n }\n return result;\n })();\n }\n\n // array of objects\n return (() => {\n const result1 = [];\n for (record of Array.from(input)) {\n result1.push(addRecord(record));\n }\n return result1;\n })();\n }\n throw new Error('unknown input format');\n};\n\nPivotData.defaultProps = {\n aggregators: aggregators,\n cols: [],\n rows: [],\n vals: [],\n aggregatorName: Object.keys(aggregators)[0],\n aggregations: [],\n sorters: {},\n valueFilter: {},\n rowOrder: 'key_a_to_z',\n colOrder: 'key_a_to_z',\n rowSorts: {},\n colSorts: {},\n derivedAttributes: {},\n};\n\nPivotData.propTypes = {\n data: PropTypes.oneOfType([PropTypes.array, PropTypes.object, PropTypes.func])\n .isRequired,\n aggregatorName: PropTypes.string,\n aggregations: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string,\n aggregatorName: PropTypes.string,\n vals: PropTypes.arrayOf(PropTypes.string),\n label: PropTypes.string,\n })\n ),\n cols: PropTypes.arrayOf(PropTypes.string),\n rows: PropTypes.arrayOf(PropTypes.string),\n vals: PropTypes.arrayOf(PropTypes.string),\n valueFilter: PropTypes.objectOf(PropTypes.objectOf(PropTypes.bool)),\n sorters: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.objectOf(\n PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.array])\n ),\n ]),\n derivedAttributes: PropTypes.objectOf(PropTypes.func),\n precomputedData: PropTypes.object,\n onRecordProcessed: PropTypes.func,\n rowOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n colOrder: PropTypes.oneOf(['key_a_to_z', 'value_a_to_z', 'value_z_to_a']),\n rowSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n colSorts: PropTypes.objectOf(PropTypes.oneOf(['ASC', 'DESC'])),\n};\n\nexport {\n aggregatorTemplates,\n aggregators,\n derivers,\n locales,\n naturalSort,\n numberFormat,\n getSort,\n sortAs,\n builtInSorters,\n detectDataType,\n createSorterByType,\n sortersHaveFunctions,\n PivotData,\n};\n"]}
|
package/dist/pivot-worker.js
CHANGED
|
@@ -419,6 +419,7 @@ self.addEventListener('message', function (event) {
|
|
|
419
419
|
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Utilities__ = __webpack_require__(6);
|
|
420
420
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
421
421
|
|
|
422
|
+
/* eslint-disable no-console */
|
|
422
423
|
/* eslint-disable valid-jsdoc */
|
|
423
424
|
/*
|
|
424
425
|
* Shared pivot-computation logic.
|
|
@@ -434,7 +435,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
|
|
|
434
435
|
|
|
435
436
|
// A progress callback fires every N processed records so the UI can render
|
|
436
437
|
// progress without adding measurable overhead to the per-record loop.
|
|
437
|
-
var PROGRESS_BATCH_SIZE =
|
|
438
|
+
var PROGRESS_BATCH_SIZE = 200;
|
|
438
439
|
|
|
439
440
|
// Datasets smaller than this are computed synchronously on the main thread;
|
|
440
441
|
// larger ones are handed off to the Web Worker.
|
|
@@ -662,16 +663,11 @@ function canComputeInWorker(props) {
|
|
|
662
663
|
return false;
|
|
663
664
|
}
|
|
664
665
|
var threshold = typeof options.threshold === 'number' ? options.threshold : DEFAULT_WORKER_THRESHOLD;
|
|
666
|
+
|
|
665
667
|
var data = props.data;
|
|
666
668
|
if (!Array.isArray(data) || data.length < threshold) {
|
|
667
669
|
return false;
|
|
668
670
|
}
|
|
669
|
-
if (props.derivedAttributes && Object.keys(props.derivedAttributes).length > 0) {
|
|
670
|
-
return false;
|
|
671
|
-
}
|
|
672
|
-
if (props.aggregators !== __WEBPACK_IMPORTED_MODULE_0__Utilities__["a" /* PivotData */].defaultProps.aggregators) {
|
|
673
|
-
return false;
|
|
674
|
-
}
|
|
675
671
|
return true;
|
|
676
672
|
}
|
|
677
673
|
|
|
@@ -1079,7 +1075,7 @@ var usFmtPct = numberFormat({
|
|
|
1079
1075
|
|
|
1080
1076
|
// Emit a progress callback every N processed records without adding
|
|
1081
1077
|
// measurable overhead to the per-record loop.
|
|
1082
|
-
var RECORD_PROGRESS_BATCH_SIZE =
|
|
1078
|
+
var RECORD_PROGRESS_BATCH_SIZE = 200;
|
|
1083
1079
|
|
|
1084
1080
|
// Returns true when the sorters prop itself, or any of its entries, is a
|
|
1085
1081
|
// function. Function-based sorters cannot be transferred to a Web Worker, so
|
package/dist/pivotCompute.js
CHANGED
|
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.WORKER_DEBOUNCE_MS = exports.DEFAULT_WORKER_THRESHOLD = exports.PROGRESS_BATCH_SIZE = undefined;
|
|
7
7
|
|
|
8
|
-
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* eslint-disable
|
|
8
|
+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /* eslint-disable no-console */
|
|
9
|
+
/* eslint-disable valid-jsdoc */
|
|
9
10
|
/*
|
|
10
11
|
* Shared pivot-computation logic.
|
|
11
12
|
*
|
|
@@ -31,7 +32,7 @@ var _Utilities = require('./Utilities');
|
|
|
31
32
|
|
|
32
33
|
// A progress callback fires every N processed records so the UI can render
|
|
33
34
|
// progress without adding measurable overhead to the per-record loop.
|
|
34
|
-
var PROGRESS_BATCH_SIZE = exports.PROGRESS_BATCH_SIZE =
|
|
35
|
+
var PROGRESS_BATCH_SIZE = exports.PROGRESS_BATCH_SIZE = 200;
|
|
35
36
|
|
|
36
37
|
// Datasets smaller than this are computed synchronously on the main thread;
|
|
37
38
|
// larger ones are handed off to the Web Worker.
|
|
@@ -259,16 +260,11 @@ function canComputeInWorker(props) {
|
|
|
259
260
|
return false;
|
|
260
261
|
}
|
|
261
262
|
var threshold = typeof options.threshold === 'number' ? options.threshold : DEFAULT_WORKER_THRESHOLD;
|
|
263
|
+
|
|
262
264
|
var data = props.data;
|
|
263
265
|
if (!Array.isArray(data) || data.length < threshold) {
|
|
264
266
|
return false;
|
|
265
267
|
}
|
|
266
|
-
if (props.derivedAttributes && Object.keys(props.derivedAttributes).length > 0) {
|
|
267
|
-
return false;
|
|
268
|
-
}
|
|
269
|
-
if (props.aggregators !== _Utilities.PivotData.defaultProps.aggregators) {
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
272
268
|
return true;
|
|
273
269
|
}
|
|
274
270
|
//# sourceMappingURL=pivotCompute.js.map
|
package/dist/pivotCompute.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pivotCompute.js"],"names":["materializeData","computePivotState","serializePivotData","sortersHaveFunctions","sanitizeSorters","createWorkerConfig","createComputeSignature","canComputeInWorker","PROGRESS_BATCH_SIZE","DEFAULT_WORKER_THRESHOLD","WORKER_DEBOUNCE_MS","data","derivedAttributes","onProgress","attrValues","materializedInput","total","Array","isArray","length","recordsProcessed","PivotData","forEachRecord","record","push","Object","keys","attr","null","value","totalRecords","materialized","config","pivotData","assign","onRecordProcessed","processed","getRowKeys","getColKeys","serializeCell","values","aggregations","forEach","instance","cell","getInstance","agg","key","tree","rowBranch","flatRowKey","serializedRow","flatColKey","serializeTotals","serialized","totals","flatKey","rowKeys","map","slice","colKeys","rowTotals","colTotals","allTotal","sorters","some","clean","sorter","props","rows","cols","aggregatorName","vals","valueFilter","rowOrder","colOrder","rowSorts","colSorts","JSON","stringify","options","enabled","Worker","threshold","aggregators","defaultProps"],"mappings":"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","file":"pivotCompute.js","sourcesContent":["/* eslint-disable valid-jsdoc */\n/*\n * Shared pivot-computation logic.\n *\n * This module contains the pure, DOM-free parts of the pivot computation so\n * that the exact same code paths can run:\n * - on the main thread (classic synchronous rendering path), and\n * - inside a Web Worker (src/pivotWorker.js) for large datasets.\n *\n * It must stay free of React and of any `window`/`document` references.\n */\nimport {PivotData} from './Utilities';\n\n// A progress callback fires every N processed records so the UI can render\n// progress without adding measurable overhead to the per-record loop.\nexport const PROGRESS_BATCH_SIZE = 20000;\n\n// Datasets smaller than this are computed synchronously on the main thread;\n// larger ones are handed off to the Web Worker.\nexport const DEFAULT_WORKER_THRESHOLD = 200;\n\n// Trailing debounce before a worker computation is dispatched, so rapid\n// interactions do not queue one full computation per single change.\nexport const WORKER_DEBOUNCE_MS = 200;\n\n/*\n * Walks the raw input once and computes the attribute-value inventory plus a\n * \"materialized\" copy of the records (with derived attributes applied).\n * This is an exact extraction of the historical PivotTableUI behavior.\n *\n * onProgress receives (processed, total, phase); total is null when it is\n * unknown upfront (function-based data sources).\n */\nexport function materializeData(data, derivedAttributes, onProgress) {\n const attrValues = {};\n const materializedInput = [];\n const total = Array.isArray(data) ? data.length : null;\n let recordsProcessed = 0;\n PivotData.forEachRecord(data, derivedAttributes || {}, function(record) {\n materializedInput.push(record);\n for (const attr of Object.keys(record)) {\n if (!(attr in attrValues)) {\n attrValues[attr] = {};\n if (recordsProcessed > 0) {\n attrValues[attr].null = recordsProcessed;\n }\n }\n }\n for (const attr in attrValues) {\n const value = attr in record ? record[attr] : 'null';\n if (!(value in attrValues[attr])) {\n attrValues[attr][value] = 0;\n }\n attrValues[attr][value]++;\n }\n recordsProcessed++;\n if (onProgress && recordsProcessed % PROGRESS_BATCH_SIZE === 0) {\n onProgress(recordsProcessed, total, 'materialize');\n }\n });\n return {attrValues, materializedInput, totalRecords: recordsProcessed};\n}\n\n/*\n * Aggregates an already-materialized dataset into a PivotData instance and\n * serializes the result into a plain (structured-cloneable) object that can\n * cross the worker boundary and later hydrate PivotData on the main thread.\n */\nexport function computePivotState(materialized, config, onProgress) {\n const total = materialized.totalRecords;\n const pivotData = new PivotData(\n Object.assign({}, config, {\n data: materialized.materializedInput,\n derivedAttributes: {},\n onRecordProcessed: processed => {\n if (onProgress) {\n onProgress(processed, total, 'aggregate');\n }\n },\n })\n );\n // Force key sorting to happen while we are (possibly) inside the worker.\n pivotData.getRowKeys();\n pivotData.getColKeys();\n return serializePivotData(pivotData, materialized);\n}\n\n/*\n * Serializes a fully-built PivotData instance into plain data. Only the final\n * aggregated value of every cell is kept; `value()` and `format()` behavior\n * are reconstructed on the main thread by the PivotData hydration step.\n */\nexport function serializePivotData(pivotData, materialized) {\n const serializeCell = cell => {\n const values = {};\n pivotData.aggregations.forEach(agg => {\n const instance = cell.getInstance(agg.key);\n if (instance) {\n values[agg.key] = instance.value();\n }\n });\n return {values};\n };\n\n const tree = {};\n Object.keys(pivotData.tree).forEach(flatRowKey => {\n const rowBranch = pivotData.tree[flatRowKey];\n const serializedRow = {};\n Object.keys(rowBranch).forEach(flatColKey => {\n serializedRow[flatColKey] = serializeCell(rowBranch[flatColKey]);\n });\n tree[flatRowKey] = serializedRow;\n });\n\n const serializeTotals = totals => {\n const serialized = {};\n Object.keys(totals).forEach(flatKey => {\n serialized[flatKey] = serializeCell(totals[flatKey]);\n });\n return serialized;\n };\n\n return {\n rowKeys: pivotData.rowKeys.map(key => key.slice()),\n colKeys: pivotData.colKeys.map(key => key.slice()),\n tree,\n rowTotals: serializeTotals(pivotData.rowTotals),\n colTotals: serializeTotals(pivotData.colTotals),\n allTotal: serializeCell(pivotData.allTotal),\n aggregations: pivotData.aggregations.map(agg => Object.assign({}, agg)),\n attrValues: materialized.attrValues,\n materializedInput: materialized.materializedInput,\n totalRecords: materialized.totalRecords,\n };\n}\n\n/*\n * Sorters containing functions cannot be structured-cloned into a worker.\n * Returns true when the sorters prop itself, or any of its entries, is a\n * function. In that case PivotData re-sorts on the main thread after\n * hydration (distinct keys are few, so this stays cheap).\n */\nexport function sortersHaveFunctions(sorters) {\n if (typeof sorters === 'function') {\n return true;\n }\n if (!sorters || typeof sorters !== 'object') {\n return false;\n }\n return Object.keys(sorters).some(attr => typeof sorters[attr] === 'function');\n}\n\n/*\n * Returns a structured-cloneable subset of the sorters prop: data-type names\n * and sample-value arrays survive the worker boundary, functions do not.\n */\nexport function sanitizeSorters(sorters) {\n if (\n !sorters ||\n typeof sorters !== 'object' ||\n typeof sorters === 'function'\n ) {\n return {};\n }\n const clean = {};\n Object.keys(sorters).forEach(attr => {\n const sorter = sorters[attr];\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n clean[attr] = sorter;\n }\n });\n return clean;\n}\n\n/*\n * Extracts exactly the props PivotData needs to compute results, with\n * everything non-serializable stripped, so the object can be posted to the\n * worker and fed straight into PivotData.\n */\nexport function createWorkerConfig(props) {\n return {\n rows: props.rows,\n cols: props.cols,\n aggregatorName: props.aggregatorName,\n aggregations: props.aggregations,\n vals: props.vals,\n valueFilter: props.valueFilter,\n sorters: sanitizeSorters(props.sorters),\n rowOrder: props.rowOrder,\n colOrder: props.colOrder,\n rowSorts: props.rowSorts,\n colSorts: props.colSorts,\n };\n}\n\n/*\n * Stable string signature of everything that influences a worker computation.\n * Data identity is NOT part of it; callers append their own data version.\n */\nexport function createComputeSignature(props) {\n return JSON.stringify(createWorkerConfig(props));\n}\n\n/*\n * Decides whether the current props can be computed inside the Web Worker.\n * Anything that cannot be structured-cloned (function data sources, custom\n * derivedAttributes, custom aggregator maps) forces the classic path.\n * Function-based sorters are allowed: they are re-applied on the main thread.\n */\nexport function canComputeInWorker(props, options = {}) {\n if (options.enabled === false) {\n return false;\n }\n if (typeof Worker === 'undefined') {\n return false;\n }\n const threshold =\n typeof options.threshold === 'number'\n ? options.threshold\n : DEFAULT_WORKER_THRESHOLD;\n const data = props.data;\n if (!Array.isArray(data) || data.length < threshold) {\n return false;\n }\n if (\n props.derivedAttributes &&\n Object.keys(props.derivedAttributes).length > 0\n ) {\n return false;\n }\n if (props.aggregators !== PivotData.defaultProps.aggregators) {\n return false;\n }\n return true;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/pivotCompute.js"],"names":["materializeData","computePivotState","serializePivotData","sortersHaveFunctions","sanitizeSorters","createWorkerConfig","createComputeSignature","canComputeInWorker","PROGRESS_BATCH_SIZE","DEFAULT_WORKER_THRESHOLD","WORKER_DEBOUNCE_MS","data","derivedAttributes","onProgress","attrValues","materializedInput","total","Array","isArray","length","recordsProcessed","PivotData","forEachRecord","record","push","Object","keys","attr","null","value","totalRecords","materialized","config","pivotData","assign","onRecordProcessed","processed","getRowKeys","getColKeys","serializeCell","values","aggregations","forEach","instance","cell","getInstance","agg","key","tree","rowBranch","flatRowKey","serializedRow","flatColKey","serializeTotals","serialized","totals","flatKey","rowKeys","map","slice","colKeys","rowTotals","colTotals","allTotal","sorters","some","clean","sorter","props","rows","cols","aggregatorName","vals","valueFilter","rowOrder","colOrder","rowSorts","colSorts","JSON","stringify","options","enabled","Worker","threshold"],"mappings":"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","file":"pivotCompute.js","sourcesContent":["/* eslint-disable no-console */\n/* eslint-disable valid-jsdoc */\n/*\n * Shared pivot-computation logic.\n *\n * This module contains the pure, DOM-free parts of the pivot computation so\n * that the exact same code paths can run:\n * - on the main thread (classic synchronous rendering path), and\n * - inside a Web Worker (src/pivotWorker.js) for large datasets.\n *\n * It must stay free of React and of any `window`/`document` references.\n */\nimport {PivotData} from './Utilities';\n\n// A progress callback fires every N processed records so the UI can render\n// progress without adding measurable overhead to the per-record loop.\nexport const PROGRESS_BATCH_SIZE = 200;\n\n// Datasets smaller than this are computed synchronously on the main thread;\n// larger ones are handed off to the Web Worker.\nexport const DEFAULT_WORKER_THRESHOLD = 200;\n\n// Trailing debounce before a worker computation is dispatched, so rapid\n// interactions do not queue one full computation per single change.\nexport const WORKER_DEBOUNCE_MS = 200;\n\n/*\n * Walks the raw input once and computes the attribute-value inventory plus a\n * \"materialized\" copy of the records (with derived attributes applied).\n * This is an exact extraction of the historical PivotTableUI behavior.\n *\n * onProgress receives (processed, total, phase); total is null when it is\n * unknown upfront (function-based data sources).\n */\nexport function materializeData(data, derivedAttributes, onProgress) {\n const attrValues = {};\n const materializedInput = [];\n const total = Array.isArray(data) ? data.length : null;\n let recordsProcessed = 0;\n PivotData.forEachRecord(data, derivedAttributes || {}, function(record) {\n materializedInput.push(record);\n for (const attr of Object.keys(record)) {\n if (!(attr in attrValues)) {\n attrValues[attr] = {};\n if (recordsProcessed > 0) {\n attrValues[attr].null = recordsProcessed;\n }\n }\n }\n for (const attr in attrValues) {\n const value = attr in record ? record[attr] : 'null';\n if (!(value in attrValues[attr])) {\n attrValues[attr][value] = 0;\n }\n attrValues[attr][value]++;\n }\n recordsProcessed++;\n if (onProgress && recordsProcessed % PROGRESS_BATCH_SIZE === 0) {\n onProgress(recordsProcessed, total, 'materialize');\n }\n });\n return {attrValues, materializedInput, totalRecords: recordsProcessed};\n}\n\n/*\n * Aggregates an already-materialized dataset into a PivotData instance and\n * serializes the result into a plain (structured-cloneable) object that can\n * cross the worker boundary and later hydrate PivotData on the main thread.\n */\nexport function computePivotState(materialized, config, onProgress) {\n const total = materialized.totalRecords;\n const pivotData = new PivotData(\n Object.assign({}, config, {\n data: materialized.materializedInput,\n derivedAttributes: {},\n onRecordProcessed: processed => {\n if (onProgress) {\n onProgress(processed, total, 'aggregate');\n }\n },\n })\n );\n // Force key sorting to happen while we are (possibly) inside the worker.\n pivotData.getRowKeys();\n pivotData.getColKeys();\n return serializePivotData(pivotData, materialized);\n}\n\n/*\n * Serializes a fully-built PivotData instance into plain data. Only the final\n * aggregated value of every cell is kept; `value()` and `format()` behavior\n * are reconstructed on the main thread by the PivotData hydration step.\n */\nexport function serializePivotData(pivotData, materialized) {\n const serializeCell = cell => {\n const values = {};\n pivotData.aggregations.forEach(agg => {\n const instance = cell.getInstance(agg.key);\n if (instance) {\n values[agg.key] = instance.value();\n }\n });\n return {values};\n };\n\n const tree = {};\n Object.keys(pivotData.tree).forEach(flatRowKey => {\n const rowBranch = pivotData.tree[flatRowKey];\n const serializedRow = {};\n Object.keys(rowBranch).forEach(flatColKey => {\n serializedRow[flatColKey] = serializeCell(rowBranch[flatColKey]);\n });\n tree[flatRowKey] = serializedRow;\n });\n\n const serializeTotals = totals => {\n const serialized = {};\n Object.keys(totals).forEach(flatKey => {\n serialized[flatKey] = serializeCell(totals[flatKey]);\n });\n return serialized;\n };\n\n return {\n rowKeys: pivotData.rowKeys.map(key => key.slice()),\n colKeys: pivotData.colKeys.map(key => key.slice()),\n tree,\n rowTotals: serializeTotals(pivotData.rowTotals),\n colTotals: serializeTotals(pivotData.colTotals),\n allTotal: serializeCell(pivotData.allTotal),\n aggregations: pivotData.aggregations.map(agg => Object.assign({}, agg)),\n attrValues: materialized.attrValues,\n materializedInput: materialized.materializedInput,\n totalRecords: materialized.totalRecords,\n };\n}\n\n/*\n * Sorters containing functions cannot be structured-cloned into a worker.\n * Returns true when the sorters prop itself, or any of its entries, is a\n * function. In that case PivotData re-sorts on the main thread after\n * hydration (distinct keys are few, so this stays cheap).\n */\nexport function sortersHaveFunctions(sorters) {\n if (typeof sorters === 'function') {\n return true;\n }\n if (!sorters || typeof sorters !== 'object') {\n return false;\n }\n return Object.keys(sorters).some(attr => typeof sorters[attr] === 'function');\n}\n\n/*\n * Returns a structured-cloneable subset of the sorters prop: data-type names\n * and sample-value arrays survive the worker boundary, functions do not.\n */\nexport function sanitizeSorters(sorters) {\n if (\n !sorters ||\n typeof sorters !== 'object' ||\n typeof sorters === 'function'\n ) {\n return {};\n }\n const clean = {};\n Object.keys(sorters).forEach(attr => {\n const sorter = sorters[attr];\n if (typeof sorter === 'string' || Array.isArray(sorter)) {\n clean[attr] = sorter;\n }\n });\n return clean;\n}\n\n/*\n * Extracts exactly the props PivotData needs to compute results, with\n * everything non-serializable stripped, so the object can be posted to the\n * worker and fed straight into PivotData.\n */\nexport function createWorkerConfig(props) {\n return {\n rows: props.rows,\n cols: props.cols,\n aggregatorName: props.aggregatorName,\n aggregations: props.aggregations,\n vals: props.vals,\n valueFilter: props.valueFilter,\n sorters: sanitizeSorters(props.sorters),\n rowOrder: props.rowOrder,\n colOrder: props.colOrder,\n rowSorts: props.rowSorts,\n colSorts: props.colSorts,\n };\n}\n\n/*\n * Stable string signature of everything that influences a worker computation.\n * Data identity is NOT part of it; callers append their own data version.\n */\nexport function createComputeSignature(props) {\n return JSON.stringify(createWorkerConfig(props));\n}\n\n/*\n * Decides whether the current props can be computed inside the Web Worker.\n * Anything that cannot be structured-cloned (function data sources, custom\n * derivedAttributes, custom aggregator maps) forces the classic path.\n * Function-based sorters are allowed: they are re-applied on the main thread.\n */\nexport function canComputeInWorker(props, options = {}) {\n if (options.enabled === false) {\n return false;\n }\n if (typeof Worker === 'undefined') {\n return false;\n }\n const threshold =\n typeof options.threshold === 'number'\n ? options.threshold\n : DEFAULT_WORKER_THRESHOLD;\n \n const data = props.data;\n if (!Array.isArray(data) || data.length < threshold) {\n return false;\n }\n return true;\n}\n"]}
|
package/dist/pivottable.css
CHANGED