@bicharts/shape-core 0.5.46 → 0.5.47

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.
Files changed (2) hide show
  1. package/dist/index.mjs +1 -1
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
2
- import{a as Ht,b as Vt}from"./chunk-5233JUKA.mjs";import{a as Pt,b as It,c as Rt,d as Nt,e as zt,f as Gt,g as Ft,h as $t,i as Dt,j as Kt,k as Bt}from"./chunk-LDC2C4WC.mjs";import{a as Ot}from"./chunk-QEH7WTLB.mjs";import{a as Et,b as wt}from"./chunk-2LR73DNS.mjs";import{a as kt,b as Mt,c as Lt}from"./chunk-NWDPA7DG.mjs";import{a as q,b as j,c as bt,d as Tt,e as _t,f as St}from"./chunk-SAASSIJ7.mjs";import{a as b,f as T,g as y,h as _,i as w,j as ft,k as gt,l as Z,m as g,n as pt,o as mt,p as yt,q as S,r as At,s as ht,t as vt,u as xt,v as k,w as Ct}from"./chunk-E6SVTFAW.mjs";import"./chunk-5MRZID36.mjs";import{a as lt,b as ct,c as dt}from"./chunk-WBEROMBG.mjs";var W=["rate","ratio","pct","percent","percentage","rating","share","score","index","nps","csat","margin","yield","coverage","utilization","z[_-]?score","average","avg","mean","median","stddev","variance","gpa","percentile","quantile","efficiency","accuracy","probability","multiplier","coefficient","correlation","occupancy","age","bmi","temperature","density","pressure","humidity","ph","velocity","speed","elevation","altitude","latency","throughput","bandwidth","iops"],X=["pct","percent","percentage","rate","ratio","rating","share","score","index","nps","csat","margin","yield","coverage","utilization","gpa","percentile","quantile","bmi","density","pressure","humidity","velocity","efficiency","occupancy","latency","throughput","bandwidth","iops"],Y=["latitude","longitude"],J=["latitude","longitude"],Q=/^\s*(sum|count|count\s+distinct|distinct\s+count)\s+of\s+/i,Ut=/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])/g,Zt=new RegExp("\\b("+W.join("|")+")\\b|("+X.join("|")+")$","i"),qt=new RegExp("\\b("+Y.join("|")+")\\b|("+J.join("|")+")$","i");function M(e){return e?String(e).replace(Q,"").trim():""}function tt(e){return!!e&&Q.test(String(e))}function jt(e){let t=M(e);return t.length===0?"":t.replace(Ut," ")}function et(e,t){return t?e.test(jt(t))||e.test(M(t)):!1}function L(e){return et(qt,e)}function nt(e){return et(Zt,e)||L(e)}var it=/int|double|decimal|single|float|number|currency|money/i;function Wt(e){let t=String(e?.valueNature??"").trim().toLowerCase();return t==="categorical"?"Categorical":t==="ordinal"?"Ordinal":t==="continuous"||e?.isMeasure===!0||it.test(String(e?.dataType??""))?"Continuous":"Categorical"}function Xt(e){return e?.isMeasure===!0||it.test(String(e?.dataType??""))}function z(e){let t=e??{},i=Wt(t);if(i!=="Continuous")return{nature:i,additivity:"unknown",basis:"role",suppressed:!1};if(L(t.name))return{nature:i,additivity:"positional",basis:"name",suppressed:!0};let r=String(t.additivity??"").trim().toLowerCase();if(!(r==="additive"&&tt(t.name))){if(r==="additive")return{nature:i,additivity:"additive",basis:"measured",suppressed:!1};if(r==="part_of_whole")return{nature:i,additivity:"part_of_whole",basis:"measured",suppressed:!1};if(r==="intensive_rate")return{nature:i,additivity:"intensive_rate",basis:"measured",suppressed:!1}}return t.discourageAggregationAcrossGroups===!0?{nature:i,additivity:"intensive_rate",basis:"host-flag",suppressed:!1}:nt(t.name)?{nature:i,additivity:"intensive_rate",basis:"name",suppressed:!1}:{nature:i,additivity:"additive",basis:"default",suppressed:!1}}function G(e){let t=z(e),i=e??{};if(t.nature==="Categorical")return["first","distinctcount","count"];if(t.nature==="Ordinal")return Xt(i)?["median","min","max","first","distinctcount","count"]:["first","distinctcount","count"];switch(t.additivity){case"positional":return["min","max","count","distinctcount","first"];case"intensive_rate":return["average","median","min","max","count","distinctcount","first"];default:return["sum","average","median","min","max","count","distinctcount","first"]}}function Yt(e){return G(e)[0]}function Jt(e,t){return G(e).indexOf(t)>=0}function Qt(e,t){if(t!=="sum"&&t!=="count")return!1;if(t==="count")return!0;let i=z(e);return i.additivity==="additive"||i.additivity==="part_of_whole"||i.additivity==="unknown"}var F=2,st=400;function D(e){return!!T(e)}function v(e){let t=new Set;for(let i of e){if(i==null)continue;let r=b(String(i));if(!_(r)&&!t.has(r)&&(t.add(r),t.size>=st))break}return Array.from(t)}function h(e){let t=v(e);if(t.length===0||K(e)<95)return!1;let i=t.filter(u=>D(u)&&!g(u)).length,r=t.filter(u=>!D(u)&&!!g(u)).length;return i>=1&&i>=r}function ot(e,t){if(!g(e))return!1;let i=T(e);return i?t==="world"?!0:Z.has(i):!1}function K(e){let t=v(e);if(t.length===0)return 0;let i=0;for(let r of t)D(r)&&i++;return Math.round(i/t.length*1e3)/10}function P(e){let t=v(e);if(t.length===0)return 0;let i=0;for(let r of t)g(r)&&i++;return Math.round(i/t.length*1e3)/10}function H(e){let t=new Set;for(let i of e){if(i==null)continue;let r=String(i).trim();if(!_(b(r))&&!t.has(r)&&(t.add(r),t.size>=st))break}return Array.from(t)}function B(e){let t=H(e);if(t.length===0)return 0;let i=0;for(let r of t)S(r).length>0&&i++;return Math.round(i/t.length*1e3)/10}function rt(e,t){return j(t,q)?!0:H(e).some(i=>/^\d{5}(-\d{4})?$/.test(i.replace(/\.0+$/,"")))}function te(e,t){let i=v(e);if(i.length===0)return 0;let r=0;for(let u of i)k(u,t)&&r++;return Math.round(r/i.length*1e3)/10}function $(e,t){let i=0;for(let r of v(e))t(r)&&i++;return i}function ee(e,t){let i=0;for(let r of H(e))t(r)&&i++;return i}function ne(e,t,i,r){let u=[],c=[],o={},I={},R=new Set(e),l=n=>t.map(s=>s[n]);for(let n of["city","lat","lon","country"]){let s=i?.[n];s&&R.has(s)&&(o[n]=s)}let p=i?.zip;if(p&&R.has(p)){let n=l(p),s=B(n);s<95?c.push(`zip=${p} (only ${s}% of values read as ZIPs)`):rt(n,p)?o.zip=p:c.push(`zip=${p} (all values are 3-4 digits with nothing to say they are postal)`)}let f=i?.state;if(f&&R.has(f)){let n=l(f),s=v(n);s.length>0&&s.every(a=>ot(a,r))?c.push(`state=${f} (every value is "CA", which is both Canada and California)`):h(n)?(c.push(`state=${f} (every value is a country, not a state)`),o.country||(o.country=f)):P(n)<95?c.push(`state=${f} (only ${P(n)}% of values are states/provinces)`):o.state=f}let m=new Set(Object.values(o).filter(Boolean)),x=e.filter(n=>!m.has(n)&&!n.startsWith("__"));if(!o.state){let n=null;for(let s of x){let a=l(s);if(h(a))continue;let d=P(a);if(d<95)continue;let E=$(a,C=>!!g(C)),ut=$(a,C=>!!g(C)&&!ot(C,r));E<F&&ut<1||(!n||d>n.pct)&&(n={name:s,pct:d})}n&&(o.state=n.name,m.add(n.name),u.push(`state=${n.name} (${n.pct}% states/provinces)`))}if(!o.zip)for(let n of x){if(m.has(n))continue;let s=l(n),a=B(s);if(!(a<95)&&rt(s,n)&&!(ee(s,d=>S(d).length>0)<F)){o.zip=n,m.add(n),u.push(`zip=${n} (${a}% ZIP codes)`);break}}let A=o.country;if(!A||!h(l(A))){let n=null;for(let s of x){if(m.has(s)||!h(l(s)))continue;let a=K(l(s));(!n||a>n.pct)&&(n={name:s,pct:a})}n&&(A&&(c.push(`country=${A} (only ${K(l(A))}% of values are country identifiers; using ${n.name} instead)`),I.country=A),o.country=n.name,m.add(n.name),u.push(`country=${n.name}`))}if(!o.city){let n=null;for(let s of x){if(m.has(s))continue;let a=l(s),d=te(a,r);d<w||$(a,E=>k(E,r))<F||(!n||d>n.pct)&&(n={name:s,pct:d})}n&&(o.city=n.name,u.push(`city=${n.name} (${n.pct}% known cities)`))}let V=o.country?l(o.country):[],N=!!o.country&&h(V),at=N?new Set(V.map(n=>T(n==null?null:String(n))).filter(Boolean)).size:0,U=N&&at>=2,O=!!(o.lat&&o.lon)&&t.some(n=>{let s=+String(n[o.lat]??"").trim(),a=+String(n[o.lon]??"").trim();return isFinite(s)&&isFinite(a)&&s>=-90&&s<=90&&a>=-180&&a<=180&&String(n[o.lat]??"").trim()!==""&&String(n[o.lon]??"").trim()!==""});return o.lat&&o.lon&&!O&&c.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`),o.country&&!U&&!(o.city||o.state||o.zip||O)&&c.push(N?`country=${o.country} (every row resolves to the same country - nothing to place apart)`:`country=${o.country} (values are not country identifiers)`),{bind:!!(o.city||o.state||o.zip||U||O)?o:null,backfilled:u,refused:c,...Object.keys(I).length?{labelFallback:I}:{}}}export{w as CITY_ROLE_MATCH_PCT,Lt as GET_RANDOM,X as INTENSIVE_SUFFIX_TOKENS,W as INTENSIVE_WORD_TOKENS,Bt as IndexedText,J as POSITIONAL_SUFFIX_TOKENS,Y as POSITIONAL_WORD_TOKENS,y as ROLE_MATCH_PCT,Mt as SIMPLE_STRING_HASH,kt as STR,P as admin1MatchPct,G as allowedAggregations,St as buildGeoIsoColumn,vt as buildGeoPointColumns,Ct as cityMatchPct,xt as cityTagsFor,Dt as classifyAdditivity,z as classifyForAggregation,Kt as classifyNumericValueNature,Ft as classifyTemporal,Rt as countryRegion,Yt as defaultAggregation,Ot as detectFormatSignature,bt as detectGeo,dt as detectOrdinalDomain,Gt as detectTextDatePattern,Ht as engineTypeForSqlType,tt as hasDefaultAggPrefix,$t as hostAggHint,Vt as ingest,Jt as isAggregationAllowed,_ as isBlankLike,gt as isCityTableLoaded,At as isGeoPointAmbiguity,zt as isIdentifierName,_t as isJoinGeoKind,lt as isOrdinalFriendlyName,h as looksLikeCountryColumn,wt as monthLookupFor,nt as nameLooksIntensiveRate,L as nameLooksPositional,pt as normalizeCountry,Et as normalizeMonthKey,b as normalizePlaceName,yt as normalizeZip5,ft as registerCityTable,It as registerIso3Regions,g as resolveAdmin1,ht as resolveGeoPoint,ne as resolvePointRoles,ct as safeDistinctValuesToShip,Qt as shareOfTotalIsHonest,M as stripHostAggPrefix,Nt as summarizeCountryRegions,Pt as summarizeGeoExtent,Tt as toGeoIso,B as zipMatchPct,S as zipPrefixCandidates,mt as zipToPrefix3};
2
+ import{a as Ht,b as Vt}from"./chunk-5233JUKA.mjs";import{a as Pt,b as It,c as Rt,d as Nt,e as zt,f as Gt,g as Ft,h as $t,i as Dt,j as Kt,k as Bt}from"./chunk-LDC2C4WC.mjs";import{a as Ot}from"./chunk-QEH7WTLB.mjs";import{a as Et,b as wt}from"./chunk-2LR73DNS.mjs";import{a as kt,b as Mt,c as Lt}from"./chunk-NWDPA7DG.mjs";import{a as q,b as j,c as bt,d as Tt,e as _t,f as St}from"./chunk-SAASSIJ7.mjs";import{a as b,f as T,g as y,h as _,i as w,j as ft,k as gt,l as Z,m as g,n as pt,o as mt,p as yt,q as S,r as At,s as ht,t as vt,u as xt,v as k,w as Ct}from"./chunk-E6SVTFAW.mjs";import"./chunk-5MRZID36.mjs";import{a as lt,b as ct,c as dt}from"./chunk-WBEROMBG.mjs";var W=["rate","ratio","pct","percent","percentage","rating","share","score","index","nps","csat","margin","yield","coverage","utilization","z[_-]?score","average","avg","mean","median","stddev","variance","gpa","percentile","quantile","efficiency","accuracy","probability","multiplier","coefficient","correlation","occupancy","age","bmi","temperature","density","pressure","humidity","ph","velocity","speed","elevation","altitude","latency","throughput","bandwidth","iops"],X=["pct","percent","percentage","rate","ratio","rating","share","score","index","nps","csat","margin","yield","coverage","utilization","gpa","percentile","quantile","bmi","density","pressure","humidity","velocity","efficiency","occupancy","latency","throughput","bandwidth","iops"],Y=["latitude","longitude"],J=["latitude","longitude"],Q=/^\s*(sum|count|count\s+distinct|distinct\s+count)\s+of\s+/i,Ut=/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])/g,Zt=new RegExp("\\b("+W.join("|")+")\\b|("+X.join("|")+")$","i"),qt=new RegExp("\\b("+Y.join("|")+")\\b|("+J.join("|")+")$","i");function M(e){return e?String(e).replace(Q,"").trim():""}function tt(e){return!!e&&Q.test(String(e))}function jt(e){let t=M(e);return t.length===0?"":t.replace(Ut," ")}function et(e,t){return t?e.test(jt(t))||e.test(M(t)):!1}function L(e){return et(qt,e)}function nt(e){return et(Zt,e)||L(e)}var it=/int|double|decimal|single|float|number|currency|money/i;function Wt(e){let t=String(e?.valueNature??"").trim().toLowerCase();return t==="categorical"?"Categorical":t==="ordinal"?"Ordinal":t==="continuous"||e?.isMeasure===!0||it.test(String(e?.dataType??""))?"Continuous":"Categorical"}function Xt(e){return e?.isMeasure===!0||it.test(String(e?.dataType??""))}function z(e){let t=e??{},i=Wt(t);if(i!=="Continuous")return{nature:i,additivity:"unknown",basis:"role",suppressed:!1};if(L(t.name))return{nature:i,additivity:"positional",basis:"name",suppressed:!0};let r=String(t.additivity??"").trim().toLowerCase();if(!(r==="additive"&&tt(t.name))){if(r==="additive")return{nature:i,additivity:"additive",basis:"measured",suppressed:!1};if(r==="part_of_whole")return{nature:i,additivity:"part_of_whole",basis:"measured",suppressed:!1};if(r==="intensive_rate")return{nature:i,additivity:"intensive_rate",basis:"measured",suppressed:!1}}return t.discourageAggregationAcrossGroups===!0?{nature:i,additivity:"intensive_rate",basis:"host-flag",suppressed:!1}:nt(t.name)?{nature:i,additivity:"intensive_rate",basis:"name",suppressed:!1}:{nature:i,additivity:"additive",basis:"default",suppressed:!1}}function G(e){let t=z(e),i=e??{};if(t.nature==="Categorical")return["first","distinctcount","count"];if(t.nature==="Ordinal")return Xt(i)?["median","average","min","max","first","distinctcount","count"]:["first","distinctcount","count"];switch(t.additivity){case"positional":return["min","max","count","distinctcount","first"];case"intensive_rate":return["average","median","min","max","count","distinctcount","first"];default:return["sum","average","median","min","max","count","distinctcount","first"]}}function Yt(e){return G(e)[0]}function Jt(e,t){return G(e).indexOf(t)>=0}function Qt(e,t){if(t!=="sum"&&t!=="count")return!1;if(t==="count")return!0;let i=z(e);return i.additivity==="additive"||i.additivity==="part_of_whole"||i.additivity==="unknown"}var F=2,st=400;function D(e){return!!T(e)}function v(e){let t=new Set;for(let i of e){if(i==null)continue;let r=b(String(i));if(!_(r)&&!t.has(r)&&(t.add(r),t.size>=st))break}return Array.from(t)}function h(e){let t=v(e);if(t.length===0||K(e)<95)return!1;let i=t.filter(u=>D(u)&&!g(u)).length,r=t.filter(u=>!D(u)&&!!g(u)).length;return i>=1&&i>=r}function ot(e,t){if(!g(e))return!1;let i=T(e);return i?t==="world"?!0:Z.has(i):!1}function K(e){let t=v(e);if(t.length===0)return 0;let i=0;for(let r of t)D(r)&&i++;return Math.round(i/t.length*1e3)/10}function P(e){let t=v(e);if(t.length===0)return 0;let i=0;for(let r of t)g(r)&&i++;return Math.round(i/t.length*1e3)/10}function H(e){let t=new Set;for(let i of e){if(i==null)continue;let r=String(i).trim();if(!_(b(r))&&!t.has(r)&&(t.add(r),t.size>=st))break}return Array.from(t)}function B(e){let t=H(e);if(t.length===0)return 0;let i=0;for(let r of t)S(r).length>0&&i++;return Math.round(i/t.length*1e3)/10}function rt(e,t){return j(t,q)?!0:H(e).some(i=>/^\d{5}(-\d{4})?$/.test(i.replace(/\.0+$/,"")))}function te(e,t){let i=v(e);if(i.length===0)return 0;let r=0;for(let u of i)k(u,t)&&r++;return Math.round(r/i.length*1e3)/10}function $(e,t){let i=0;for(let r of v(e))t(r)&&i++;return i}function ee(e,t){let i=0;for(let r of H(e))t(r)&&i++;return i}function ne(e,t,i,r){let u=[],c=[],o={},I={},R=new Set(e),l=n=>t.map(s=>s[n]);for(let n of["city","lat","lon","country"]){let s=i?.[n];s&&R.has(s)&&(o[n]=s)}let p=i?.zip;if(p&&R.has(p)){let n=l(p),s=B(n);s<95?c.push(`zip=${p} (only ${s}% of values read as ZIPs)`):rt(n,p)?o.zip=p:c.push(`zip=${p} (all values are 3-4 digits with nothing to say they are postal)`)}let f=i?.state;if(f&&R.has(f)){let n=l(f),s=v(n);s.length>0&&s.every(a=>ot(a,r))?c.push(`state=${f} (every value is "CA", which is both Canada and California)`):h(n)?(c.push(`state=${f} (every value is a country, not a state)`),o.country||(o.country=f)):P(n)<95?c.push(`state=${f} (only ${P(n)}% of values are states/provinces)`):o.state=f}let m=new Set(Object.values(o).filter(Boolean)),x=e.filter(n=>!m.has(n)&&!n.startsWith("__"));if(!o.state){let n=null;for(let s of x){let a=l(s);if(h(a))continue;let d=P(a);if(d<95)continue;let E=$(a,C=>!!g(C)),ut=$(a,C=>!!g(C)&&!ot(C,r));E<F&&ut<1||(!n||d>n.pct)&&(n={name:s,pct:d})}n&&(o.state=n.name,m.add(n.name),u.push(`state=${n.name} (${n.pct}% states/provinces)`))}if(!o.zip)for(let n of x){if(m.has(n))continue;let s=l(n),a=B(s);if(!(a<95)&&rt(s,n)&&!(ee(s,d=>S(d).length>0)<F)){o.zip=n,m.add(n),u.push(`zip=${n} (${a}% ZIP codes)`);break}}let A=o.country;if(!A||!h(l(A))){let n=null;for(let s of x){if(m.has(s)||!h(l(s)))continue;let a=K(l(s));(!n||a>n.pct)&&(n={name:s,pct:a})}n&&(A&&(c.push(`country=${A} (only ${K(l(A))}% of values are country identifiers; using ${n.name} instead)`),I.country=A),o.country=n.name,m.add(n.name),u.push(`country=${n.name}`))}if(!o.city){let n=null;for(let s of x){if(m.has(s))continue;let a=l(s),d=te(a,r);d<w||$(a,E=>k(E,r))<F||(!n||d>n.pct)&&(n={name:s,pct:d})}n&&(o.city=n.name,u.push(`city=${n.name} (${n.pct}% known cities)`))}let V=o.country?l(o.country):[],N=!!o.country&&h(V),at=N?new Set(V.map(n=>T(n==null?null:String(n))).filter(Boolean)).size:0,U=N&&at>=2,O=!!(o.lat&&o.lon)&&t.some(n=>{let s=+String(n[o.lat]??"").trim(),a=+String(n[o.lon]??"").trim();return isFinite(s)&&isFinite(a)&&s>=-90&&s<=90&&a>=-180&&a<=180&&String(n[o.lat]??"").trim()!==""&&String(n[o.lon]??"").trim()!==""});return o.lat&&o.lon&&!O&&c.push(`lat/lon=${o.lat}/${o.lon} (no row holds a usable coordinate pair)`),o.country&&!U&&!(o.city||o.state||o.zip||O)&&c.push(N?`country=${o.country} (every row resolves to the same country - nothing to place apart)`:`country=${o.country} (values are not country identifiers)`),{bind:!!(o.city||o.state||o.zip||U||O)?o:null,backfilled:u,refused:c,...Object.keys(I).length?{labelFallback:I}:{}}}export{w as CITY_ROLE_MATCH_PCT,Lt as GET_RANDOM,X as INTENSIVE_SUFFIX_TOKENS,W as INTENSIVE_WORD_TOKENS,Bt as IndexedText,J as POSITIONAL_SUFFIX_TOKENS,Y as POSITIONAL_WORD_TOKENS,y as ROLE_MATCH_PCT,Mt as SIMPLE_STRING_HASH,kt as STR,P as admin1MatchPct,G as allowedAggregations,St as buildGeoIsoColumn,vt as buildGeoPointColumns,Ct as cityMatchPct,xt as cityTagsFor,Dt as classifyAdditivity,z as classifyForAggregation,Kt as classifyNumericValueNature,Ft as classifyTemporal,Rt as countryRegion,Yt as defaultAggregation,Ot as detectFormatSignature,bt as detectGeo,dt as detectOrdinalDomain,Gt as detectTextDatePattern,Ht as engineTypeForSqlType,tt as hasDefaultAggPrefix,$t as hostAggHint,Vt as ingest,Jt as isAggregationAllowed,_ as isBlankLike,gt as isCityTableLoaded,At as isGeoPointAmbiguity,zt as isIdentifierName,_t as isJoinGeoKind,lt as isOrdinalFriendlyName,h as looksLikeCountryColumn,wt as monthLookupFor,nt as nameLooksIntensiveRate,L as nameLooksPositional,pt as normalizeCountry,Et as normalizeMonthKey,b as normalizePlaceName,yt as normalizeZip5,ft as registerCityTable,It as registerIso3Regions,g as resolveAdmin1,ht as resolveGeoPoint,ne as resolvePointRoles,ct as safeDistinctValuesToShip,Qt as shareOfTotalIsHonest,M as stripHostAggPrefix,Nt as summarizeCountryRegions,Pt as summarizeGeoExtent,Tt as toGeoIso,B as zipMatchPct,S as zipPrefixCandidates,mt as zipToPrefix3};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bicharts/shape-core",
3
- "version": "0.5.46",
3
+ "version": "0.5.47",
4
4
  "description": "Host-agnostic data-shape profiler: ingest a dataset's rows through IValueCollection.addRow and read back the measured shape as an LLMColumnWithValue[] payload — types, cardinality, temporal/ordinal detection, geographic region and point resolution, cross-column signals. MEASUREMENT only: the policy that decides what a measured shape means for chart selection lives server-side.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",