@synnaxlabs/x 0.44.1 → 0.44.2

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 (38) hide show
  1. package/.turbo/turbo-build.log +13 -13
  2. package/dist/compare.cjs +1 -1
  3. package/dist/compare.js +1 -1
  4. package/dist/deep.cjs +1 -1
  5. package/dist/deep.js +56 -46
  6. package/dist/{external-BFgJjMcS.js → external-Birv9jaY.js} +1 -1
  7. package/dist/{external-mffsMzJx.cjs → external-DsmsSN1Y.cjs} +1 -1
  8. package/dist/{index-PNh31WTW.js → index-CBMHFqs4.js} +34 -33
  9. package/dist/index-DOJlZHqJ.cjs +1 -0
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.js +5 -5
  12. package/dist/path-BeMr8xWN.cjs +1 -0
  13. package/dist/path-DVFrKaNI.js +107 -0
  14. package/dist/{series-CYAhDD6B.cjs → series-CcA_WjbJ.cjs} +1 -1
  15. package/dist/{series-Bn5y1tD1.js → series-EA1uaEDj.js} +1 -1
  16. package/dist/src/deep/copy.d.ts.map +1 -1
  17. package/dist/src/deep/path.d.ts +1 -0
  18. package/dist/src/deep/path.d.ts.map +1 -1
  19. package/dist/src/observe/observe.d.ts +1 -0
  20. package/dist/src/observe/observe.d.ts.map +1 -1
  21. package/dist/src/primitive/primitive.d.ts +13 -1
  22. package/dist/src/primitive/primitive.d.ts.map +1 -1
  23. package/dist/telem.cjs +1 -1
  24. package/dist/telem.js +1 -1
  25. package/dist/zod.cjs +1 -1
  26. package/dist/zod.js +1 -1
  27. package/package.json +3 -3
  28. package/src/deep/copy.ts +12 -1
  29. package/src/deep/path.spec.ts +27 -0
  30. package/src/deep/path.ts +10 -0
  31. package/src/observe/observe.ts +2 -0
  32. package/src/primitive/primitive.spec.ts +7 -4
  33. package/src/primitive/primitive.ts +17 -1
  34. package/src/testutil/testutil.spec.ts +6 -3
  35. package/tsconfig.tsbuildinfo +1 -1
  36. package/dist/index-B1m2qvBT.cjs +0 -1
  37. package/dist/path-BXdMenka.js +0 -101
  38. package/dist/path-st_E5-LJ.cjs +0 -1
@@ -1,4 +1,4 @@
1
- "use strict";const o=require("zod"),T=require("./index-BQe8OIgm.cjs"),X=require("./index-DdhM_E4k.cjs"),M=require("./index-B1m2qvBT.cjs"),O=require("./bounds-D6e9xoHt.cjs");require("./box-Cxki783Y.cjs");require("./dimensions-D2QGoNXO.cjs");require("./base-BAM2mqCy.cjs");require("./location-DZi8ftXp.cjs");require("./scale-C6qKDbRb.cjs");require("./xy-CUE3QDNn.cjs");let Q=(i,t=21)=>(e=t)=>{let s="",u=e|0;for(;u--;)s+=i[Math.random()*i.length|0];return s};const _="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Z=11,tt=Q(_,Z),p=()=>tt(),et=Object.freeze(Object.defineProperty({__proto__:null,LENGTH:Z,create:p},Symbol.toStringTag,{value:"Module"})),k=(i,t)=>e=>e instanceof t||typeof e=="object"&&e!==null&&"discriminator"in e&&e.discriminator===i,st=Object.freeze(Object.defineProperty({__proto__:null,createMatcher:k},Symbol.toStringTag,{value:"Module"})),rt=o.z.enum(["static","dynamic"]),nt=o.z.union([o.z.tuple([o.z.int()]),o.z.tuple([o.z.int(),o.z.int().min(1).max(12)]),o.z.tuple([o.z.int(),o.z.int().min(1).max(12),o.z.int().min(1).max(31)])]),G=(i,t)=>{const e=new n(t);if(![a.DAY,a.HOUR,a.MINUTE,a.SECOND,a.MILLISECOND,a.MICROSECOND,a.NANOSECOND].some(u=>u.equals(e)))throw new Error("Invalid argument for remainder. Must be an even TimeSpan or Timestamp");const s=i.valueOf()%e.valueOf();return i instanceof n?new n(s):new a(s)};class n extends M.ValueExtension{constructor(t,e="UTC"){if(t==null)super(n.now().valueOf());else if(t instanceof Date)super(BigInt(t.getTime())*n.MILLISECOND.valueOf());else if(typeof t=="string")super(n.parseDateTimeString(t,e).valueOf());else if(Array.isArray(t))super(n.parseDate(t));else{let s=0n;t instanceof Number&&(t=t.valueOf()),e==="local"&&(s=n.utcOffset.valueOf()),typeof t=="number"&&(isFinite(t)?t=Math.trunc(t):(isNaN(t)&&(t=0),t===1/0?t=n.MAX:t=n.MIN)),super(BigInt(t.valueOf())+s)}}static parseDate([t=1970,e=1,s=1]){const u=new Date(t,e-1,s,0,0,0,0);return new n(BigInt(u.getTime())*n.MILLISECOND.valueOf()).truncate(n.DAY).valueOf()}valueOf(){return this.value}static parseTimeString(t,e="UTC"){const[s,u,c]=t.split(":");let f="00",N="00";c!=null&&([f,N]=c.split("."));let g=n.hours(parseInt(s??"00")).add(n.minutes(parseInt(u??"00"))).add(n.seconds(parseInt(f??"00"))).add(n.milliseconds(parseInt(N??"00")));return e==="local"&&(g=g.add(n.utcOffset)),g.valueOf()}static parseDateTimeString(t,e="UTC"){if(!t.includes("/")&&!t.includes("-"))return n.parseTimeString(t,e);const s=new Date(t);return t.includes(":")||s.setUTCHours(0,0,0,0),new n(BigInt(s.getTime())*n.MILLISECOND.valueOf(),e).valueOf()}fString(t="ISO",e="UTC"){switch(t){case"ISODate":return this.toISOString(e).slice(0,10);case"ISOTime":return this.toISOString(e).slice(11,23);case"time":return this.timeString(!1,e);case"preciseTime":return this.timeString(!0,e);case"date":return this.dateString();case"preciseDate":return`${this.dateString()} ${this.timeString(!0,e)}`;case"dateTime":return`${this.dateString()} ${this.timeString(!1,e)}`;default:return this.toISOString(e)}}toISOString(t="UTC"){return t==="UTC"?this.date().toISOString():this.sub(n.utcOffset).date().toISOString()}timeString(t=!1,e="UTC"){const s=this.toISOString(e);return t?s.slice(11,23):s.slice(11,19)}dateString(){const t=this.date(),e=t.toLocaleString("default",{month:"short"}),s=t.toLocaleString("default",{day:"numeric"});return`${e} ${s}`}static get utcOffset(){return new a(BigInt(new Date().getTimezoneOffset())*n.MINUTE.valueOf())}static since(t){return new n().span(t)}date(){return new Date(this.milliseconds)}equals(t){return this.valueOf()===new n(t).valueOf()}span(t){return this.range(t).span}range(t){return new b(this,t).makeValid()}spanRange(t){return this.range(this.add(t)).makeValid()}get isZero(){return this.valueOf()===0n}after(t){return this.valueOf()>new n(t).valueOf()}afterEq(t){return this.valueOf()>=new n(t).valueOf()}before(t){return this.valueOf()<new n(t).valueOf()}beforeEq(t){return this.valueOf()<=new n(t).valueOf()}add(t){return new n(this.valueOf()+BigInt(t.valueOf()))}sub(t){return new n(this.valueOf()-BigInt(t.valueOf()))}get hours(){return Number(this.valueOf())/Number(a.HOUR.valueOf())}get minutes(){return Number(this.valueOf())/Number(a.MINUTE.valueOf())}get days(){return Number(this.valueOf())/Number(a.DAY.valueOf())}get seconds(){return Number(this.valueOf())/Number(a.SECOND.valueOf())}get milliseconds(){return Number(this.valueOf())/Number(n.MILLISECOND.valueOf())}get microseconds(){return Number(this.valueOf())/Number(n.MICROSECOND.valueOf())}get nanoseconds(){return Number(this.valueOf())}get year(){return this.date().getUTCFullYear()}setYear(t){const e=this.date();return e.setUTCFullYear(t),new n(e)}get month(){return this.date().getUTCMonth()}setMonth(t){const e=this.date();return e.setUTCMonth(t),new n(e)}get day(){return this.date().getUTCDate()}setDay(t){const e=this.date();return e.setUTCDate(t),new n(e)}get hour(){return this.date().getUTCHours()}setHour(t){const e=this.date();return e.setUTCHours(t),new n(e,"UTC")}get minute(){return this.date().getUTCMinutes()}setMinute(t){const e=this.date();return e.setUTCMinutes(t),new n(e)}get second(){return this.date().getUTCSeconds()}setSecond(t){const e=this.date();return e.setUTCSeconds(t),new n(e)}get millisecond(){return this.date().getUTCMilliseconds()}setMillisecond(t){const e=this.date();return e.setUTCMilliseconds(t),new n(e)}toString(){return this.date().toISOString()}remainder(t){return G(this,t)}get isToday(){return this.truncate(a.DAY).equals(n.now().truncate(a.DAY))}truncate(t){return this.sub(this.remainder(t))}static now(){return new n(new Date)}static max(...t){let e=n.MIN;for(const s of t){const u=new n(s);u.after(e)&&(e=u)}return e}static min(...t){let e=n.MAX;for(const s of t){const u=new n(s);u.before(e)&&(e=u)}return e}static nanoseconds(t,e="UTC"){return new n(t,e)}static NANOSECOND=n.nanoseconds(1);static microseconds(t,e="UTC"){return n.nanoseconds(t*1e3,e)}static MICROSECOND=n.microseconds(1);static milliseconds(t,e="UTC"){return n.microseconds(t*1e3,e)}static MILLISECOND=n.milliseconds(1);static seconds(t,e="UTC"){return n.milliseconds(t*1e3,e)}static SECOND=n.seconds(1);static minutes(t,e="UTC"){return n.seconds(t*60,e)}static MINUTE=n.minutes(1);static hours(t,e="UTC"){return n.minutes(t*60,e)}static HOUR=n.hours(1);static days(t,e="UTC"){return n.hours(t*24,e)}static DAY=n.days(1);static MAX=new n((1n<<63n)-1n);static MIN=new n(0);static ZERO=new n(0);static z=o.z.union([o.z.instanceof(n),o.z.object({value:o.z.bigint()}).transform(t=>new n(t.value)),o.z.string().transform(t=>new n(BigInt(t))),o.z.number().transform(t=>new n(t)),o.z.bigint().transform(t=>new n(t)),o.z.date().transform(t=>new n(t)),o.z.custom(t=>t instanceof a).transform(t=>new n(t)),nt.transform(t=>new n(t))]);static sort(t,e){return Number(t.valueOf()-e.valueOf())}}class a extends M.ValueExtension{constructor(t){typeof t=="number"&&(t=Math.trunc(t.valueOf())),super(BigInt(t.valueOf()))}static fromSeconds(t){return t instanceof a?t:t instanceof v?t.period:t instanceof n?new a(t):["number","bigint"].includes(typeof t)?a.seconds(t):new a(t)}static fromMilliseconds(t){return t instanceof a?t:t instanceof v?t.period:t instanceof n?new a(t):["number","bigint"].includes(typeof t)?a.milliseconds(t):new a(t)}valueOf(){return this.value}lessThan(t){return this.valueOf()<new a(t).valueOf()}greaterThan(t){return this.valueOf()>new a(t).valueOf()}lessThanOrEqual(t){return this.valueOf()<=new a(t).valueOf()}greaterThanOrEqual(t){return this.valueOf()>=new a(t).valueOf()}remainder(t){return G(this,t)}truncate(t){return new a(BigInt(Math.trunc(Number(this.valueOf()/t.valueOf())))*t.valueOf())}toString(){const t=this.truncate(a.DAY),e=this.truncate(a.HOUR),s=this.truncate(a.MINUTE),u=this.truncate(a.SECOND),c=this.truncate(a.MILLISECOND),f=this.truncate(a.MICROSECOND),N=this.truncate(a.NANOSECOND),g=t,y=e.sub(t),m=s.sub(e),l=u.sub(s),U=c.sub(u),A=f.sub(c),$=N.sub(f);let E="";return g.isZero||(E+=`${g.days}d `),y.isZero||(E+=`${y.hours}h `),m.isZero||(E+=`${m.minutes}m `),l.isZero||(E+=`${l.seconds}s `),U.isZero||(E+=`${U.milliseconds}ms `),A.isZero||(E+=`${A.microseconds}µs `),$.isZero||(E+=`${$.nanoseconds}ns`),E.trim()}mult(t){return new a(this.valueOf()*BigInt(t))}get days(){return Number(this.valueOf())/Number(a.DAY.valueOf())}get hours(){return Number(this.valueOf())/Number(a.HOUR.valueOf())}get minutes(){return Number(this.valueOf())/Number(a.MINUTE.valueOf())}get seconds(){return Number(this.valueOf())/Number(a.SECOND.valueOf())}get milliseconds(){return Number(this.valueOf())/Number(a.MILLISECOND.valueOf())}get microseconds(){return Number(this.valueOf())/Number(a.MICROSECOND.valueOf())}get nanoseconds(){return Number(this.valueOf())}get isZero(){return this.valueOf()===0n}equals(t){return this.valueOf()===new a(t).valueOf()}add(t){return new a(this.valueOf()+new a(t).valueOf())}sub(t){return new a(this.valueOf()-new a(t).valueOf())}static nanoseconds(t=1){return new a(t)}static NANOSECOND=a.nanoseconds(1);static microseconds(t=1){return a.nanoseconds(O.mult(t,1e3))}static MICROSECOND=a.microseconds(1);static milliseconds(t=1){return a.microseconds(O.mult(t,1e3))}static MILLISECOND=a.milliseconds(1);static seconds(t=1){return a.milliseconds(O.mult(t,1e3))}static SECOND=a.seconds(1);static minutes(t=1){return a.seconds(O.mult(t,60))}static MINUTE=a.minutes(1);static hours(t){return a.minutes(O.mult(t,60))}static HOUR=a.hours(1);static days(t){return a.hours(O.mult(t,24))}static DAY=a.days(1);static MAX=new a((1n<<63n)-1n);static MIN=new a(0);static ZERO=new a(0);static z=o.z.union([o.z.object({value:o.z.bigint()}).transform(t=>new a(t.value)),o.z.string().transform(t=>new a(BigInt(t))),o.z.number().transform(t=>new a(t)),o.z.instanceof(a)])}class v extends M.ValueExtension{constructor(t){super(t.valueOf())}toString(){return`${this.valueOf()} Hz`}equals(t){return this.valueOf()===new v(t).valueOf()}get period(){return a.seconds(1/this.valueOf())}sampleCount(t){return new a(t).seconds*this.valueOf()}byteCount(t,e){return this.sampleCount(t)*new d(e).valueOf()}span(t){return a.seconds(t/this.valueOf())}byteSpan(t,e){return this.span(t.valueOf()/e.valueOf())}static hz(t){return new v(t)}static khz(t){return v.hz(t*1e3)}static z=o.z.union([o.z.number().transform(t=>new v(t)),o.z.instanceof(v)])}class d extends M.ValueExtension{constructor(t){super(t.valueOf())}length(t){return t.valueOf()/this.valueOf()}size(t){return new h(t*this.valueOf())}static UNKNOWN=new d(0);static BIT128=new d(16);static BIT64=new d(8);static BIT32=new d(4);static BIT16=new d(2);static BIT8=new d(1);static z=o.z.union([o.z.number().transform(t=>new d(t)),o.z.instanceof(d)])}class b{start;end;constructor(t,e){typeof t=="object"&&"start"in t?(this.start=new n(t.start),this.end=new n(t.end)):(this.start=new n(t),this.end=new n(e))}get span(){return new a(this.end.valueOf()-this.start.valueOf())}get isValid(){return this.start.valueOf()<=this.end.valueOf()}makeValid(){return this.isValid?this:this.swap()}get isZero(){return this.span.isZero}get numeric(){return{start:Number(this.start.valueOf()),end:Number(this.end.valueOf())}}swap(){return new b(this.end,this.start)}get numericBounds(){return{lower:Number(this.start.valueOf()),upper:Number(this.end.valueOf())}}equals(t,e=a.ZERO){if(e.isZero)return this.start.equals(t.start)&&this.end.equals(t.end);let s=this.start.sub(t.start).valueOf(),u=this.end.sub(t.end).valueOf();return s<0&&(s=-s),u<0&&(u=-u),s<=e.valueOf()&&u<=e.valueOf()}toString(){return`${this.start.toString()} - ${this.end.toString()}`}toPrettyString(){return`${this.start.fString("preciseDate")} - ${this.span.toString()}`}overlapsWith(t,e=a.ZERO){t=t.makeValid();const s=this.makeValid();if(this.equals(t))return!0;if(t.end.equals(s.start)||s.end.equals(t.start))return!1;const u=n.max(s.start,t.start),c=n.min(s.end,t.end);return c.before(u)?!1:new a(c.sub(u)).greaterThanOrEqual(e)}contains(t){return t instanceof b?this.contains(t.start)&&this.contains(t.end):this.start.beforeEq(t)&&this.end.after(t)}boundBy(t){const e=new b(this.start,this.end);return t.start.after(this.start)&&(e.start=t.start),t.start.after(this.end)&&(e.end=t.start),t.end.before(this.end)&&(e.end=t.end),t.end.before(this.start)&&(e.start=t.end),e}static max(...t){return new b(n.min(...t.map(e=>e.start)),n.max(...t.map(e=>e.end)))}static MAX=new b(n.MIN,n.MAX);static MIN=new b(n.MAX,n.MIN);static ZERO=new b(n.ZERO,n.ZERO);static z=o.z.union([o.z.object({start:n.z,end:n.z}).transform(t=>new b(t.start,t.end)),o.z.instanceof(b)]);static sort(t,e){return n.sort(t.start,e.start)||n.sort(t.end,e.end)}}class r extends M.ValueExtension{constructor(t){if(t instanceof r||typeof t=="string"||typeof t.valueOf()=="string")super(t.valueOf());else{const e=r.ARRAY_CONSTRUCTOR_DATA_TYPES.get(t.constructor.name);if(e==null)throw new Error(`unable to find data type for ${t.toString()}`);super(e.valueOf())}}get Array(){const t=r.ARRAY_CONSTRUCTORS.get(this.toString());if(t==null)throw new Error(`unable to find array constructor for ${this.valueOf()}`);return t}equals(t){return this.valueOf()===t.valueOf()}matches(...t){return t.some(e=>this.equals(e))}toString(){return this.valueOf()}get isVariable(){return this.equals(r.JSON)||this.equals(r.STRING)}get isNumeric(){return!this.isVariable&&!this.equals(r.UUID)}get isInteger(){const t=this.toString();return t.startsWith("int")||t.startsWith("uint")}get isFloat(){return this.toString().startsWith("float")}get density(){const t=r.DENSITIES.get(this.toString());if(t==null)throw new Error(`unable to find density for ${this.valueOf()}`);return t}get isUnsignedInteger(){return this.equals(r.UINT8)||this.equals(r.UINT16)||this.equals(r.UINT32)||this.equals(r.UINT64)}get isSignedInteger(){return this.equals(r.INT8)||this.equals(r.INT16)||this.equals(r.INT32)||this.equals(r.INT64)}canSafelyCastTo(t){return this.equals(t)?!0:!this.isNumeric||!t.isNumeric||this.isVariable||t.isVariable||this.isUnsignedInteger&&t.isSignedInteger?!1:this.isFloat?t.isFloat&&this.density.valueOf()<=t.density.valueOf():this.equals(r.INT32)&&t.equals(r.FLOAT64)||this.equals(r.INT8)&&t.equals(r.FLOAT32)?!0:this.isInteger&&t.isInteger?this.density.valueOf()<=t.density.valueOf()&&this.isUnsignedInteger===t.isUnsignedInteger:!1}canCastTo(t){return this.isNumeric&&t.isNumeric?!0:this.equals(t)}checkArray(t){return t.constructor===this.Array}get usesBigInt(){return r.BIG_INT_TYPES.some(t=>t.equals(this))}static UNKNOWN=new r("unknown");static FLOAT64=new r("float64");static FLOAT32=new r("float32");static INT64=new r("int64");static INT32=new r("int32");static INT16=new r("int16");static INT8=new r("int8");static UINT64=new r("uint64");static UINT32=new r("uint32");static UINT16=new r("uint16");static UINT8=new r("uint8");static BOOLEAN=this.UINT8;static TIMESTAMP=new r("timestamp");static UUID=new r("uuid");static STRING=new r("string");static JSON=new r("json");static ARRAY_CONSTRUCTORS=new Map([[r.UINT8.toString(),Uint8Array],[r.UINT16.toString(),Uint16Array],[r.UINT32.toString(),Uint32Array],[r.UINT64.toString(),BigUint64Array],[r.FLOAT32.toString(),Float32Array],[r.FLOAT64.toString(),Float64Array],[r.INT8.toString(),Int8Array],[r.INT16.toString(),Int16Array],[r.INT32.toString(),Int32Array],[r.INT64.toString(),BigInt64Array],[r.TIMESTAMP.toString(),BigInt64Array],[r.STRING.toString(),Uint8Array],[r.JSON.toString(),Uint8Array],[r.UUID.toString(),Uint8Array]]);static ARRAY_CONSTRUCTOR_DATA_TYPES=new Map([[Uint8Array.name,r.UINT8],[Uint16Array.name,r.UINT16],[Uint32Array.name,r.UINT32],[BigUint64Array.name,r.UINT64],[Float32Array.name,r.FLOAT32],[Float64Array.name,r.FLOAT64],[Int8Array.name,r.INT8],[Int16Array.name,r.INT16],[Int32Array.name,r.INT32],[BigInt64Array.name,r.INT64]]);static DENSITIES=new Map([[r.UINT8.toString(),d.BIT8],[r.UINT16.toString(),d.BIT16],[r.UINT32.toString(),d.BIT32],[r.UINT64.toString(),d.BIT64],[r.FLOAT32.toString(),d.BIT32],[r.FLOAT64.toString(),d.BIT64],[r.INT8.toString(),d.BIT8],[r.INT16.toString(),d.BIT16],[r.INT32.toString(),d.BIT32],[r.INT64.toString(),d.BIT64],[r.TIMESTAMP.toString(),d.BIT64],[r.STRING.toString(),d.UNKNOWN],[r.JSON.toString(),d.UNKNOWN],[r.UUID.toString(),d.BIT128]]);static ALL=[r.UNKNOWN,r.FLOAT64,r.FLOAT32,r.INT64,r.INT32,r.INT16,r.INT8,r.UINT64,r.UINT32,r.UINT16,r.UINT8,r.TIMESTAMP,r.UUID,r.STRING,r.JSON];static BIG_INT_TYPES=[r.INT64,r.UINT64,r.TIMESTAMP];static z=o.z.union([o.z.string().transform(t=>new r(t)),o.z.instanceof(r)])}class h extends M.ValueExtension{constructor(t){super(t.valueOf())}largerThan(t){return this.valueOf()>t.valueOf()}smallerThan(t){return this.valueOf()<t.valueOf()}add(t){return h.bytes(this.valueOf()+t.valueOf())}sub(t){return h.bytes(this.valueOf()-t.valueOf())}truncate(t){return new h(Math.trunc(this.valueOf()/t.valueOf())*t.valueOf())}remainder(t){return h.bytes(this.valueOf()%t.valueOf())}get gigabytes(){return this.valueOf()/h.GIGABYTE.valueOf()}get megabytes(){return this.valueOf()/h.MEGABYTE.valueOf()}get kilobytes(){return this.valueOf()/h.KILOBYTE.valueOf()}get terabytes(){return this.valueOf()/h.TERABYTE.valueOf()}toString(){const t=this.truncate(h.TERABYTE),e=this.truncate(h.GIGABYTE),s=this.truncate(h.MEGABYTE),u=this.truncate(h.KILOBYTE),c=this.truncate(h.BYTE),f=t,N=e.sub(t),g=s.sub(e),y=u.sub(s),m=c.sub(u);let l="";return f.isZero||(l+=`${f.terabytes}TB `),N.isZero||(l+=`${N.gigabytes}GB `),g.isZero||(l+=`${g.megabytes}MB `),y.isZero||(l+=`${y.kilobytes}KB `),(!m.isZero||l==="")&&(l+=`${m.valueOf()}B`),l.trim()}static bytes(t=1){return new h(t)}static BYTE=new h(1);static kilobytes(t=1){return h.bytes(t.valueOf()*1e3)}static KILOBYTE=h.kilobytes(1);static megabytes(t=1){return h.kilobytes(t.valueOf()*1e3)}static MEGABYTE=h.megabytes(1);static gigabytes(t=1){return h.megabytes(t.valueOf()*1e3)}static GIGABYTE=h.gigabytes(1);static terabytes(t){return h.gigabytes(t.valueOf()*1e3)}static TERABYTE=h.terabytes(1);static ZERO=new h(0);static z=o.z.union([o.z.number().transform(t=>new h(t)),o.z.instanceof(h)]);get isZero(){return this.valueOf()===0}}const it=o.z.union([o.z.instanceof(Uint8Array),o.z.instanceof(Uint16Array),o.z.instanceof(Uint32Array),o.z.instanceof(BigUint64Array),o.z.instanceof(Float32Array),o.z.instanceof(Float64Array),o.z.instanceof(Int8Array),o.z.instanceof(Int16Array),o.z.instanceof(Int32Array),o.z.instanceof(BigInt64Array)]),q=i=>{const t=typeof i;return t==="string"||t==="number"||t==="boolean"||t==="bigint"||i instanceof n||i instanceof a||i instanceof Date},J=(i,t,e,s=0)=>i.usesBigInt&&!t.usesBigInt?Number(e)-Number(s):!i.usesBigInt&&t.usesBigInt?BigInt(e.valueOf())-BigInt(s.valueOf()):C(e,-s),C=(i,t)=>t==0?i:i==0?t:typeof i=="bigint"&&typeof t=="bigint"||typeof i=="number"&&typeof t=="number"?i+t:Number(i)+Number(t),at="00000000-0000-0000-0000-000000000000",ut=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;function ot(i){return typeof i=="string"&&ut.test(i)}const w=[];for(let i=0;i<256;++i)w.push((i+256).toString(16).slice(1));function j(i,t=0){return(w[i[t+0]]+w[i[t+1]]+w[i[t+2]]+w[i[t+3]]+"-"+w[i[t+4]]+w[i[t+5]]+"-"+w[i[t+6]]+w[i[t+7]]+"-"+w[i[t+8]]+w[i[t+9]]+"-"+w[i[t+10]]+w[i[t+11]]+w[i[t+12]]+w[i[t+13]]+w[i[t+14]]+w[i[t+15]]).toLowerCase()}function lt(i,t=0){const e=j(i,t);if(!ot(e))throw TypeError("Stringified UUID is invalid");return e}let x;const ct=new Uint8Array(16);function ft(){if(!x){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");x=crypto.getRandomValues.bind(crypto)}return x(ct)}const ht=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),F={randomUUID:ht};function dt(i,t,e){if(F.randomUUID&&!i)return F.randomUUID();i=i||{};const s=i.random??i.rng?.()??ft();if(s.length<16)throw new Error("Random bytes length must be >= 16");return s[6]=s[6]&15|64,s[8]=s[8]&63|128,j(s)}const gt=()=>dt(),z=(i,t)=>lt(i,t),Ot=at,bt=Object.freeze(Object.defineProperty({__proto__:null,ZERO:Ot,create:gt,parse:z},Symbol.toStringTag,{value:"Module"})),B=-1,S={[Symbol.iterator]:()=>S,next:()=>({done:!0,value:void 0})},wt=o.z.string().transform(i=>new Uint8Array(atob(i).split("").map(t=>t.charCodeAt(0))).buffer),It=o.z.union([o.z.null(),o.z.undefined()]).transform(()=>new Uint8Array().buffer),L=10,W=(i,t)=>{if(i==="number"&&!t.isNumeric)throw new Error(`cannot convert series of type ${t.toString()} to number`);if(i==="bigint"&&!t.usesBigInt)throw new Error(`cannot convert series of type ${t.toString()} to bigint`)},H="sy_x_telem_series";class I{key;discriminator=H;dataType;sampleOffset;gl;_data;timeRange=b.ZERO;alignment=0n;cachedMin;cachedMax;writePos=B;_refCount=0;cachedLength;_cachedIndexes;static crudeZ=o.z.object({timeRange:b.z.optional(),dataType:r.z,alignment:o.z.coerce.bigint().optional(),data:o.z.union([wt,It,o.z.instanceof(ArrayBuffer),o.z.instanceof(Uint8Array)]),glBufferUsage:rt.optional().default("static").optional()});static z=I.crudeZ.transform(t=>new I(t));constructor(t){D(t)&&(t={data:t}),t.data??=[];const{dataType:e,timeRange:s,sampleOffset:u=0,glBufferUsage:c="static",alignment:f=0n,key:N=p(),data:g}=t;if(K(g)){const l=g;this.key=l.key,this.dataType=l.dataType,this.sampleOffset=l.sampleOffset,this.gl=l.gl,this._data=l._data,this.timeRange=l.timeRange,this.alignment=l.alignment,this.cachedMin=l.cachedMin,this.cachedMax=l.cachedMax,this.writePos=l.writePos,this._refCount=l._refCount,this.cachedLength=l.cachedLength;return}const y=q(g),m=Array.isArray(g);if(e!=null)this.dataType=new r(e);else{if(g instanceof ArrayBuffer)throw new Error("cannot infer data type from an ArrayBuffer instance when constructing a Series. Please provide a data type.");if(m||y){let l=g;if(!y){if(g.length===0)throw new Error("cannot infer data type from a zero length JS array when constructing a Series. Please provide a data type.");l=g[0]}if(typeof l=="string")this.dataType=r.STRING;else if(typeof l=="number")this.dataType=r.FLOAT64;else if(typeof l=="bigint")this.dataType=r.INT64;else if(typeof l=="boolean")this.dataType=r.BOOLEAN;else if(l instanceof n||l instanceof Date||l instanceof n)this.dataType=r.TIMESTAMP;else if(typeof l=="object")this.dataType=r.JSON;else throw new Error(`cannot infer data type of ${typeof l} when constructing a Series from a JS array`)}else this.dataType=new r(g)}if(!m&&!y)this._data=g;else if(m&&g.length===0)this._data=new this.dataType.Array([]).buffer;else{let l=y?[g]:g;const U=l[0];(U instanceof n||U instanceof Date||U instanceof a)&&(l=l.map(A=>new n(A).valueOf())),this.dataType.equals(r.STRING)?(this.cachedLength=l.length,this._data=new TextEncoder().encode(`${l.join(`
1
+ "use strict";const o=require("zod"),T=require("./index-BQe8OIgm.cjs"),X=require("./index-DdhM_E4k.cjs"),M=require("./index-DOJlZHqJ.cjs"),O=require("./bounds-D6e9xoHt.cjs");require("./box-Cxki783Y.cjs");require("./dimensions-D2QGoNXO.cjs");require("./base-BAM2mqCy.cjs");require("./location-DZi8ftXp.cjs");require("./scale-C6qKDbRb.cjs");require("./xy-CUE3QDNn.cjs");let Q=(i,t=21)=>(e=t)=>{let s="",u=e|0;for(;u--;)s+=i[Math.random()*i.length|0];return s};const _="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",Z=11,tt=Q(_,Z),p=()=>tt(),et=Object.freeze(Object.defineProperty({__proto__:null,LENGTH:Z,create:p},Symbol.toStringTag,{value:"Module"})),k=(i,t)=>e=>e instanceof t||typeof e=="object"&&e!==null&&"discriminator"in e&&e.discriminator===i,st=Object.freeze(Object.defineProperty({__proto__:null,createMatcher:k},Symbol.toStringTag,{value:"Module"})),rt=o.z.enum(["static","dynamic"]),nt=o.z.union([o.z.tuple([o.z.int()]),o.z.tuple([o.z.int(),o.z.int().min(1).max(12)]),o.z.tuple([o.z.int(),o.z.int().min(1).max(12),o.z.int().min(1).max(31)])]),G=(i,t)=>{const e=new n(t);if(![a.DAY,a.HOUR,a.MINUTE,a.SECOND,a.MILLISECOND,a.MICROSECOND,a.NANOSECOND].some(u=>u.equals(e)))throw new Error("Invalid argument for remainder. Must be an even TimeSpan or Timestamp");const s=i.valueOf()%e.valueOf();return i instanceof n?new n(s):new a(s)};class n extends M.ValueExtension{constructor(t,e="UTC"){if(t==null)super(n.now().valueOf());else if(t instanceof Date)super(BigInt(t.getTime())*n.MILLISECOND.valueOf());else if(typeof t=="string")super(n.parseDateTimeString(t,e).valueOf());else if(Array.isArray(t))super(n.parseDate(t));else{let s=0n;t instanceof Number&&(t=t.valueOf()),e==="local"&&(s=n.utcOffset.valueOf()),typeof t=="number"&&(isFinite(t)?t=Math.trunc(t):(isNaN(t)&&(t=0),t===1/0?t=n.MAX:t=n.MIN)),super(BigInt(t.valueOf())+s)}}static parseDate([t=1970,e=1,s=1]){const u=new Date(t,e-1,s,0,0,0,0);return new n(BigInt(u.getTime())*n.MILLISECOND.valueOf()).truncate(n.DAY).valueOf()}valueOf(){return this.value}static parseTimeString(t,e="UTC"){const[s,u,c]=t.split(":");let f="00",N="00";c!=null&&([f,N]=c.split("."));let g=n.hours(parseInt(s??"00")).add(n.minutes(parseInt(u??"00"))).add(n.seconds(parseInt(f??"00"))).add(n.milliseconds(parseInt(N??"00")));return e==="local"&&(g=g.add(n.utcOffset)),g.valueOf()}static parseDateTimeString(t,e="UTC"){if(!t.includes("/")&&!t.includes("-"))return n.parseTimeString(t,e);const s=new Date(t);return t.includes(":")||s.setUTCHours(0,0,0,0),new n(BigInt(s.getTime())*n.MILLISECOND.valueOf(),e).valueOf()}fString(t="ISO",e="UTC"){switch(t){case"ISODate":return this.toISOString(e).slice(0,10);case"ISOTime":return this.toISOString(e).slice(11,23);case"time":return this.timeString(!1,e);case"preciseTime":return this.timeString(!0,e);case"date":return this.dateString();case"preciseDate":return`${this.dateString()} ${this.timeString(!0,e)}`;case"dateTime":return`${this.dateString()} ${this.timeString(!1,e)}`;default:return this.toISOString(e)}}toISOString(t="UTC"){return t==="UTC"?this.date().toISOString():this.sub(n.utcOffset).date().toISOString()}timeString(t=!1,e="UTC"){const s=this.toISOString(e);return t?s.slice(11,23):s.slice(11,19)}dateString(){const t=this.date(),e=t.toLocaleString("default",{month:"short"}),s=t.toLocaleString("default",{day:"numeric"});return`${e} ${s}`}static get utcOffset(){return new a(BigInt(new Date().getTimezoneOffset())*n.MINUTE.valueOf())}static since(t){return new n().span(t)}date(){return new Date(this.milliseconds)}equals(t){return this.valueOf()===new n(t).valueOf()}span(t){return this.range(t).span}range(t){return new b(this,t).makeValid()}spanRange(t){return this.range(this.add(t)).makeValid()}get isZero(){return this.valueOf()===0n}after(t){return this.valueOf()>new n(t).valueOf()}afterEq(t){return this.valueOf()>=new n(t).valueOf()}before(t){return this.valueOf()<new n(t).valueOf()}beforeEq(t){return this.valueOf()<=new n(t).valueOf()}add(t){return new n(this.valueOf()+BigInt(t.valueOf()))}sub(t){return new n(this.valueOf()-BigInt(t.valueOf()))}get hours(){return Number(this.valueOf())/Number(a.HOUR.valueOf())}get minutes(){return Number(this.valueOf())/Number(a.MINUTE.valueOf())}get days(){return Number(this.valueOf())/Number(a.DAY.valueOf())}get seconds(){return Number(this.valueOf())/Number(a.SECOND.valueOf())}get milliseconds(){return Number(this.valueOf())/Number(n.MILLISECOND.valueOf())}get microseconds(){return Number(this.valueOf())/Number(n.MICROSECOND.valueOf())}get nanoseconds(){return Number(this.valueOf())}get year(){return this.date().getUTCFullYear()}setYear(t){const e=this.date();return e.setUTCFullYear(t),new n(e)}get month(){return this.date().getUTCMonth()}setMonth(t){const e=this.date();return e.setUTCMonth(t),new n(e)}get day(){return this.date().getUTCDate()}setDay(t){const e=this.date();return e.setUTCDate(t),new n(e)}get hour(){return this.date().getUTCHours()}setHour(t){const e=this.date();return e.setUTCHours(t),new n(e,"UTC")}get minute(){return this.date().getUTCMinutes()}setMinute(t){const e=this.date();return e.setUTCMinutes(t),new n(e)}get second(){return this.date().getUTCSeconds()}setSecond(t){const e=this.date();return e.setUTCSeconds(t),new n(e)}get millisecond(){return this.date().getUTCMilliseconds()}setMillisecond(t){const e=this.date();return e.setUTCMilliseconds(t),new n(e)}toString(){return this.date().toISOString()}remainder(t){return G(this,t)}get isToday(){return this.truncate(a.DAY).equals(n.now().truncate(a.DAY))}truncate(t){return this.sub(this.remainder(t))}static now(){return new n(new Date)}static max(...t){let e=n.MIN;for(const s of t){const u=new n(s);u.after(e)&&(e=u)}return e}static min(...t){let e=n.MAX;for(const s of t){const u=new n(s);u.before(e)&&(e=u)}return e}static nanoseconds(t,e="UTC"){return new n(t,e)}static NANOSECOND=n.nanoseconds(1);static microseconds(t,e="UTC"){return n.nanoseconds(t*1e3,e)}static MICROSECOND=n.microseconds(1);static milliseconds(t,e="UTC"){return n.microseconds(t*1e3,e)}static MILLISECOND=n.milliseconds(1);static seconds(t,e="UTC"){return n.milliseconds(t*1e3,e)}static SECOND=n.seconds(1);static minutes(t,e="UTC"){return n.seconds(t*60,e)}static MINUTE=n.minutes(1);static hours(t,e="UTC"){return n.minutes(t*60,e)}static HOUR=n.hours(1);static days(t,e="UTC"){return n.hours(t*24,e)}static DAY=n.days(1);static MAX=new n((1n<<63n)-1n);static MIN=new n(0);static ZERO=new n(0);static z=o.z.union([o.z.instanceof(n),o.z.object({value:o.z.bigint()}).transform(t=>new n(t.value)),o.z.string().transform(t=>new n(BigInt(t))),o.z.number().transform(t=>new n(t)),o.z.bigint().transform(t=>new n(t)),o.z.date().transform(t=>new n(t)),o.z.custom(t=>t instanceof a).transform(t=>new n(t)),nt.transform(t=>new n(t))]);static sort(t,e){return Number(t.valueOf()-e.valueOf())}}class a extends M.ValueExtension{constructor(t){typeof t=="number"&&(t=Math.trunc(t.valueOf())),super(BigInt(t.valueOf()))}static fromSeconds(t){return t instanceof a?t:t instanceof v?t.period:t instanceof n?new a(t):["number","bigint"].includes(typeof t)?a.seconds(t):new a(t)}static fromMilliseconds(t){return t instanceof a?t:t instanceof v?t.period:t instanceof n?new a(t):["number","bigint"].includes(typeof t)?a.milliseconds(t):new a(t)}valueOf(){return this.value}lessThan(t){return this.valueOf()<new a(t).valueOf()}greaterThan(t){return this.valueOf()>new a(t).valueOf()}lessThanOrEqual(t){return this.valueOf()<=new a(t).valueOf()}greaterThanOrEqual(t){return this.valueOf()>=new a(t).valueOf()}remainder(t){return G(this,t)}truncate(t){return new a(BigInt(Math.trunc(Number(this.valueOf()/t.valueOf())))*t.valueOf())}toString(){const t=this.truncate(a.DAY),e=this.truncate(a.HOUR),s=this.truncate(a.MINUTE),u=this.truncate(a.SECOND),c=this.truncate(a.MILLISECOND),f=this.truncate(a.MICROSECOND),N=this.truncate(a.NANOSECOND),g=t,y=e.sub(t),m=s.sub(e),l=u.sub(s),U=c.sub(u),A=f.sub(c),$=N.sub(f);let E="";return g.isZero||(E+=`${g.days}d `),y.isZero||(E+=`${y.hours}h `),m.isZero||(E+=`${m.minutes}m `),l.isZero||(E+=`${l.seconds}s `),U.isZero||(E+=`${U.milliseconds}ms `),A.isZero||(E+=`${A.microseconds}µs `),$.isZero||(E+=`${$.nanoseconds}ns`),E.trim()}mult(t){return new a(this.valueOf()*BigInt(t))}get days(){return Number(this.valueOf())/Number(a.DAY.valueOf())}get hours(){return Number(this.valueOf())/Number(a.HOUR.valueOf())}get minutes(){return Number(this.valueOf())/Number(a.MINUTE.valueOf())}get seconds(){return Number(this.valueOf())/Number(a.SECOND.valueOf())}get milliseconds(){return Number(this.valueOf())/Number(a.MILLISECOND.valueOf())}get microseconds(){return Number(this.valueOf())/Number(a.MICROSECOND.valueOf())}get nanoseconds(){return Number(this.valueOf())}get isZero(){return this.valueOf()===0n}equals(t){return this.valueOf()===new a(t).valueOf()}add(t){return new a(this.valueOf()+new a(t).valueOf())}sub(t){return new a(this.valueOf()-new a(t).valueOf())}static nanoseconds(t=1){return new a(t)}static NANOSECOND=a.nanoseconds(1);static microseconds(t=1){return a.nanoseconds(O.mult(t,1e3))}static MICROSECOND=a.microseconds(1);static milliseconds(t=1){return a.microseconds(O.mult(t,1e3))}static MILLISECOND=a.milliseconds(1);static seconds(t=1){return a.milliseconds(O.mult(t,1e3))}static SECOND=a.seconds(1);static minutes(t=1){return a.seconds(O.mult(t,60))}static MINUTE=a.minutes(1);static hours(t){return a.minutes(O.mult(t,60))}static HOUR=a.hours(1);static days(t){return a.hours(O.mult(t,24))}static DAY=a.days(1);static MAX=new a((1n<<63n)-1n);static MIN=new a(0);static ZERO=new a(0);static z=o.z.union([o.z.object({value:o.z.bigint()}).transform(t=>new a(t.value)),o.z.string().transform(t=>new a(BigInt(t))),o.z.number().transform(t=>new a(t)),o.z.instanceof(a)])}class v extends M.ValueExtension{constructor(t){super(t.valueOf())}toString(){return`${this.valueOf()} Hz`}equals(t){return this.valueOf()===new v(t).valueOf()}get period(){return a.seconds(1/this.valueOf())}sampleCount(t){return new a(t).seconds*this.valueOf()}byteCount(t,e){return this.sampleCount(t)*new d(e).valueOf()}span(t){return a.seconds(t/this.valueOf())}byteSpan(t,e){return this.span(t.valueOf()/e.valueOf())}static hz(t){return new v(t)}static khz(t){return v.hz(t*1e3)}static z=o.z.union([o.z.number().transform(t=>new v(t)),o.z.instanceof(v)])}class d extends M.ValueExtension{constructor(t){super(t.valueOf())}length(t){return t.valueOf()/this.valueOf()}size(t){return new h(t*this.valueOf())}static UNKNOWN=new d(0);static BIT128=new d(16);static BIT64=new d(8);static BIT32=new d(4);static BIT16=new d(2);static BIT8=new d(1);static z=o.z.union([o.z.number().transform(t=>new d(t)),o.z.instanceof(d)])}class b{start;end;constructor(t,e){typeof t=="object"&&"start"in t?(this.start=new n(t.start),this.end=new n(t.end)):(this.start=new n(t),this.end=new n(e))}get span(){return new a(this.end.valueOf()-this.start.valueOf())}get isValid(){return this.start.valueOf()<=this.end.valueOf()}makeValid(){return this.isValid?this:this.swap()}get isZero(){return this.span.isZero}get numeric(){return{start:Number(this.start.valueOf()),end:Number(this.end.valueOf())}}swap(){return new b(this.end,this.start)}get numericBounds(){return{lower:Number(this.start.valueOf()),upper:Number(this.end.valueOf())}}equals(t,e=a.ZERO){if(e.isZero)return this.start.equals(t.start)&&this.end.equals(t.end);let s=this.start.sub(t.start).valueOf(),u=this.end.sub(t.end).valueOf();return s<0&&(s=-s),u<0&&(u=-u),s<=e.valueOf()&&u<=e.valueOf()}toString(){return`${this.start.toString()} - ${this.end.toString()}`}toPrettyString(){return`${this.start.fString("preciseDate")} - ${this.span.toString()}`}overlapsWith(t,e=a.ZERO){t=t.makeValid();const s=this.makeValid();if(this.equals(t))return!0;if(t.end.equals(s.start)||s.end.equals(t.start))return!1;const u=n.max(s.start,t.start),c=n.min(s.end,t.end);return c.before(u)?!1:new a(c.sub(u)).greaterThanOrEqual(e)}contains(t){return t instanceof b?this.contains(t.start)&&this.contains(t.end):this.start.beforeEq(t)&&this.end.after(t)}boundBy(t){const e=new b(this.start,this.end);return t.start.after(this.start)&&(e.start=t.start),t.start.after(this.end)&&(e.end=t.start),t.end.before(this.end)&&(e.end=t.end),t.end.before(this.start)&&(e.start=t.end),e}static max(...t){return new b(n.min(...t.map(e=>e.start)),n.max(...t.map(e=>e.end)))}static MAX=new b(n.MIN,n.MAX);static MIN=new b(n.MAX,n.MIN);static ZERO=new b(n.ZERO,n.ZERO);static z=o.z.union([o.z.object({start:n.z,end:n.z}).transform(t=>new b(t.start,t.end)),o.z.instanceof(b)]);static sort(t,e){return n.sort(t.start,e.start)||n.sort(t.end,e.end)}}class r extends M.ValueExtension{constructor(t){if(t instanceof r||typeof t=="string"||typeof t.valueOf()=="string")super(t.valueOf());else{const e=r.ARRAY_CONSTRUCTOR_DATA_TYPES.get(t.constructor.name);if(e==null)throw new Error(`unable to find data type for ${t.toString()}`);super(e.valueOf())}}get Array(){const t=r.ARRAY_CONSTRUCTORS.get(this.toString());if(t==null)throw new Error(`unable to find array constructor for ${this.valueOf()}`);return t}equals(t){return this.valueOf()===t.valueOf()}matches(...t){return t.some(e=>this.equals(e))}toString(){return this.valueOf()}get isVariable(){return this.equals(r.JSON)||this.equals(r.STRING)}get isNumeric(){return!this.isVariable&&!this.equals(r.UUID)}get isInteger(){const t=this.toString();return t.startsWith("int")||t.startsWith("uint")}get isFloat(){return this.toString().startsWith("float")}get density(){const t=r.DENSITIES.get(this.toString());if(t==null)throw new Error(`unable to find density for ${this.valueOf()}`);return t}get isUnsignedInteger(){return this.equals(r.UINT8)||this.equals(r.UINT16)||this.equals(r.UINT32)||this.equals(r.UINT64)}get isSignedInteger(){return this.equals(r.INT8)||this.equals(r.INT16)||this.equals(r.INT32)||this.equals(r.INT64)}canSafelyCastTo(t){return this.equals(t)?!0:!this.isNumeric||!t.isNumeric||this.isVariable||t.isVariable||this.isUnsignedInteger&&t.isSignedInteger?!1:this.isFloat?t.isFloat&&this.density.valueOf()<=t.density.valueOf():this.equals(r.INT32)&&t.equals(r.FLOAT64)||this.equals(r.INT8)&&t.equals(r.FLOAT32)?!0:this.isInteger&&t.isInteger?this.density.valueOf()<=t.density.valueOf()&&this.isUnsignedInteger===t.isUnsignedInteger:!1}canCastTo(t){return this.isNumeric&&t.isNumeric?!0:this.equals(t)}checkArray(t){return t.constructor===this.Array}get usesBigInt(){return r.BIG_INT_TYPES.some(t=>t.equals(this))}static UNKNOWN=new r("unknown");static FLOAT64=new r("float64");static FLOAT32=new r("float32");static INT64=new r("int64");static INT32=new r("int32");static INT16=new r("int16");static INT8=new r("int8");static UINT64=new r("uint64");static UINT32=new r("uint32");static UINT16=new r("uint16");static UINT8=new r("uint8");static BOOLEAN=this.UINT8;static TIMESTAMP=new r("timestamp");static UUID=new r("uuid");static STRING=new r("string");static JSON=new r("json");static ARRAY_CONSTRUCTORS=new Map([[r.UINT8.toString(),Uint8Array],[r.UINT16.toString(),Uint16Array],[r.UINT32.toString(),Uint32Array],[r.UINT64.toString(),BigUint64Array],[r.FLOAT32.toString(),Float32Array],[r.FLOAT64.toString(),Float64Array],[r.INT8.toString(),Int8Array],[r.INT16.toString(),Int16Array],[r.INT32.toString(),Int32Array],[r.INT64.toString(),BigInt64Array],[r.TIMESTAMP.toString(),BigInt64Array],[r.STRING.toString(),Uint8Array],[r.JSON.toString(),Uint8Array],[r.UUID.toString(),Uint8Array]]);static ARRAY_CONSTRUCTOR_DATA_TYPES=new Map([[Uint8Array.name,r.UINT8],[Uint16Array.name,r.UINT16],[Uint32Array.name,r.UINT32],[BigUint64Array.name,r.UINT64],[Float32Array.name,r.FLOAT32],[Float64Array.name,r.FLOAT64],[Int8Array.name,r.INT8],[Int16Array.name,r.INT16],[Int32Array.name,r.INT32],[BigInt64Array.name,r.INT64]]);static DENSITIES=new Map([[r.UINT8.toString(),d.BIT8],[r.UINT16.toString(),d.BIT16],[r.UINT32.toString(),d.BIT32],[r.UINT64.toString(),d.BIT64],[r.FLOAT32.toString(),d.BIT32],[r.FLOAT64.toString(),d.BIT64],[r.INT8.toString(),d.BIT8],[r.INT16.toString(),d.BIT16],[r.INT32.toString(),d.BIT32],[r.INT64.toString(),d.BIT64],[r.TIMESTAMP.toString(),d.BIT64],[r.STRING.toString(),d.UNKNOWN],[r.JSON.toString(),d.UNKNOWN],[r.UUID.toString(),d.BIT128]]);static ALL=[r.UNKNOWN,r.FLOAT64,r.FLOAT32,r.INT64,r.INT32,r.INT16,r.INT8,r.UINT64,r.UINT32,r.UINT16,r.UINT8,r.TIMESTAMP,r.UUID,r.STRING,r.JSON];static BIG_INT_TYPES=[r.INT64,r.UINT64,r.TIMESTAMP];static z=o.z.union([o.z.string().transform(t=>new r(t)),o.z.instanceof(r)])}class h extends M.ValueExtension{constructor(t){super(t.valueOf())}largerThan(t){return this.valueOf()>t.valueOf()}smallerThan(t){return this.valueOf()<t.valueOf()}add(t){return h.bytes(this.valueOf()+t.valueOf())}sub(t){return h.bytes(this.valueOf()-t.valueOf())}truncate(t){return new h(Math.trunc(this.valueOf()/t.valueOf())*t.valueOf())}remainder(t){return h.bytes(this.valueOf()%t.valueOf())}get gigabytes(){return this.valueOf()/h.GIGABYTE.valueOf()}get megabytes(){return this.valueOf()/h.MEGABYTE.valueOf()}get kilobytes(){return this.valueOf()/h.KILOBYTE.valueOf()}get terabytes(){return this.valueOf()/h.TERABYTE.valueOf()}toString(){const t=this.truncate(h.TERABYTE),e=this.truncate(h.GIGABYTE),s=this.truncate(h.MEGABYTE),u=this.truncate(h.KILOBYTE),c=this.truncate(h.BYTE),f=t,N=e.sub(t),g=s.sub(e),y=u.sub(s),m=c.sub(u);let l="";return f.isZero||(l+=`${f.terabytes}TB `),N.isZero||(l+=`${N.gigabytes}GB `),g.isZero||(l+=`${g.megabytes}MB `),y.isZero||(l+=`${y.kilobytes}KB `),(!m.isZero||l==="")&&(l+=`${m.valueOf()}B`),l.trim()}static bytes(t=1){return new h(t)}static BYTE=new h(1);static kilobytes(t=1){return h.bytes(t.valueOf()*1e3)}static KILOBYTE=h.kilobytes(1);static megabytes(t=1){return h.kilobytes(t.valueOf()*1e3)}static MEGABYTE=h.megabytes(1);static gigabytes(t=1){return h.megabytes(t.valueOf()*1e3)}static GIGABYTE=h.gigabytes(1);static terabytes(t){return h.gigabytes(t.valueOf()*1e3)}static TERABYTE=h.terabytes(1);static ZERO=new h(0);static z=o.z.union([o.z.number().transform(t=>new h(t)),o.z.instanceof(h)]);get isZero(){return this.valueOf()===0}}const it=o.z.union([o.z.instanceof(Uint8Array),o.z.instanceof(Uint16Array),o.z.instanceof(Uint32Array),o.z.instanceof(BigUint64Array),o.z.instanceof(Float32Array),o.z.instanceof(Float64Array),o.z.instanceof(Int8Array),o.z.instanceof(Int16Array),o.z.instanceof(Int32Array),o.z.instanceof(BigInt64Array)]),q=i=>{const t=typeof i;return t==="string"||t==="number"||t==="boolean"||t==="bigint"||i instanceof n||i instanceof a||i instanceof Date},J=(i,t,e,s=0)=>i.usesBigInt&&!t.usesBigInt?Number(e)-Number(s):!i.usesBigInt&&t.usesBigInt?BigInt(e.valueOf())-BigInt(s.valueOf()):C(e,-s),C=(i,t)=>t==0?i:i==0?t:typeof i=="bigint"&&typeof t=="bigint"||typeof i=="number"&&typeof t=="number"?i+t:Number(i)+Number(t),at="00000000-0000-0000-0000-000000000000",ut=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;function ot(i){return typeof i=="string"&&ut.test(i)}const w=[];for(let i=0;i<256;++i)w.push((i+256).toString(16).slice(1));function j(i,t=0){return(w[i[t+0]]+w[i[t+1]]+w[i[t+2]]+w[i[t+3]]+"-"+w[i[t+4]]+w[i[t+5]]+"-"+w[i[t+6]]+w[i[t+7]]+"-"+w[i[t+8]]+w[i[t+9]]+"-"+w[i[t+10]]+w[i[t+11]]+w[i[t+12]]+w[i[t+13]]+w[i[t+14]]+w[i[t+15]]).toLowerCase()}function lt(i,t=0){const e=j(i,t);if(!ot(e))throw TypeError("Stringified UUID is invalid");return e}let x;const ct=new Uint8Array(16);function ft(){if(!x){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");x=crypto.getRandomValues.bind(crypto)}return x(ct)}const ht=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto),F={randomUUID:ht};function dt(i,t,e){if(F.randomUUID&&!i)return F.randomUUID();i=i||{};const s=i.random??i.rng?.()??ft();if(s.length<16)throw new Error("Random bytes length must be >= 16");return s[6]=s[6]&15|64,s[8]=s[8]&63|128,j(s)}const gt=()=>dt(),z=(i,t)=>lt(i,t),Ot=at,bt=Object.freeze(Object.defineProperty({__proto__:null,ZERO:Ot,create:gt,parse:z},Symbol.toStringTag,{value:"Module"})),B=-1,S={[Symbol.iterator]:()=>S,next:()=>({done:!0,value:void 0})},wt=o.z.string().transform(i=>new Uint8Array(atob(i).split("").map(t=>t.charCodeAt(0))).buffer),It=o.z.union([o.z.null(),o.z.undefined()]).transform(()=>new Uint8Array().buffer),L=10,W=(i,t)=>{if(i==="number"&&!t.isNumeric)throw new Error(`cannot convert series of type ${t.toString()} to number`);if(i==="bigint"&&!t.usesBigInt)throw new Error(`cannot convert series of type ${t.toString()} to bigint`)},H="sy_x_telem_series";class I{key;discriminator=H;dataType;sampleOffset;gl;_data;timeRange=b.ZERO;alignment=0n;cachedMin;cachedMax;writePos=B;_refCount=0;cachedLength;_cachedIndexes;static crudeZ=o.z.object({timeRange:b.z.optional(),dataType:r.z,alignment:o.z.coerce.bigint().optional(),data:o.z.union([wt,It,o.z.instanceof(ArrayBuffer),o.z.instanceof(Uint8Array)]),glBufferUsage:rt.optional().default("static").optional()});static z=I.crudeZ.transform(t=>new I(t));constructor(t){D(t)&&(t={data:t}),t.data??=[];const{dataType:e,timeRange:s,sampleOffset:u=0,glBufferUsage:c="static",alignment:f=0n,key:N=p(),data:g}=t;if(K(g)){const l=g;this.key=l.key,this.dataType=l.dataType,this.sampleOffset=l.sampleOffset,this.gl=l.gl,this._data=l._data,this.timeRange=l.timeRange,this.alignment=l.alignment,this.cachedMin=l.cachedMin,this.cachedMax=l.cachedMax,this.writePos=l.writePos,this._refCount=l._refCount,this.cachedLength=l.cachedLength;return}const y=q(g),m=Array.isArray(g);if(e!=null)this.dataType=new r(e);else{if(g instanceof ArrayBuffer)throw new Error("cannot infer data type from an ArrayBuffer instance when constructing a Series. Please provide a data type.");if(m||y){let l=g;if(!y){if(g.length===0)throw new Error("cannot infer data type from a zero length JS array when constructing a Series. Please provide a data type.");l=g[0]}if(typeof l=="string")this.dataType=r.STRING;else if(typeof l=="number")this.dataType=r.FLOAT64;else if(typeof l=="bigint")this.dataType=r.INT64;else if(typeof l=="boolean")this.dataType=r.BOOLEAN;else if(l instanceof n||l instanceof Date||l instanceof n)this.dataType=r.TIMESTAMP;else if(typeof l=="object")this.dataType=r.JSON;else throw new Error(`cannot infer data type of ${typeof l} when constructing a Series from a JS array`)}else this.dataType=new r(g)}if(!m&&!y)this._data=g;else if(m&&g.length===0)this._data=new this.dataType.Array([]).buffer;else{let l=y?[g]:g;const U=l[0];(U instanceof n||U instanceof Date||U instanceof a)&&(l=l.map(A=>new n(A).valueOf())),this.dataType.equals(r.STRING)?(this.cachedLength=l.length,this._data=new TextEncoder().encode(`${l.join(`
2
2
  `)}
3
3
  `).buffer):this.dataType.equals(r.JSON)?(this.cachedLength=l.length,this._data=new TextEncoder().encode(`${l.map(A=>T.JSON_CODEC.encodeString(A)).join(`
4
4
  `)}
@@ -1,7 +1,7 @@
1
1
  import { z as o } from "zod";
2
2
  import { J as L } from "./index-B5l_quQn.js";
3
3
  import { s as z } from "./index-D2xcvEO5.js";
4
- import { V as M, n as _ } from "./index-PNh31WTW.js";
4
+ import { V as M, n as _ } from "./index-CBMHFqs4.js";
5
5
  import { m as B, c as C, a as Y, d as R, e as tt, t as et, f as st } from "./bounds-Dj9nG39I.js";
6
6
  import "./box-CO_2_DGG.js";
7
7
  import "./dimensions-CRgergMS.js";
@@ -1 +1 @@
1
- {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/deep/copy.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,KAAK,CAAC,KAAG,CAAoC,CAAC"}
1
+ {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/deep/copy.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,KAAK,CAAC,KAAG,CAWhC,CAAC"}
@@ -67,6 +67,7 @@ export interface TypedGet<V = record.Unknown, T = record.Unknown> {
67
67
  * @returns the transformed path.
68
68
  */
69
69
  export declare const transformPath: (path: string, replacer: (part: string, index: number, parts: string[]) => string | string[] | undefined, separator?: string) => string;
70
+ export declare const resolvePath: <T = record.Unknown>(path: string, obj: T) => string;
70
71
  /**
71
72
  * Gets the value at the given path on the object. If the path does not exist
72
73
  * and the optional flag is set to true, null will be returned. If the path does
@@ -1 +1 @@
1
- {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/deep/path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/deep/path.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Destructor } from '../destructor';
2
2
  /** Handler is called when the value of an Observable changes. */
3
3
  export type Handler<T> = (value: T) => void;
4
+ export type AsyncHandler<T> = (value: T) => Promise<void>;
4
5
  /** A generic interface for an entity whose value can be observed when it changes. */
5
6
  export interface Observable<T> {
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/observe/observe.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,iEAAiE;AACjE,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE5C,qFAAqF;AACrF,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;CAC/C;AAED,gEAAgE;AAChE,MAAM,WAAW,wBAAwB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAChE,6BAA6B;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkB;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAsB;gBAEzB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAKzE,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;IAKzC,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUtB,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;gBAErC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAI5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;IAKzC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;CAGvB"}
1
+ {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../../../src/observe/observe.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,iEAAiE;AACjE,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE5C,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1D,qFAAqF;AACrF,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC;CAC/C;AAED,gEAAgE;AAChE,MAAM,WAAW,wBAAwB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAChE,6BAA6B;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkB;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAsB;gBAEzB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAKzE,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;IAKzC,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAUtB,SAAS,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAItC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;gBAErC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAI5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU;IAKzC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;CAGvB"}
@@ -26,6 +26,14 @@ export interface Stringer {
26
26
  }
27
27
  /** @returns true if the value implements primitive.Stringer, otherwise returns false. */
28
28
  export declare const isStringer: (value: unknown) => boolean;
29
+ /**
30
+ * Type representing zero values for each primitive type
31
+ */
32
+ export type ZeroValue = "" | 0 | 0n | false | null | undefined;
33
+ /**
34
+ * Type representing non-zero values for each primitive type
35
+ */
36
+ export type NonZeroValue = Exclude<Value, ZeroValue>;
29
37
  /**
30
38
  * @returns true if the given primitive is the zero value for its type.
31
39
  * For strings value == ""
@@ -35,5 +43,9 @@ export declare const isStringer: (value: unknown) => boolean;
35
43
  * For objects value == null
36
44
  * For undefined returns true
37
45
  */
38
- export declare const isZero: <V extends Value>(value: V) => boolean;
46
+ export declare const isZero: <V extends Value>(value: V) => value is V & ZeroValue;
47
+ /**
48
+ * Type predicate function that narrows to non-zero values
49
+ */
50
+ export declare const isNonZero: <V extends Value>(value: V) => value is V & NonZeroValue;
39
51
  //# sourceMappingURL=primitive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../../src/primitive/primitive.ts"],"names":[],"mappings":"AASA,uFAAuF;AACvF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;AAErF;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC;IACtD,qCAAqC;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEhB,KAAK,EAAE,CAAC;IAIpB,iFAAiF;IACjF,OAAO,IAAI,CAAC;IAIZ;0BACsB;IACtB,MAAM,IAAI,CAAC;IAIX,oDAAoD;IACpD,QAAQ,IAAI,MAAM;CAGnB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB;AAED,yFAAyF;AACzF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OACuB,CAAC;AAEpE;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,KAAK,EAAE,OAAO,CAAC,KAAG,OAkBlD,CAAC"}
1
+ {"version":3,"file":"primitive.d.ts","sourceRoot":"","sources":["../../../src/primitive/primitive.ts"],"names":[],"mappings":"AASA,uFAAuF;AACvF,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC;AAErF;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,WAAW,CAAC,KAAK,CAAC;IACtD,qCAAqC;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEhB,KAAK,EAAE,CAAC;IAIpB,iFAAiF;IACjF,OAAO,IAAI,CAAC;IAIZ;0BACsB;IACtB,MAAM,IAAI,CAAC;IAIX,oDAAoD;IACpD,QAAQ,IAAI,MAAM;CAGnB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,MAAM,CAAC;CACxB;AAED,yFAAyF;AACzF,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,OACuB,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,KAAK,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,CAAC,GAAG,SAkB/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,KAAK,EAAE,OAAO,CAAC,KAAG,KAAK,IAAI,CAAC,GAAG,YACnD,CAAC"}
package/dist/telem.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./series-CYAhDD6B.cjs");exports.DataType=e.DataType;exports.Density=e.Density;exports.MultiSeries=e.MultiSeries;exports.Rate=e.Rate;exports.Series=e.Series;exports.Size=e.Size;exports.TimeRange=e.TimeRange;exports.TimeSpan=e.TimeSpan;exports.TimeStamp=e.TimeStamp;exports.addSamples=e.addSamples;exports.convertDataType=e.convertDataType;exports.isCrudeSeries=e.isCrudeSeries;exports.isTelemValue=e.isTelemValue;exports.typedArrayZ=e.typedArrayZ;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./series-CcA_WjbJ.cjs");exports.DataType=e.DataType;exports.Density=e.Density;exports.MultiSeries=e.MultiSeries;exports.Rate=e.Rate;exports.Series=e.Series;exports.Size=e.Size;exports.TimeRange=e.TimeRange;exports.TimeSpan=e.TimeSpan;exports.TimeStamp=e.TimeStamp;exports.addSamples=e.addSamples;exports.convertDataType=e.convertDataType;exports.isCrudeSeries=e.isCrudeSeries;exports.isTelemValue=e.isTelemValue;exports.typedArrayZ=e.typedArrayZ;
package/dist/telem.js CHANGED
@@ -1,4 +1,4 @@
1
- import { c as s, D as i, M as t, R as r, S, d as m, b as p, a as T, T as d, g as y, f as l, i as n, e as D, t as o } from "./series-Bn5y1tD1.js";
1
+ import { c as s, D as i, M as t, R as r, S, d as m, b as p, a as T, T as d, g as y, f as l, i as n, e as D, t as o } from "./series-EA1uaEDj.js";
2
2
  export {
3
3
  s as DataType,
4
4
  i as Density,
package/dist/zod.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-mffsMzJx.cjs");exports.zod=e.external;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./external-DsmsSN1Y.cjs");exports.zod=e.external;
package/dist/zod.js CHANGED
@@ -1,4 +1,4 @@
1
- import { e as r } from "./external-BFgJjMcS.js";
1
+ import { e as r } from "./external-Birv9jaY.js";
2
2
  export {
3
3
  r as zod
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synnaxlabs/x",
3
- "version": "0.44.1",
3
+ "version": "0.44.2",
4
4
  "type": "module",
5
5
  "description": "Common Utilities for Synnax Labs",
6
6
  "repository": "https://github.com/synnaxlabs/synnax/tree/main/x/go",
@@ -27,9 +27,9 @@
27
27
  "typescript": "^5.8.3",
28
28
  "vite": "^7.0.4",
29
29
  "vitest": "^3.2.4",
30
- "@synnaxlabs/tsconfig": "^0.43.0",
31
30
  "@synnaxlabs/vite-plugin": "^0.43.0",
32
- "eslint-config-synnaxlabs": "^0.43.0"
31
+ "eslint-config-synnaxlabs": "^0.43.0",
32
+ "@synnaxlabs/tsconfig": "^0.43.0"
33
33
  },
34
34
  "main": "./dist/index.cjs",
35
35
  "module": "./dist/index.js",
package/src/deep/copy.ts CHANGED
@@ -7,4 +7,15 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- export const copy = <T>(obj: T): T => JSON.parse(JSON.stringify(obj));
10
+ export const copy = <T>(obj: T): T => {
11
+ try {
12
+ return structuredClone(obj);
13
+ } catch (_) {
14
+ console.warn(
15
+ "Failed to deep copy object, falling back to JSON.parse(JSON.stringify)",
16
+ obj,
17
+ );
18
+ console.trace();
19
+ return JSON.parse(JSON.stringify(obj));
20
+ }
21
+ };
@@ -184,6 +184,33 @@ describe("path", () => {
184
184
  expect(deep.pathsMatch("a.b.c", "")).toEqual(true);
185
185
  });
186
186
  });
187
+
188
+ describe("resolvePath", () => {
189
+ it("should resolve a path", () => {
190
+ expect(deep.resolvePath("a.b.c", { a: { b: { c: 1 } } })).toEqual("a.b.c");
191
+ });
192
+
193
+ it("should resolve a path with a keyed record", () => {
194
+ expect(deep.resolvePath("a.b.c", { a: { b: { c: 1 } } })).toEqual("a.b.c");
195
+ });
196
+
197
+ it("should resolve a path with a record in an array", () => {
198
+ expect(deep.resolvePath("a.b.c", { a: { b: [{ c: 1 }] } })).toEqual("a.b.c");
199
+ });
200
+
201
+ it("should resolve a path with a keyed record in an array with a key", () => {
202
+ expect(deep.resolvePath("a.b.0.d", { a: { b: [{ key: "c", d: 1 }] } })).toEqual(
203
+ "a.b.c.d",
204
+ );
205
+ });
206
+
207
+ it("should not modify a path that has a keyed record accessed by key", () => {
208
+ expect(deep.resolvePath("a.b.c.d", { a: { b: [{ key: "c", c: 1 }] } })).toEqual(
209
+ "a.b.c.d",
210
+ );
211
+ });
212
+ });
213
+
187
214
  describe("delete", () => {
188
215
  const a: TestRecord = {
189
216
  a: 1,
package/src/deep/path.ts CHANGED
@@ -126,6 +126,16 @@ const defaultGetter = (obj: record.Unknown, key: string): unknown => {
126
126
  return undefined;
127
127
  };
128
128
 
129
+ export const resolvePath = <T = record.Unknown>(path: string, obj: T): string => {
130
+ const parts = path.split(".");
131
+ parts.forEach((part, i) => {
132
+ obj = defaultGetter(obj as record.Unknown, part) as T;
133
+ if (obj != null && typeof obj === "object" && "key" in obj)
134
+ parts[i] = obj.key as string;
135
+ });
136
+ return parts.join(".");
137
+ };
138
+
129
139
  /**
130
140
  * Gets the value at the given path on the object. If the path does not exist
131
141
  * and the optional flag is set to true, null will be returned. If the path does
@@ -12,6 +12,8 @@ import { type Destructor } from "@/destructor";
12
12
  /** Handler is called when the value of an Observable changes. */
13
13
  export type Handler<T> = (value: T) => void;
14
14
 
15
+ export type AsyncHandler<T> = (value: T) => Promise<void>;
16
+
15
17
  /** A generic interface for an entity whose value can be observed when it changes. */
16
18
  export interface Observable<T> {
17
19
  /**
@@ -7,11 +7,12 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- import { describe, expect, it } from "vitest";
10
+ import { describe, expect, it, test } from "vitest";
11
11
  import { z } from "zod";
12
12
 
13
13
  import { binary } from "@/binary";
14
14
  import { primitive } from "@/primitive";
15
+ import { testutil } from "@/testutil";
15
16
 
16
17
  class ExampleStringer implements primitive.Stringer {
17
18
  readonly value: string;
@@ -25,7 +26,7 @@ class ExampleStringer implements primitive.Stringer {
25
26
  }
26
27
 
27
28
  describe("primitive", () => {
28
- describe("isZero", () => {
29
+ describe("isZero and isNonZero", () => {
29
30
  interface Spec {
30
31
  value: primitive.Value;
31
32
  expected: boolean;
@@ -42,10 +43,12 @@ describe("primitive", () => {
42
43
  { value: new ExampleStringer("cat"), expected: false },
43
44
  ];
44
45
  SPECS.forEach(({ value, expected }) => {
45
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
46
- it(`should return ${expected} for ${value} ${typeof value}`, () => {
46
+ test(`isZero should return ${expected} for ${testutil.toString(value)}`, () => {
47
47
  expect(primitive.isZero(value)).toEqual(expected);
48
48
  });
49
+ test(`isNonZero should return ${!expected} for ${testutil.toString(value)}`, () => {
50
+ expect(primitive.isNonZero(value)).toEqual(!expected);
51
+ });
49
52
  });
50
53
  });
51
54
 
@@ -52,6 +52,16 @@ export interface Stringer {
52
52
  export const isStringer = (value: unknown): boolean =>
53
53
  value != null && typeof value === "object" && "toString" in value;
54
54
 
55
+ /**
56
+ * Type representing zero values for each primitive type
57
+ */
58
+ export type ZeroValue = "" | 0 | 0n | false | null | undefined;
59
+
60
+ /**
61
+ * Type representing non-zero values for each primitive type
62
+ */
63
+ export type NonZeroValue = Exclude<Value, ZeroValue>;
64
+
55
65
  /**
56
66
  * @returns true if the given primitive is the zero value for its type.
57
67
  * For strings value == ""
@@ -61,7 +71,7 @@ export const isStringer = (value: unknown): boolean =>
61
71
  * For objects value == null
62
72
  * For undefined returns true
63
73
  */
64
- export const isZero = <V extends Value>(value: V): boolean => {
74
+ export const isZero = <V extends Value>(value: V): value is V & ZeroValue => {
65
75
  if (isStringer(value)) return value?.toString().length === 0;
66
76
  switch (typeof value) {
67
77
  case "string":
@@ -80,3 +90,9 @@ export const isZero = <V extends Value>(value: V): boolean => {
80
90
  return false;
81
91
  }
82
92
  };
93
+
94
+ /**
95
+ * Type predicate function that narrows to non-zero values
96
+ */
97
+ export const isNonZero = <V extends Value>(value: V): value is V & NonZeroValue =>
98
+ !isZero(value);
@@ -77,7 +77,8 @@ describe("testutil", () => {
77
77
  it("should call function multiple times over duration", async () => {
78
78
  const fn = vi.fn();
79
79
  await testutil.expectAlways(fn, 100, 20);
80
- expect(fn).toHaveBeenCalledTimes(5);
80
+ expect(fn.mock.calls.length).toBeGreaterThanOrEqual(3);
81
+ expect(fn.mock.calls.length).toBeLessThanOrEqual(7);
81
82
  });
82
83
 
83
84
  it("should handle async functions", async () => {
@@ -117,7 +118,8 @@ describe("testutil", () => {
117
118
  it("should use default values when not provided", async () => {
118
119
  const fn = vi.fn();
119
120
  await testutil.expectAlways(fn);
120
- expect(fn.mock.calls.length).toBeGreaterThanOrEqual(10);
121
+ expect(fn.mock.calls.length).toBeGreaterThanOrEqual(7);
122
+ expect(fn.mock.calls.length).toBeLessThanOrEqual(12);
121
123
  });
122
124
 
123
125
  it("should respect custom interval", async () => {
@@ -127,7 +129,8 @@ describe("testutil", () => {
127
129
  const elapsed = Date.now() - start;
128
130
  expect(elapsed).toBeGreaterThanOrEqual(90);
129
131
  expect(elapsed).toBeLessThan(150);
130
- expect(fn).toHaveBeenCalledTimes(4);
132
+ expect(fn.mock.calls.length).toBeGreaterThanOrEqual(3);
133
+ expect(fn.mock.calls.length).toBeLessThanOrEqual(5);
131
134
  });
132
135
 
133
136
  it("should handle functions that pass after initial failures", async () => {