UNPKG

@chartshq/datamodel

Version:

An environment with `node`, `rustup` and `wasm-pack` set up.

1 lines 8.3 kB
var __read=this&&this.__read||function(e,t){var i="function"==typeof Symbol&&e[Symbol.iterator];if(!i)return e;var o,r,n=i.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(o=n.next()).done;)a.push(o.value)}catch(e){r={error:e}}finally{try{o&&!o.done&&(i=n.return)&&i.call(n)}finally{if(r)throw r.error}}return a},__spread=this&&this.__spread||function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(__read(arguments[t]));return e};import{ContextType}from"../../constants/context";import{_aggregationResolver}from"../../constants/aggregations";import{FilteringModesType,_modeResolver}from"../../constants/filtering-modes";import{_sortOrderResolver}from"../../constants/sort";import{WasmDataModel,WasmMeta}from"./utils";import{FieldSubtype,ROW_ID}from"../../constants/fields";import Categorical,{categoricalFieldCreator}from"./fields/categorical";import Continuous,{continuousFieldCreator}from"./fields/continuous";import Temporal,{temporalFieldCreator}from"./fields/temporal";import{selectionSanitizeQuery,getRawValue}from"./utils";import RowId,{idFieldCreator,getIdFieldSchema}from"./fields/row_id";var WasmContext=function(){function e(t,i){if(this._contextName=ContextType.WASM,this._fieldOrder=[],this._fieldMap=new Map,this._dataMeta={rows:0,columns:0},t instanceof e)this._context=t._context,this._fieldOrder=t._fieldOrder,this._fieldMap=t._fieldMap;else{var o=t.data,r=t.schema,n=i,a=n.rows,d=n.columns;this._dataMeta=i,a&&(this._context=new WasmDataModel(new WasmMeta(a,d))),this.createFields(o,r)}}return e.prototype.updateFieldMap=function(e){var t=e.field,i=e.index,o=t.name(),r=i===Number.MAX_VALUE?this._fieldMap.size:i;this._fieldMap.set(o,{field:t,index:r})},e.prototype.createFields=function(e,t){var i=this;t.forEach(function(t,o){i.createField(e[o],t)}),this.createField(new Array(e[0].length).fill(0).map(function(e,t){return t}),getIdFieldSchema())},e.prototype.createField=function(e,t){switch(t.subtype){case FieldSubtype.CATEGORICAL:this.updateFieldMap(categoricalFieldCreator(e,t,this._context));break;case FieldSubtype.CONTINUOUS:this.updateFieldMap(continuousFieldCreator(e,t,this._context));break;case FieldSubtype.TEMPORAL:this.updateFieldMap(temporalFieldCreator(e,t,this._context));break;case FieldSubtype.ROWID:this.updateFieldMap(idFieldCreator(e,t,this._context))}this._fieldOrder.push(t.name)},e.prototype.updateFields=function(e){var t=this;this._fieldOrder.forEach(function(i){var o=e.get(i),r=o.field,n=o.index,a=r.schema();switch(a.subtype){case FieldSubtype.CATEGORICAL:var d=new Categorical(a,t._context.get_categorical_field(n));d._setMeta(r._getMeta()),t.updateFieldMap({field:d,index:n});break;case FieldSubtype.CONTINUOUS:t.updateFieldMap({index:n,field:new Continuous(a,t._context.get_continuous_field(n))});break;case FieldSubtype.TEMPORAL:t.updateFieldMap({field:new Temporal(a,t._context.get_temporal_field(n)),index:n});break;case FieldSubtype.ROWID:t.updateFieldMap({field:new RowId(a,t._context.get_id_field(n)),index:n})}})},e.prototype.setContextInfo=function(e,t,i){void 0===e&&(e=this._context),void 0===t&&(t=__spread(this._fieldOrder)),void 0===i&&(i=this._fieldMap),this._context?(this._context=e,this._dataMeta={rows:e.row_count(),columns:e.column_count()},this._fieldOrder=t,this._fieldMap=new Map,this.updateFields(i)):(this._fieldOrder=t,this._fieldMap=i)},e.prototype.getClonedFieldMap=function(e,t){var i=new Map;return t.forEach(function(t,o){var r=e._fieldMap.get(t).field;i.set(t,{field:r,index:o})}),i},e.prototype.getField=function(e){var t=(this._fieldMap.get(e)||{}).field;return void 0===t?void 0:t},e.prototype.getData=function(e,t){var i=this;void 0===e&&(e=0);var o=[],r=[],n=this._fieldMap.get(this._fieldOrder[0]);if(n){for(var a=n.field.getRowsCount(),d=t||a,s=function(e){r.push([]),l._fieldOrder.forEach(function(t,o){var n=i._fieldMap.get(t).field,a=r.length-1,d=n.data()||[];r[a][o]=d[e]})},l=this,c=e;c<d;c++)s(c);return{schema:o=this.getSchema(),data:r}}return{schema:o,data:[]}},e.prototype.getSchema=function(){var e=this;return this._fieldOrder.map(function(t){return e._fieldMap.get(t).field.schema()})},e.prototype.getDataMeta=function(){return this._dataMeta},e.prototype.sort=function(e){var t=this,i=this.clone();if(this._context){var o=[];e.forEach(function(e){var i=t._fieldMap.get(e[0]);i&&o.push([i.index,_sortOrderResolver(e[1])])});var r=this._context.sort(o);i.setContextInfo(r)}return i},e.prototype.groupBy=function(e,t,i){var o=this;void 0===t&&(t=[]),void 0===i&&(i={createId:!0});var r=this.clone(),n=__read(e.reduce(function(e,t){var i=o._fieldMap.get(t);return i&&(i.field instanceof Categorical||i.field instanceof Temporal)&&(e[0].push(t),e[1].push(i.index)),e},[[],[]]),2),a=n[0],d=n[1],s=[];t.map(function(e){var t=o._fieldMap.get(e.field);t&&s.push([t.index,_aggregationResolver(e.aggn)])});var l=this._context?this._context.group_by(d,s):void 0,c=this._fieldOrder.filter(function(e){var t;return(null===(t=o._fieldMap.get(e))||void 0===t?void 0:t.field)instanceof Continuous});c=__spread(a,c);var f=this.getClonedFieldMap(r,c);if(r.setContextInfo(l,c,f),!1!==i.createId){var p=r._fieldMap.get(r._fieldOrder[0]).field.getRowsCount();r.createField(new Array(p).fill(0).map(function(e,t){return t}),getIdFieldSchema())}return r},e.prototype.select=function(e,t){var i=this.clone(),o=i;if(this._context){var r=selectionSanitizeQuery(e,this._fieldMap);if(r.operator){var n=(t||{}).mode,a=void 0===n?FilteringModesType.NORMAL:n,d=_modeResolver(a),s=this._context.select(r,d);switch(a){case FilteringModesType.ALL:i.setContextInfo(s.get_filtered_dm());var l=this.clone();l.setContextInfo(s.get_unfiltered_dm()),o=[i,l];break;case FilteringModesType.INVERSE:i.setContextInfo(s.get_unfiltered_dm()),o=i;break;default:i.setContextInfo(s.get_filtered_dm()),o=i}s.free()}else o.setContextInfo(o._context&&o._context.clone())}return o},e.prototype.project=function(e,t){var i=this,o=this.clone(),r=o,n=(t||{}).mode,a=void 0===n?FilteringModesType.NORMAL:n,d=[],s=[];e.map(function(e){var t=i._fieldMap.get(e);t&&(d.push(e),s.push(t.index))}),d.push(ROW_ID);var l,c=this._fieldOrder.filter(function(e,t){return!s.includes(t)}),f=_modeResolver(a),p=this._context?this._context.project({columns:s,mode:f}):void 0;switch(a){case FilteringModesType.ALL:l=this.getClonedFieldMap(o,d),o.setContextInfo(p?p.get_filtered_dm():void 0,d,l);var u=this.clone();l=this.getClonedFieldMap(u,c),u.setContextInfo(p?p.get_unfiltered_dm():void 0,c,l),r=[o,u];break;case FilteringModesType.INVERSE:l=this.getClonedFieldMap(o,c),o.setContextInfo(p?p.get_unfiltered_dm():void 0,c,l),r=o;break;default:l=this.getClonedFieldMap(o,d),o.setContextInfo(p?p.get_filtered_dm():void 0,d,l),r=o}return p&&p.free(),r},e.prototype.splitByRow=function(e){var t=this,i=[];if(this._context){var o=[];e.forEach(function(e){var i=t._fieldMap.get(e);i&&o.push(i.index)});var r=this._context.split_by_row(o),n=r.get_count();i=[];for(var a=0;a<n;a++){var d=this.clone();d.setContextInfo(r.get_dm()),i.push(d)}r.free()}return i},e.prototype.clone=function(){return new e(this)},e.prototype.dispose=function(e){var t=this,i=e.disposePartialFields,o=e.disposeFields,r=i.dispose,n=i.values,a=void 0===n?[]:n;if(r&&this._context){var d=a.map(function(e){return t._fieldMap.get(e).index});this._context.dispose(d)}o&&this._fieldOrder.forEach(function(e){t._fieldMap.get(e).field.dispose()}),this._context&&this._context.free()},e.prototype.addIdField=function(e){return this.createField(Array.from(e),getIdFieldSchema()),this},e.prototype.calculateVariable=function(e,t,i){var o=this,r=this.clone();if(this._context){var n=t.map(function(e){return o._fieldMap.get(e).field.data()}),a=e.subtype,d=void 0===a?FieldSubtype.CATEGORICAL:a,s=e.format,l=new Array(this._context.get_partial_row_count());l.fill(-1);for(var c=this._context.get_eligible_rows(),f=function(e){var t=i.apply(void 0,__spread(n.map(function(t){return t[e]})));d===FieldSubtype.TEMPORAL?l[c[e]]=getRawValue(d,t,s||function(e){return e}):l[c[e]]=t},p=0;p<this._dataMeta.rows;p++)f(p);var u=this._context.clone();r.setContextInfo(u),r.createField(l,e)}return r},e.prototype.getMatchingIds=function(e){return Array.from(this._context&&e._context?this._context.get_matching_ids(e._context):[])},e.prototype.context=function(){return this._context},e}();export default WasmContext;