@milaboratories/pframes-rs-node 1.0.48 → 1.0.50

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.
@@ -15,7 +15,8 @@ import {
15
15
  } from '@milaboratories/pl-model-common';
16
16
  import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
17
17
 
18
- export type TableId = string;
18
+ export type FrameId = string & { __brand: 'FrameId' };
19
+ export type TableId = string & { __brand: 'TableId' };
19
20
 
20
21
  export interface NodeFrameSymbol extends Symbol {}
21
22
 
@@ -77,6 +78,11 @@ interface NodeTable {
77
78
  boxed: NodeTableSymbol,
78
79
  columnIds: PTableColumnId[]
79
80
  ) => number[];
81
+ pTableGetFootprint: (
82
+ boxed: NodeTableSymbol,
83
+ withPredecessors: boolean,
84
+ signal: AbortSignal | undefined
85
+ ) => Promise<number>;
80
86
  pTableGetShape: (
81
87
  boxed: NodeTableSymbol,
82
88
  signal: AbortSignal | undefined
package/export/export.ts CHANGED
@@ -5,7 +5,7 @@ export type PFrame = {
5
5
  new (
6
6
  spillPath: string,
7
7
  logger?: PFrameInternal.Logger
8
- ): PFrameInternal.PFrameV7;
8
+ ): PFrameInternal.PFrameV8;
9
9
 
10
10
  pprofDump: () => Promise<Uint8Array>;
11
11
  };
package/export/wrapper.ts CHANGED
@@ -16,7 +16,12 @@ import {
16
16
  UniqueValuesResponse
17
17
  } from '@milaboratories/pl-model-common';
18
18
  import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
19
- import type { NodeFrameSymbol, NodeTableSymbol } from './addon-def';
19
+ import type {
20
+ FrameId,
21
+ TableId,
22
+ NodeFrameSymbol,
23
+ NodeTableSymbol
24
+ } from './addon-def';
20
25
  import { AddonSymbol } from './addon';
21
26
  import {
22
27
  hashColumnId,
@@ -28,8 +33,8 @@ import {
28
33
  hashCreateTableRequestColumnId
29
34
  } from './dump';
30
35
 
31
- export class PFrame implements PFrameInternal.PFrameV7 {
32
- public readonly id: string = ulid();
36
+ export class PFrame implements PFrameInternal.PFrameV8 {
37
+ public readonly id: FrameId = ulid() as FrameId;
33
38
  private readonly frame: NodeFrameSymbol;
34
39
 
35
40
  static async pprofDump(): Promise<Uint8Array> {
@@ -373,8 +378,8 @@ export class PFrame implements PFrameInternal.PFrameV7 {
373
378
 
374
379
  createTable(
375
380
  request: PFrameInternal.CreateTableRequestV3
376
- ): PFrameInternal.PTableV5 {
377
- const requestId = ulid();
381
+ ): PFrameInternal.PTableV6 {
382
+ const requestId = ulid() as TableId;
378
383
  const dumpData = {
379
384
  timeStamp: Date.now(),
380
385
  requestType: 'createTable',
@@ -417,7 +422,7 @@ export class PFrame implements PFrameInternal.PFrameV7 {
417
422
  signal?: AbortSignal;
418
423
  }
419
424
  ): Promise<UniqueValuesResponse> {
420
- const requestId = ulid();
425
+ const requestId = ulid() as TableId;
421
426
  dump(
422
427
  [`${this.id}`, `${requestId}.json`],
423
428
  {
@@ -458,7 +463,7 @@ export class PFrame implements PFrameInternal.PFrameV7 {
458
463
  }
459
464
  }
460
465
 
461
- class PTable implements PFrameInternal.PTableV5 {
466
+ class PTable implements PFrameInternal.PTableV6 {
462
467
  constructor(
463
468
  private readonly frame: PFrame,
464
469
  public readonly id: string,
@@ -515,6 +520,47 @@ class PTable implements PFrameInternal.PTableV5 {
515
520
  }
516
521
  }
517
522
 
523
+ async getFootprint(ops?: {
524
+ withPredecessors?: boolean;
525
+ signal?: AbortSignal;
526
+ }): Promise<number> {
527
+ const requestId = ulid();
528
+ dump(
529
+ [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],
530
+ {
531
+ timeStamp: Date.now(),
532
+ requestType: 'getFootprint'
533
+ },
534
+ this.frame.logger
535
+ );
536
+
537
+ this.frame.logger?.(
538
+ 'info',
539
+ `PTable ${this.id} getFootprint request ${requestId} started`
540
+ );
541
+ const t0 = performance.now();
542
+ try {
543
+ ops?.signal?.throwIfAborted();
544
+ return await AddonSymbol.pTableGetFootprint(
545
+ this.table,
546
+ ops?.withPredecessors ?? false,
547
+ ops?.signal
548
+ );
549
+ } catch (err: unknown) {
550
+ throw new Error(
551
+ `PTable ${this.id} getFootprint request ${requestId} failed, ` +
552
+ `error:\n` +
553
+ `${(err as Error).toString()}`
554
+ );
555
+ } finally {
556
+ const t1 = performance.now();
557
+ this.frame.logger?.(
558
+ 'info',
559
+ `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`
560
+ );
561
+ }
562
+ }
563
+
518
564
  async getShape(ops?: { signal?: AbortSignal }): Promise<PTableShape> {
519
565
  const requestId = ulid();
520
566
  dump(
@@ -532,6 +578,7 @@ class PTable implements PFrameInternal.PTableV5 {
532
578
  );
533
579
  const t0 = performance.now();
534
580
  try {
581
+ ops?.signal?.throwIfAborted();
535
582
  return await AddonSymbol.pTableGetShape(this.table, ops?.signal);
536
583
  } catch (err: unknown) {
537
584
  throw new Error(
@@ -555,7 +602,7 @@ class PTable implements PFrameInternal.PTableV5 {
555
602
  signal?: AbortSignal | undefined;
556
603
  }
557
604
  ): Promise<PTableVector[]> {
558
- const requestId = ulid();
605
+ const requestId = ulid() as TableId;
559
606
  dump(
560
607
  [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],
561
608
  {
@@ -603,8 +650,8 @@ class PTable implements PFrameInternal.PTableV5 {
603
650
  }
604
651
  }
605
652
 
606
- filter(request: PTableRecordFilter[]): PFrameInternal.PTableV5 {
607
- const requestId = ulid();
653
+ filter(request: PTableRecordFilter[]): PFrameInternal.PTableV6 {
654
+ const requestId = ulid() as TableId;
608
655
  const dumpData = {
609
656
  timeStamp: Date.now(),
610
657
  table: this.id,
@@ -644,8 +691,8 @@ class PTable implements PFrameInternal.PTableV5 {
644
691
  }
645
692
  }
646
693
 
647
- sort(request: PTableSorting[]): PFrameInternal.PTableV5 {
648
- const requestId = ulid();
694
+ sort(request: PTableSorting[]): PFrameInternal.PTableV6 {
695
+ const requestId = ulid() as TableId;
649
696
  const dumpData = {
650
697
  timeStamp: Date.now(),
651
698
  table: this.id,
@@ -1,6 +1,11 @@
1
1
  import { DataInfo, PColumnInfo, PColumnSpec, PObjectId, PTableColumnId, PTableColumnSpec, PTableRecordFilter, PTableShape, PTableSorting, PTableVector, TableRange, UniqueValuesRequest, UniqueValuesResponse } from '@milaboratories/pl-model-common';
2
2
  import { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
3
- export type TableId = string;
3
+ export type FrameId = string & {
4
+ __brand: 'FrameId';
5
+ };
6
+ export type TableId = string & {
7
+ __brand: 'TableId';
8
+ };
4
9
  export interface NodeFrameSymbol extends Symbol {
5
10
  }
6
11
  export interface NodeTableSymbol extends Symbol {
@@ -24,6 +29,7 @@ interface NodeFrame {
24
29
  interface NodeTable {
25
30
  pTableGetSpec: (boxed: NodeTableSymbol) => PTableColumnSpec[];
26
31
  pTableGetColumnIndices: (boxed: NodeTableSymbol, columnIds: PTableColumnId[]) => number[];
32
+ pTableGetFootprint: (boxed: NodeTableSymbol, withPredecessors: boolean, signal: AbortSignal | undefined) => Promise<number>;
27
33
  pTableGetShape: (boxed: NodeTableSymbol, signal: AbortSignal | undefined) => Promise<PTableShape>;
28
34
  pTableGetData: (boxed: NodeTableSymbol, id: TableId, columnIndices: number[], range: TableRange | undefined, signal: AbortSignal | undefined) => Promise<PTableVector[]>;
29
35
  pTableFilter: (boxed: NodeTableSymbol, id: TableId, request: PTableRecordFilter[]) => NodeTableSymbol;
@@ -1 +1 @@
1
- {"version":3,"file":"addon-def.d.ts","sourceRoot":"","sources":["../export/addon-def.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"addon-def.d.ts","sourceRoot":"","sources":["../export/addon-def.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
2
2
  export type PFrame = {
3
- new (spillPath: string, logger?: PFrameInternal.Logger): PFrameInternal.PFrameV7;
3
+ new (spillPath: string, logger?: PFrameInternal.Logger): PFrameInternal.PFrameV8;
4
4
  pprofDump: () => Promise<Uint8Array>;
5
5
  };
6
6
  export declare const PFrame: PFrame;
@@ -1,20 +1,21 @@
1
- "use strict";var I=Object.defineProperty;var j=(i,t,e)=>t in i?I(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var q=(i,t,e)=>j(i,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("humanize-duration"),l=require("ulid"),E=require("node:module"),w=require("node:path"),M=require("node:url"),U=require("@mapbox/node-pre-gyp"),R=require("node:crypto"),g=require("node:fs"),y=require("node:stream");var D=typeof document<"u"?document.currentScript:null;const P=typeof document>"u"?require("url").pathToFileURL(__filename).href:D&&D.tagName.toUpperCase()==="SCRIPT"&&D.src||new URL("index.js",document.baseURI).href,J=w.dirname(M.fileURLToPath(P)),N=E.createRequire(P),{find:O}=U,d=N(O(w.resolve(J,"../package.json")));async function F(i){try{return await g.promises.access(i),!0}catch{return!1}}async function v(i){await F(i)||await g.promises.mkdir(i,{recursive:!0})}async function _(i,t){const e=`${i}.tmp`;await F(e)&&await g.promises.rm(e,{recursive:!0});const r=typeof t=="string"?Buffer.from(t,"utf8"):t,n=y.Readable.from(r),s=g.createWriteStream(e,{flags:"wx"});await y.Readable.toWeb(n).pipeTo(y.Writable.toWeb(s)),await g.promises.rename(e,i)}function h(i){return R.createHash("sha256").update(i).digest("hex")}function b(i){return i.type==="column"?{...i,id:h(i.id)}:i}function T(i){return{...i,column:b(i.column)}}function k(i){return{...i,columnId:h(i.columnId),filters:i.filters.map(T)}}function B(i){return{...i,column:b(i.column)}}function $(i){const t=i.type;switch(t){case"column":return{...i,columnId:h(i.columnId)};case"slicedColumn":return{...i,columnId:h(i.columnId),newId:h(i.newId)};case"inlineColumn":return{...i,newId:h(i.newId)};case"inner":return{...i,entries:i.entries.map($)};case"full":return{...i,entries:i.entries.map($)};case"outer":return{...i,primary:$(i.primary),secondary:i.secondary.map($)};default:throw new Error(`Unsupported join entry type: ${t}`)}}function A(i){return{...i,src:$(i.src),filters:i.filters.map(T)}}async function u(i,t,e){if(process.env.MI_DUMP_PFRAMES_RS)try{const r=i.map(a=>encodeURIComponent(a)),n=w.join(process.env.MI_DUMP_PFRAMES_RS,...r.slice(0,-1));await v(n);const s=w.join(process.env.MI_DUMP_PFRAMES_RS,...r),o=ArrayBuffer.isView(t)?t:JSON.stringify(t,null,2);await _(s,o)}catch(r){e==null||e("warn",`error while dumping PFrames data: ${r}`)}}let x=class{constructor(t,e){q(this,"id",l.ulid());q(this,"frame");var r;this.logger=e,u([`${this.id}`,`${this.id}.json`],{timeStamp:Date.now(),requestType:"create"},this.logger);try{this.frame=d.pFrameCreate(t,e),(r=this.logger)==null||r.call(this,"info",`PFrame ${this.id} created`)}catch(n){throw new Error(`PFrame ${this.id} creation failed, logger: ${e==null?void 0:e.toString()}, error:
2
- ${n.toString()}`)}}static async pprofDump(){return d.pprofDump()}addColumnSpec(t,e){const r=l.ulid();u([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"addColumnSpec",requestData:{columnId:h(t),columnSpec:e}},this.logger),u([`${this.id}`,"data",`${h(t)}.spec`],{...e},this.logger);try{return d.pFrameAddColumnSpec(this.frame,t,e)}catch(n){throw new Error(`PFrame ${this.id} addColumnSpec request ${r} failed, columnId: ${JSON.stringify(t)}, columnSpec: ${JSON.stringify(e)}, error:
3
- ${n.toString()}`)}}setDataSource(t){const e=l.ulid();u([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"setDataSource"},this.logger);const r={preloadBlob:async n=>{var a,c;const s=l.ulid();u([`${this.id}`,`${s}.json`],{timeStamp:Date.now(),requestType:"preloadBlob",requestData:{blobIds:n}},this.logger),(a=this.logger)==null||a.call(this,"info",`PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(n)}`);const o=performance.now();try{return await t.preloadBlob(n)}finally{const p=performance.now();(c=this.logger)==null||c.call(this,"info",`PFrame ${this.id} preloadBlob finished, took ${m(Math.round(p-o))} (${n.length} blobs)`)}},resolveBlobContent:async n=>{var a;const s=l.ulid();u([`${this.id}`,`${s}.json`],{timeStamp:Date.now(),requestType:"resolveBlobContent",requestData:{blobId:n}},this.logger);const o=await t.resolveBlobContent(n);return(a=this.logger)==null||a.call(this,"info",`PFrame ${this.id} resolved blob ${n}`),u([`${this.id}`,"data",`${n}`],o,this.logger),o}};try{return d.pFrameSetDataSource(this.frame,r)}catch(n){throw new Error(`PFrame ${this.id} setDataSource request ${e} failed, dataSource: ${t.toString()}, error:
4
- ${n.toString()}`)}}setColumnData(t,e){const r=l.ulid();u([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"setColumnData",requestData:{columnId:h(t),dataInfo:e}},this.logger),u([`${this.id}`,"data",`${h(t)}.datainfo`],{...e},this.logger);try{return d.pFrameSetColumnData(this.frame,t,e)}catch(n){throw new Error(`PFrame ${this.id} setColumnData request ${r} failed, columnId: ${JSON.stringify(t)}, dataInfo: ${JSON.stringify(e)}, error:
5
- ${n.toString()}`)}}dispose(){var e;const t=l.ulid();u([`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"dispose"},this.logger);try{d.pFrameDispose(this.frame),(e=this.logger)==null||e.call(this,"info",`PFrame ${this.id} disposed`)}catch(r){throw new Error(`PFrame ${this.id} dispose request ${t} failed, error:
6
- ${r.toString()}`)}}[Symbol.dispose](){this.dispose()}async findColumns(t){var n;const e=l.ulid();u([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"findColumns",requestData:t},this.logger);const r=performance.now();try{return await d.pFrameFindColumns(this.frame,t)}catch(s){throw new Error(`PFrame ${this.id} findColumns request ${e} failed, request: ${JSON.stringify(t)}, error:
7
- ${s.toString()}`)}finally{const s=performance.now();(n=this.logger)==null||n.call(this,"info",`PFrame ${this.id} findColumns request ${e} took ${m(Math.round(s-r))}`)}}async deleteColumn(t){var n;const e=l.ulid();u([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"deleteColumn",requestData:t},this.logger);const r=performance.now();try{return await d.pFrameDeleteColumn(this.frame,t)}catch(s){throw new Error(`PFrame ${this.id} deleteColumn request ${e} failed, request: ${JSON.stringify(t)}, error:
8
- ${s.toString()}`)}finally{const s=performance.now();(n=this.logger)==null||n.call(this,"info",`PFrame ${this.id} deleteColumn request ${e} took ${m(Math.round(s-r))}`)}}async getColumnSpec(t){var n;const e=l.ulid();u([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getColumnSpec",requestData:{columnId:h(t)}},this.logger);const r=performance.now();try{return await d.pFrameGetColumnSpec(this.frame,t)}catch(s){throw new Error(`PFrame ${this.id} getColumnSpec request ${e} failed, columnId: ${JSON.stringify(t)}, error:
9
- ${s.toString()}`)}finally{const s=performance.now();(n=this.logger)==null||n.call(this,"info",`PFrame ${this.id} getColumnSpec request ${e} took ${m(Math.round(s-r))}`)}}async listColumns(){var r;const t=l.ulid();u([`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"listColumns"},this.logger);const e=performance.now();try{return await d.pFrameListColumns(this.frame)}catch(n){throw new Error(`PFrame ${this.id} listColumns request ${t} failed, error:
10
- ${n.toString()}`)}finally{const n=performance.now();(r=this.logger)==null||r.call(this,"info",`PFrame ${this.id} listColumns request ${t} took ${m(Math.round(n-e))}`)}}createTable(t){var s;const e=l.ulid(),r={timeStamp:Date.now(),requestType:"createTable",requestData:A(t)};u([`${this.id}`,`${e}.json`],r,this.logger),u([`${this.id}`,`${e}`,`${e}.json`],r,this.logger);const n=performance.now();try{const o=d.pFrameCreateTable(this.frame,e,t);return new S(this,e,o)}catch(o){throw new Error(`PFrame ${this.id} createTable request ${e} failed, request: ${JSON.stringify(t)}, error:
11
- ${o.toString()}`)}finally{const o=performance.now();(s=this.logger)==null||s.call(this,"info",`PFrame ${this.id} createTable request ${e} took ${m(Math.round(o-n))}`)}}async getUniqueValues(t,e){var s,o,a;const r=l.ulid();u([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"getUniqueValues",requestData:k(t)},this.logger),(s=this.logger)==null||s.call(this,"info",`PFrame ${this.id} getUniqueValues request ${r} started`);const n=performance.now();try{return(o=e==null?void 0:e.signal)==null||o.throwIfAborted(),await d.pFrameGetUniqueValues(this.frame,r,t,e==null?void 0:e.signal)}catch(c){throw new Error(`PFrame ${this.id} getUniqueValues request ${r} failed, request: ${JSON.stringify(t)}, error:
12
- ${c.toString()}`)}finally{const c=performance.now();(a=this.logger)==null||a.call(this,"info",`PFrame ${this.id} getUniqueValues request ${r} finished, took ${m(Math.round(c-n))}`)}}};class S{constructor(t,e,r){var n,s;this.frame=t,this.id=e,this.table=r,(s=(n=this.frame).logger)==null||s.call(n,"info",`PTable ${this.id} created`)}getSpec(){const t=l.ulid();u([`${this.frame.id}`,`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"getSpec"},this.frame.logger);try{return d.pTableGetSpec(this.table)}catch(e){throw new Error(`PTable ${this.id} getSpec request ${t} failed, error:
13
- ${e.toString()}`)}}getColumnIndices(t){const e=l.ulid();u([`${this.frame.id}`,`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getColumnIndices",requestData:{columnIds:t.map(b)}},this.frame.logger);try{return d.pTableGetColumnIndices(this.table,t)}catch(r){throw new Error(`PTable ${this.id} getColumnIndices request ${e} failed, columnIds: ${JSON.stringify(t)}, error:
14
- ${r.toString()}`)}}async getShape(t){var n,s,o,a;const e=l.ulid();u([`${this.frame.id}`,`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getShape"},this.frame.logger),(s=(n=this.frame).logger)==null||s.call(n,"info",`PTable ${this.id} getShape request ${e} started`);const r=performance.now();try{return await d.pTableGetShape(this.table,t==null?void 0:t.signal)}catch(c){throw new Error(`PTable ${this.id} getShape request ${e} failed, error:
15
- ${c.toString()}`)}finally{const c=performance.now();(a=(o=this.frame).logger)==null||a.call(o,"info",`PTable ${this.id} getShape request ${e} finished, took ${m(Math.round(c-r))}`)}}async getData(t,e){var o,a,c,p,C;const r=l.ulid();u([`${this.frame.id}`,`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"getData",requestData:{columnIndices:t,range:(e==null?void 0:e.range)??null}},this.frame.logger),(a=(o=this.frame).logger)==null||a.call(o,"info",`PTable ${this.id} getData request ${r} started`);let n=0;const s=performance.now();try{(c=e==null?void 0:e.signal)==null||c.throwIfAborted();const f=await d.pTableGetData(this.table,r,t,e==null?void 0:e.range,e==null?void 0:e.signal);return n=f[0].data.length,f}catch(f){throw new Error(`PTable ${this.id} getData request ${r} failed, columnIndices: ${JSON.stringify(t)}, range: ${e!=null&&e.range?JSON.stringify(e.range):void 0}, error:
16
- ${f.toString()}`)}finally{const f=performance.now();(C=(p=this.frame).logger)==null||C.call(p,"info",`PTable ${this.id} getData request ${r} finished, took ${m(Math.round(f-s))} (${n} rows)`)}}filter(t){var s,o;const e=l.ulid(),r={timeStamp:Date.now(),table:this.id,requestType:"filter",requestData:{filters:t.map(T)}};u([`${this.frame.id}`,`${e}.json`],r,this.frame.logger),u([`${this.frame.id}`,`${e}`,`${e}.json`],r,this.frame.logger);const n=performance.now();try{const a=d.pTableFilter(this.table,e,t);return new S(this.frame,e,a)}catch(a){throw new Error(`PTable ${this.id} filter request ${e} failed, request: ${JSON.stringify(t)}, error:
17
- ${a.toString()}`)}finally{const a=performance.now();(o=(s=this.frame).logger)==null||o.call(s,"info",`PTable ${this.id} filter request ${e} took ${m(Math.round(a-n))}`)}}sort(t){var s,o;const e=l.ulid(),r={timeStamp:Date.now(),table:this.id,requestType:"sort",requestData:t.map(B)};u([`${this.frame.id}`,`${e}.json`],r,this.frame.logger),u([`${this.frame.id}`,`${e}`,`${e}.json`],r,this.frame.logger);const n=performance.now();try{const a=d.pTableSort(this.table,e,t);return new S(this.frame,e,a)}catch(a){throw new Error(`PTable ${this.id} sort request ${e} failed, request: ${JSON.stringify(t)}, error:
18
- ${a.toString()}`)}finally{const a=performance.now();(o=(s=this.frame).logger)==null||o.call(s,"info",`PTable ${this.id} sort request ${e} took ${m(Math.round(a-n))}`)}}dispose(){var e,r;const t=l.ulid();u([`${this.frame.id}`,`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"dispose"},this.frame.logger);try{d.pTableDispose(this.table),(r=(e=this.frame).logger)==null||r.call(e,"info",`PTable ${this.id} disposed`)}catch(n){throw new Error(`PTable ${this.id} dispose request ${t} failed, error:
19
- ${n.toString()}`)}}[Symbol.dispose](){this.dispose()}}const V=x;exports.PFrame=V;
1
+ "use strict";var I=Object.defineProperty;var j=(n,t,e)=>t in n?I(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var S=(n,t,e)=>j(n,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("humanize-duration"),u=require("ulid"),E=require("node:module"),w=require("node:path"),M=require("node:url"),U=require("@mapbox/node-pre-gyp"),R=require("node:crypto"),p=require("node:fs"),y=require("node:stream");var D=typeof document<"u"?document.currentScript:null;const F=typeof document>"u"?require("url").pathToFileURL(__filename).href:D&&D.tagName.toUpperCase()==="SCRIPT"&&D.src||new URL("index.js",document.baseURI).href,J=w.dirname(M.fileURLToPath(F)),N=E.createRequire(F),{find:O}=U,d=N(O(w.resolve(J,"../package.json")));async function C(n){try{return await p.promises.access(n),!0}catch{return!1}}async function k(n){await C(n)||await p.promises.mkdir(n,{recursive:!0})}async function v(n,t){const e=`${n}.tmp`;await C(e)&&await p.promises.rm(e,{recursive:!0});const r=typeof t=="string"?Buffer.from(t,"utf8"):t,i=y.Readable.from(r),a=p.createWriteStream(e,{flags:"wx"});await y.Readable.toWeb(i).pipeTo(y.Writable.toWeb(a)),await p.promises.rename(e,n)}function f(n){return R.createHash("sha256").update(n).digest("hex")}function b(n){return n.type==="column"?{...n,id:f(n.id)}:n}function T(n){return{...n,column:b(n.column)}}function _(n){return{...n,columnId:f(n.columnId),filters:n.filters.map(T)}}function A(n){return{...n,column:b(n.column)}}function g(n){const t=n.type;switch(t){case"column":return{...n,columnId:f(n.columnId)};case"slicedColumn":return{...n,columnId:f(n.columnId),newId:f(n.newId)};case"inlineColumn":return{...n,newId:f(n.newId)};case"inner":return{...n,entries:n.entries.map(g)};case"full":return{...n,entries:n.entries.map(g)};case"outer":return{...n,primary:g(n.primary),secondary:n.secondary.map(g)};default:throw new Error(`Unsupported join entry type: ${t}`)}}function B(n){return{...n,src:g(n.src),filters:n.filters.map(T)}}async function l(n,t,e){if(process.env.MI_DUMP_PFRAMES_RS)try{const r=n.map(o=>encodeURIComponent(o)),i=w.join(process.env.MI_DUMP_PFRAMES_RS,...r.slice(0,-1));await k(i);const a=w.join(process.env.MI_DUMP_PFRAMES_RS,...r),s=ArrayBuffer.isView(t)?t:JSON.stringify(t,null,2);await v(a,s)}catch(r){e==null||e("warn",`error while dumping PFrames data: ${r}`)}}let x=class{constructor(t,e){S(this,"id",u.ulid());S(this,"frame");var r;this.logger=e,l([`${this.id}`,`${this.id}.json`],{timeStamp:Date.now(),requestType:"create"},this.logger);try{this.frame=d.pFrameCreate(t,e),(r=this.logger)==null||r.call(this,"info",`PFrame ${this.id} created`)}catch(i){throw new Error(`PFrame ${this.id} creation failed, logger: ${e==null?void 0:e.toString()}, error:
2
+ ${i.toString()}`)}}static async pprofDump(){return d.pprofDump()}addColumnSpec(t,e){const r=u.ulid();l([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"addColumnSpec",requestData:{columnId:f(t),columnSpec:e}},this.logger),l([`${this.id}`,"data",`${f(t)}.spec`],{...e},this.logger);try{return d.pFrameAddColumnSpec(this.frame,t,e)}catch(i){throw new Error(`PFrame ${this.id} addColumnSpec request ${r} failed, columnId: ${JSON.stringify(t)}, columnSpec: ${JSON.stringify(e)}, error:
3
+ ${i.toString()}`)}}setDataSource(t){const e=u.ulid();l([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"setDataSource"},this.logger);const r={preloadBlob:async i=>{var o,h;const a=u.ulid();l([`${this.id}`,`${a}.json`],{timeStamp:Date.now(),requestType:"preloadBlob",requestData:{blobIds:i}},this.logger),(o=this.logger)==null||o.call(this,"info",`PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(i)}`);const s=performance.now();try{return await t.preloadBlob(i)}finally{const c=performance.now();(h=this.logger)==null||h.call(this,"info",`PFrame ${this.id} preloadBlob finished, took ${m(Math.round(c-s))} (${i.length} blobs)`)}},resolveBlobContent:async i=>{var o;const a=u.ulid();l([`${this.id}`,`${a}.json`],{timeStamp:Date.now(),requestType:"resolveBlobContent",requestData:{blobId:i}},this.logger);const s=await t.resolveBlobContent(i);return(o=this.logger)==null||o.call(this,"info",`PFrame ${this.id} resolved blob ${i}`),l([`${this.id}`,"data",`${i}`],s,this.logger),s}};try{return d.pFrameSetDataSource(this.frame,r)}catch(i){throw new Error(`PFrame ${this.id} setDataSource request ${e} failed, dataSource: ${t.toString()}, error:
4
+ ${i.toString()}`)}}setColumnData(t,e){const r=u.ulid();l([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"setColumnData",requestData:{columnId:f(t),dataInfo:e}},this.logger),l([`${this.id}`,"data",`${f(t)}.datainfo`],{...e},this.logger);try{return d.pFrameSetColumnData(this.frame,t,e)}catch(i){throw new Error(`PFrame ${this.id} setColumnData request ${r} failed, columnId: ${JSON.stringify(t)}, dataInfo: ${JSON.stringify(e)}, error:
5
+ ${i.toString()}`)}}dispose(){var e;const t=u.ulid();l([`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"dispose"},this.logger);try{d.pFrameDispose(this.frame),(e=this.logger)==null||e.call(this,"info",`PFrame ${this.id} disposed`)}catch(r){throw new Error(`PFrame ${this.id} dispose request ${t} failed, error:
6
+ ${r.toString()}`)}}[Symbol.dispose](){this.dispose()}async findColumns(t){var i;const e=u.ulid();l([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"findColumns",requestData:t},this.logger);const r=performance.now();try{return await d.pFrameFindColumns(this.frame,t)}catch(a){throw new Error(`PFrame ${this.id} findColumns request ${e} failed, request: ${JSON.stringify(t)}, error:
7
+ ${a.toString()}`)}finally{const a=performance.now();(i=this.logger)==null||i.call(this,"info",`PFrame ${this.id} findColumns request ${e} took ${m(Math.round(a-r))}`)}}async deleteColumn(t){var i;const e=u.ulid();l([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"deleteColumn",requestData:t},this.logger);const r=performance.now();try{return await d.pFrameDeleteColumn(this.frame,t)}catch(a){throw new Error(`PFrame ${this.id} deleteColumn request ${e} failed, request: ${JSON.stringify(t)}, error:
8
+ ${a.toString()}`)}finally{const a=performance.now();(i=this.logger)==null||i.call(this,"info",`PFrame ${this.id} deleteColumn request ${e} took ${m(Math.round(a-r))}`)}}async getColumnSpec(t){var i;const e=u.ulid();l([`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getColumnSpec",requestData:{columnId:f(t)}},this.logger);const r=performance.now();try{return await d.pFrameGetColumnSpec(this.frame,t)}catch(a){throw new Error(`PFrame ${this.id} getColumnSpec request ${e} failed, columnId: ${JSON.stringify(t)}, error:
9
+ ${a.toString()}`)}finally{const a=performance.now();(i=this.logger)==null||i.call(this,"info",`PFrame ${this.id} getColumnSpec request ${e} took ${m(Math.round(a-r))}`)}}async listColumns(){var r;const t=u.ulid();l([`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"listColumns"},this.logger);const e=performance.now();try{return await d.pFrameListColumns(this.frame)}catch(i){throw new Error(`PFrame ${this.id} listColumns request ${t} failed, error:
10
+ ${i.toString()}`)}finally{const i=performance.now();(r=this.logger)==null||r.call(this,"info",`PFrame ${this.id} listColumns request ${t} took ${m(Math.round(i-e))}`)}}createTable(t){var a;const e=u.ulid(),r={timeStamp:Date.now(),requestType:"createTable",requestData:B(t)};l([`${this.id}`,`${e}.json`],r,this.logger),l([`${this.id}`,`${e}`,`${e}.json`],r,this.logger);const i=performance.now();try{const s=d.pFrameCreateTable(this.frame,e,t);return new q(this,e,s)}catch(s){throw new Error(`PFrame ${this.id} createTable request ${e} failed, request: ${JSON.stringify(t)}, error:
11
+ ${s.toString()}`)}finally{const s=performance.now();(a=this.logger)==null||a.call(this,"info",`PFrame ${this.id} createTable request ${e} took ${m(Math.round(s-i))}`)}}async getUniqueValues(t,e){var a,s,o;const r=u.ulid();l([`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"getUniqueValues",requestData:_(t)},this.logger),(a=this.logger)==null||a.call(this,"info",`PFrame ${this.id} getUniqueValues request ${r} started`);const i=performance.now();try{return(s=e==null?void 0:e.signal)==null||s.throwIfAborted(),await d.pFrameGetUniqueValues(this.frame,r,t,e==null?void 0:e.signal)}catch(h){throw new Error(`PFrame ${this.id} getUniqueValues request ${r} failed, request: ${JSON.stringify(t)}, error:
12
+ ${h.toString()}`)}finally{const h=performance.now();(o=this.logger)==null||o.call(this,"info",`PFrame ${this.id} getUniqueValues request ${r} finished, took ${m(Math.round(h-i))}`)}}};class q{constructor(t,e,r){var i,a;this.frame=t,this.id=e,this.table=r,(a=(i=this.frame).logger)==null||a.call(i,"info",`PTable ${this.id} created`)}getSpec(){const t=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"getSpec"},this.frame.logger);try{return d.pTableGetSpec(this.table)}catch(e){throw new Error(`PTable ${this.id} getSpec request ${t} failed, error:
13
+ ${e.toString()}`)}}getColumnIndices(t){const e=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getColumnIndices",requestData:{columnIds:t.map(b)}},this.frame.logger);try{return d.pTableGetColumnIndices(this.table,t)}catch(r){throw new Error(`PTable ${this.id} getColumnIndices request ${e} failed, columnIds: ${JSON.stringify(t)}, error:
14
+ ${r.toString()}`)}}async getFootprint(t){var i,a,s,o,h;const e=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getFootprint"},this.frame.logger),(a=(i=this.frame).logger)==null||a.call(i,"info",`PTable ${this.id} getFootprint request ${e} started`);const r=performance.now();try{return(s=t==null?void 0:t.signal)==null||s.throwIfAborted(),await d.pTableGetFootprint(this.table,(t==null?void 0:t.withPredecessors)??!1,t==null?void 0:t.signal)}catch(c){throw new Error(`PTable ${this.id} getFootprint request ${e} failed, error:
15
+ ${c.toString()}`)}finally{const c=performance.now();(h=(o=this.frame).logger)==null||h.call(o,"info",`PTable ${this.id} getFootprint request ${e} finished, took ${m(Math.round(c-r))}`)}}async getShape(t){var i,a,s,o,h;const e=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${e}.json`],{timeStamp:Date.now(),requestType:"getShape"},this.frame.logger),(a=(i=this.frame).logger)==null||a.call(i,"info",`PTable ${this.id} getShape request ${e} started`);const r=performance.now();try{return(s=t==null?void 0:t.signal)==null||s.throwIfAborted(),await d.pTableGetShape(this.table,t==null?void 0:t.signal)}catch(c){throw new Error(`PTable ${this.id} getShape request ${e} failed, error:
16
+ ${c.toString()}`)}finally{const c=performance.now();(h=(o=this.frame).logger)==null||h.call(o,"info",`PTable ${this.id} getShape request ${e} finished, took ${m(Math.round(c-r))}`)}}async getData(t,e){var s,o,h,c,P;const r=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${r}.json`],{timeStamp:Date.now(),requestType:"getData",requestData:{columnIndices:t,range:(e==null?void 0:e.range)??null}},this.frame.logger),(o=(s=this.frame).logger)==null||o.call(s,"info",`PTable ${this.id} getData request ${r} started`);let i=0;const a=performance.now();try{(h=e==null?void 0:e.signal)==null||h.throwIfAborted();const $=await d.pTableGetData(this.table,r,t,e==null?void 0:e.range,e==null?void 0:e.signal);return i=$[0].data.length,$}catch($){throw new Error(`PTable ${this.id} getData request ${r} failed, columnIndices: ${JSON.stringify(t)}, range: ${e!=null&&e.range?JSON.stringify(e.range):void 0}, error:
17
+ ${$.toString()}`)}finally{const $=performance.now();(P=(c=this.frame).logger)==null||P.call(c,"info",`PTable ${this.id} getData request ${r} finished, took ${m(Math.round($-a))} (${i} rows)`)}}filter(t){var a,s;const e=u.ulid(),r={timeStamp:Date.now(),table:this.id,requestType:"filter",requestData:{filters:t.map(T)}};l([`${this.frame.id}`,`${e}.json`],r,this.frame.logger),l([`${this.frame.id}`,`${e}`,`${e}.json`],r,this.frame.logger);const i=performance.now();try{const o=d.pTableFilter(this.table,e,t);return new q(this.frame,e,o)}catch(o){throw new Error(`PTable ${this.id} filter request ${e} failed, request: ${JSON.stringify(t)}, error:
18
+ ${o.toString()}`)}finally{const o=performance.now();(s=(a=this.frame).logger)==null||s.call(a,"info",`PTable ${this.id} filter request ${e} took ${m(Math.round(o-i))}`)}}sort(t){var a,s;const e=u.ulid(),r={timeStamp:Date.now(),table:this.id,requestType:"sort",requestData:t.map(A)};l([`${this.frame.id}`,`${e}.json`],r,this.frame.logger),l([`${this.frame.id}`,`${e}`,`${e}.json`],r,this.frame.logger);const i=performance.now();try{const o=d.pTableSort(this.table,e,t);return new q(this.frame,e,o)}catch(o){throw new Error(`PTable ${this.id} sort request ${e} failed, request: ${JSON.stringify(t)}, error:
19
+ ${o.toString()}`)}finally{const o=performance.now();(s=(a=this.frame).logger)==null||s.call(a,"info",`PTable ${this.id} sort request ${e} took ${m(Math.round(o-i))}`)}}dispose(){var e,r;const t=u.ulid();l([`${this.frame.id}`,`${this.id}`,`${t}.json`],{timeStamp:Date.now(),requestType:"dispose"},this.frame.logger);try{d.pTableDispose(this.table),(r=(e=this.frame).logger)==null||r.call(e,"info",`PTable ${this.id} disposed`)}catch(i){throw new Error(`PTable ${this.id} dispose request ${t} failed, error:
20
+ ${i.toString()}`)}}[Symbol.dispose](){this.dispose()}}const V=x;exports.PFrame=V;
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../export/addon.ts","../export/dump.ts","../export/wrapper.ts","../export/export.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport gyp from '@mapbox/node-pre-gyp';\nimport type { AddonSymbol } from './addon-def';\n\nconst nodeFileUrl = import.meta.url;\nconst nodeDirname = dirname(fileURLToPath(nodeFileUrl));\nconst nodeRequire = createRequire(nodeFileUrl);\n\nconst { find: findAddon } = gyp;\n\n// Pre-gyp reads binary section from package.json and constructs a path to addon\n// https://github.com/mapbox/node-pre-gyp/blob/a541932680034f5de9e7365ef8d9a0d7a11cc1a9/lib/package.js#L35\n// Require calls dlopen under the hood\n// https://nodejs.org/api/process.html#processdlopenmodule-filename-flags\n// DLOpen then searches for napi_register_module_v1 in addon export table\n// https://github.com/search?q=repo%3Anodejs%2Fnode%20NAPI_MODULE_INITIALIZER&type=code\n// And neon exports napi_register_module_v1 from #[neon::main]\n// https://github.com/neon-bindings/neon/blob/b1728fa21e968ccde9611ac9955cf6d638be16e6/crates/neon/src/context/internal.rs#L76\nconst AddonSymbol = nodeRequire(\n findAddon(resolve(nodeDirname, '../package.json'))\n) as AddonSymbol;\n\nexport { AddonSymbol };\n","import { createHash } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable, Writable } from 'node:stream';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport {\n PObjectId,\n PTableColumnId,\n PTableRecordFilter,\n PTableSorting,\n UniqueValuesRequest\n} from '@milaboratories/pl-model-common';\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await fs.promises.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function ensureDirExists(fileOrDir: string): Promise<void> {\n if (!(await fileExists(fileOrDir))) {\n await fs.promises.mkdir(fileOrDir, { recursive: true });\n }\n}\n\nasync function writeFile(\n filePath: string,\n data: string | Uint8Array\n): Promise<void> {\n const tempPath = `${filePath}.tmp`;\n if (await fileExists(tempPath)) {\n await fs.promises.rm(tempPath, { recursive: true });\n }\n\n const buffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;\n const source = Readable.from(buffer);\n const destination = fs.createWriteStream(tempPath, { flags: 'wx' });\n await Readable.toWeb(source).pipeTo(Writable.toWeb(destination));\n\n await fs.promises.rename(tempPath, filePath);\n}\n\nexport function hashColumnId(columnId: PObjectId): PObjectId {\n return createHash('sha256').update(columnId).digest('hex') as PObjectId;\n}\n\nexport function hashTableColumnId(tableId: PTableColumnId): PTableColumnId {\n if (tableId.type === 'column') {\n return {\n ...tableId,\n id: hashColumnId(tableId.id)\n };\n }\n return tableId;\n}\n\nexport function hashFilterColumnId(\n filter: PTableRecordFilter\n): PTableRecordFilter {\n return {\n ...filter,\n column: hashTableColumnId(filter.column)\n };\n}\n\nexport function hashUniqueValuesRequestColumnId(\n request: UniqueValuesRequest\n): UniqueValuesRequest {\n return {\n ...request,\n columnId: hashColumnId(request.columnId),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport function hashSortingColumnId(sorting: PTableSorting): PTableSorting {\n return {\n ...sorting,\n column: hashTableColumnId(sorting.column)\n };\n}\n\nfunction hashJoinEntryColumnId(\n entry: PFrameInternal.JoinEntryV3\n): PFrameInternal.JoinEntryV3 {\n const type = entry.type;\n switch (type) {\n case 'column':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId)\n };\n case 'slicedColumn':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId),\n newId: hashColumnId(entry.newId)\n };\n case 'inlineColumn':\n return {\n ...entry,\n newId: hashColumnId(entry.newId)\n };\n case 'inner':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'full':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'outer':\n return {\n ...entry,\n primary: hashJoinEntryColumnId(entry.primary),\n secondary: entry.secondary.map(hashJoinEntryColumnId)\n };\n default:\n throw new Error(`Unsupported join entry type: ${type}`);\n }\n}\n\nexport function hashCreateTableRequestColumnId(\n request: PFrameInternal.CreateTableRequestV3\n): PFrameInternal.CreateTableRequestV3 {\n return {\n ...request,\n src: hashJoinEntryColumnId(request.src),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport async function dump(\n relativePath: string[],\n data: { [key: string]: Object } | Uint8Array,\n logger?: PFrameInternal.Logger\n): Promise<void> {\n if (!process.env.MI_DUMP_PFRAMES_RS) return;\n try {\n const relativeUri = relativePath.map((part) => encodeURIComponent(part));\n const fileDir = path.join(\n process.env.MI_DUMP_PFRAMES_RS,\n ...relativeUri.slice(0, -1)\n );\n await ensureDirExists(fileDir);\n\n const filePath = path.join(process.env.MI_DUMP_PFRAMES_RS, ...relativeUri);\n const fileData = ArrayBuffer.isView(data)\n ? (data as Uint8Array)\n : JSON.stringify(data, null, 2);\n await writeFile(filePath, fileData);\n } catch (error: unknown) {\n logger?.('warn', `error while dumping PFrames data: ${error}`);\n }\n}\n","import humanizeDuration from 'humanize-duration';\nimport { ulid } from 'ulid';\nimport {\n DataInfo,\n PColumnInfo,\n PColumnSpec,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableShape,\n PTableSorting,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse\n} from '@milaboratories/pl-model-common';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type { NodeFrameSymbol, NodeTableSymbol } from './addon-def';\nimport { AddonSymbol } from './addon';\nimport {\n hashColumnId,\n dump,\n hashTableColumnId,\n hashFilterColumnId,\n hashUniqueValuesRequestColumnId,\n hashSortingColumnId,\n hashCreateTableRequestColumnId\n} from './dump';\n\nexport class PFrame implements PFrameInternal.PFrameV7 {\n public readonly id: string = ulid();\n private readonly frame: NodeFrameSymbol;\n\n static async pprofDump(): Promise<Uint8Array> {\n return AddonSymbol.pprofDump();\n }\n\n constructor(\n spillPath: string,\n public readonly logger?: PFrameInternal.Logger\n ) {\n dump(\n [`${this.id}`, `${this.id}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'create'\n },\n this.logger\n );\n\n try {\n this.frame = AddonSymbol.pFrameCreate(spillPath, logger);\n this.logger?.('info', `PFrame ${this.id} created`);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} creation failed, ` +\n `logger: ${logger?.toString()}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n addColumnSpec(columnId: PObjectId, columnSpec: PColumnSpec): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'addColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId),\n columnSpec\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`],\n {\n ...columnSpec\n },\n this.logger\n );\n\n try {\n return AddonSymbol.pFrameAddColumnSpec(this.frame, columnId, columnSpec);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `columnSpec: ${JSON.stringify(columnSpec)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n setDataSource(dataSource: PFrameInternal.PFrameDataSource): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setDataSource'\n },\n this.logger\n );\n\n const wrappedDataSource = {\n preloadBlob: async (\n blobIds: PFrameInternal.PFrameBlobId[]\n ): Promise<void> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'preloadBlob',\n requestData: {\n blobIds\n }\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`\n );\n const t0 = performance.now();\n try {\n return await dataSource.preloadBlob(blobIds);\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`\n );\n }\n },\n resolveBlobContent: async (\n blobId: PFrameInternal.PFrameBlobId\n ): Promise<Uint8Array> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'resolveBlobContent',\n requestData: {\n blobId\n }\n },\n this.logger\n );\n\n const blob = await dataSource.resolveBlobContent(blobId);\n this.logger?.('info', `PFrame ${this.id} resolved blob ${blobId}`);\n dump([`${this.id}`, `data`, `${blobId}`], blob, this.logger);\n\n return blob;\n }\n };\n\n try {\n return AddonSymbol.pFrameSetDataSource(this.frame, wrappedDataSource);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} setDataSource request ${requestId} failed, ` +\n `dataSource: ${dataSource.toString()}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n setColumnData(\n columnId: PObjectId,\n dataInfo: DataInfo<PFrameInternal.PFrameBlobId>\n ): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setColumnData',\n requestData: {\n columnId: hashColumnId(columnId),\n dataInfo\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`],\n {\n ...dataInfo\n },\n this.logger\n );\n\n try {\n return AddonSymbol.pFrameSetColumnData(this.frame, columnId, dataInfo);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} setColumnData request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `dataInfo: ${JSON.stringify(dataInfo)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n dispose(): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.logger\n );\n\n try {\n AddonSymbol.pFrameDispose(this.frame);\n this.logger?.('info', `PFrame ${this.id} disposed`);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n async findColumns(\n request: PFrameInternal.FindColumnsRequest\n ): Promise<PFrameInternal.FindColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'findColumns',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameFindColumns(this.frame, request);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} findColumns request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async deleteColumn(\n request: PFrameInternal.DeleteColumnFromColumnsRequest\n ): Promise<PFrameInternal.DeleteColumnFromColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'deleteColumn',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameDeleteColumn(this.frame, request);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} deleteColumn request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getColumnSpec(columnId: PObjectId): Promise<PColumnSpec> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId)\n }\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameGetColumnSpec(this.frame, columnId);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async listColumns(): Promise<PColumnInfo[]> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'listColumns'\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameListColumns(this.frame);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} listColumns request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n createTable(\n request: PFrameInternal.CreateTableRequestV3\n ): PFrameInternal.PTableV5 {\n const requestId = ulid();\n const dumpData = {\n timeStamp: Date.now(),\n requestType: 'createTable',\n requestData: hashCreateTableRequestColumnId(request)\n };\n dump([`${this.id}`, `${requestId}.json`], dumpData, this.logger);\n dump(\n [`${this.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pFrameCreateTable(\n this.frame,\n requestId,\n request\n );\n return new PTable(this, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} createTable request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getUniqueValues(\n request: UniqueValuesRequest,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<UniqueValuesResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getUniqueValues',\n requestData: hashUniqueValuesRequestColumnId(request)\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pFrameGetUniqueValues(\n this.frame,\n requestId,\n request,\n ops?.signal\n );\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n}\n\nclass PTable implements PFrameInternal.PTableV5 {\n constructor(\n private readonly frame: PFrame,\n public readonly id: string,\n private readonly table: NodeTableSymbol\n ) {\n this.frame.logger?.('info', `PTable ${this.id} created`);\n }\n\n getSpec(): PTableColumnSpec[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getSpec'\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetSpec(this.table);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getSpec request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n getColumnIndices(columnIds: PTableColumnId[]): number[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnIndices',\n requestData: {\n columnIds: columnIds.map(hashTableColumnId)\n }\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetColumnIndices(this.table, columnIds);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getColumnIndices request ${requestId} failed, ` +\n `columnIds: ${JSON.stringify(columnIds)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n async getShape(ops?: { signal?: AbortSignal }): Promise<PTableShape> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getShape'\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n return await AddonSymbol.pTableGetShape(this.table, ops?.signal);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getShape request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getData(\n columnIndices: number[],\n ops?: {\n range?: TableRange | undefined;\n signal?: AbortSignal | undefined;\n }\n ): Promise<PTableVector[]> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getData',\n requestData: {\n columnIndices,\n range: ops?.range ?? null\n }\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} started`\n );\n let rowCount = 0;\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n const result = await AddonSymbol.pTableGetData(\n this.table,\n requestId,\n columnIndices,\n ops?.range,\n ops?.signal\n );\n rowCount = result[0].data.length;\n return result;\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getData request ${requestId} failed, ` +\n `columnIndices: ${JSON.stringify(columnIndices)}, ` +\n `range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`\n );\n }\n }\n\n filter(request: PTableRecordFilter[]): PFrameInternal.PTableV5 {\n const requestId = ulid();\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'filter',\n requestData: {\n filters: request.map(hashFilterColumnId)\n }\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableFilter(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} filter request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n sort(request: PTableSorting[]): PFrameInternal.PTableV5 {\n const requestId = ulid();\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'sort',\n requestData: request.map(hashSortingColumnId)\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableSort(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} sort request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n dispose() {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.frame.logger\n );\n\n try {\n AddonSymbol.pTableDispose(this.table);\n this.frame.logger?.('info', `PTable ${this.id} disposed`);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n","import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport { PFrame as PFrameImpl } from './wrapper';\n\nexport type PFrame = {\n new (\n spillPath: string,\n logger?: PFrameInternal.Logger\n ): PFrameInternal.PFrameV7;\n\n pprofDump: () => Promise<Uint8Array>;\n};\n\nexport const PFrame: PFrame = PFrameImpl;\n"],"names":["nodeFileUrl","_documentCurrentScript","nodeDirname","dirname","fileURLToPath","nodeRequire","createRequire","findAddon","gyp","AddonSymbol","resolve","fileExists","path","fs","ensureDirExists","fileOrDir","writeFile","filePath","data","tempPath","buffer","source","Readable","destination","Writable","hashColumnId","columnId","createHash","hashTableColumnId","tableId","hashFilterColumnId","filter","hashUniqueValuesRequestColumnId","request","hashSortingColumnId","sorting","hashJoinEntryColumnId","entry","type","hashCreateTableRequestColumnId","dump","relativePath","logger","relativeUri","part","fileDir","fileData","error","PFrame$1","spillPath","__publicField","ulid","_a","err","columnSpec","requestId","dataSource","wrappedDataSource","blobIds","t0","t1","_b","humanizeDuration","blobId","blob","dataInfo","dumpData","boxed","PTable","ops","_c","frame","id","table","columnIds","_d","columnIndices","rowCount","result","_e","PFrame","PFrameImpl"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../export/addon.ts","../export/dump.ts","../export/wrapper.ts","../export/export.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport gyp from '@mapbox/node-pre-gyp';\nimport type { AddonSymbol } from './addon-def';\n\nconst nodeFileUrl = import.meta.url;\nconst nodeDirname = dirname(fileURLToPath(nodeFileUrl));\nconst nodeRequire = createRequire(nodeFileUrl);\n\nconst { find: findAddon } = gyp;\n\n// Pre-gyp reads binary section from package.json and constructs a path to addon\n// https://github.com/mapbox/node-pre-gyp/blob/a541932680034f5de9e7365ef8d9a0d7a11cc1a9/lib/package.js#L35\n// Require calls dlopen under the hood\n// https://nodejs.org/api/process.html#processdlopenmodule-filename-flags\n// DLOpen then searches for napi_register_module_v1 in addon export table\n// https://github.com/search?q=repo%3Anodejs%2Fnode%20NAPI_MODULE_INITIALIZER&type=code\n// And neon exports napi_register_module_v1 from #[neon::main]\n// https://github.com/neon-bindings/neon/blob/b1728fa21e968ccde9611ac9955cf6d638be16e6/crates/neon/src/context/internal.rs#L76\nconst AddonSymbol = nodeRequire(\n findAddon(resolve(nodeDirname, '../package.json'))\n) as AddonSymbol;\n\nexport { AddonSymbol };\n","import { createHash } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Readable, Writable } from 'node:stream';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport {\n PObjectId,\n PTableColumnId,\n PTableRecordFilter,\n PTableSorting,\n UniqueValuesRequest\n} from '@milaboratories/pl-model-common';\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await fs.promises.access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function ensureDirExists(fileOrDir: string): Promise<void> {\n if (!(await fileExists(fileOrDir))) {\n await fs.promises.mkdir(fileOrDir, { recursive: true });\n }\n}\n\nasync function writeFile(\n filePath: string,\n data: string | Uint8Array\n): Promise<void> {\n const tempPath = `${filePath}.tmp`;\n if (await fileExists(tempPath)) {\n await fs.promises.rm(tempPath, { recursive: true });\n }\n\n const buffer = typeof data === 'string' ? Buffer.from(data, 'utf8') : data;\n const source = Readable.from(buffer);\n const destination = fs.createWriteStream(tempPath, { flags: 'wx' });\n await Readable.toWeb(source).pipeTo(Writable.toWeb(destination));\n\n await fs.promises.rename(tempPath, filePath);\n}\n\nexport function hashColumnId(columnId: PObjectId): PObjectId {\n return createHash('sha256').update(columnId).digest('hex') as PObjectId;\n}\n\nexport function hashTableColumnId(tableId: PTableColumnId): PTableColumnId {\n if (tableId.type === 'column') {\n return {\n ...tableId,\n id: hashColumnId(tableId.id)\n };\n }\n return tableId;\n}\n\nexport function hashFilterColumnId(\n filter: PTableRecordFilter\n): PTableRecordFilter {\n return {\n ...filter,\n column: hashTableColumnId(filter.column)\n };\n}\n\nexport function hashUniqueValuesRequestColumnId(\n request: UniqueValuesRequest\n): UniqueValuesRequest {\n return {\n ...request,\n columnId: hashColumnId(request.columnId),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport function hashSortingColumnId(sorting: PTableSorting): PTableSorting {\n return {\n ...sorting,\n column: hashTableColumnId(sorting.column)\n };\n}\n\nfunction hashJoinEntryColumnId(\n entry: PFrameInternal.JoinEntryV3\n): PFrameInternal.JoinEntryV3 {\n const type = entry.type;\n switch (type) {\n case 'column':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId)\n };\n case 'slicedColumn':\n return {\n ...entry,\n columnId: hashColumnId(entry.columnId),\n newId: hashColumnId(entry.newId)\n };\n case 'inlineColumn':\n return {\n ...entry,\n newId: hashColumnId(entry.newId)\n };\n case 'inner':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'full':\n return {\n ...entry,\n entries: entry.entries.map(hashJoinEntryColumnId)\n };\n case 'outer':\n return {\n ...entry,\n primary: hashJoinEntryColumnId(entry.primary),\n secondary: entry.secondary.map(hashJoinEntryColumnId)\n };\n default:\n throw new Error(`Unsupported join entry type: ${type}`);\n }\n}\n\nexport function hashCreateTableRequestColumnId(\n request: PFrameInternal.CreateTableRequestV3\n): PFrameInternal.CreateTableRequestV3 {\n return {\n ...request,\n src: hashJoinEntryColumnId(request.src),\n filters: request.filters.map(hashFilterColumnId)\n };\n}\n\nexport async function dump(\n relativePath: string[],\n data: { [key: string]: Object } | Uint8Array,\n logger?: PFrameInternal.Logger\n): Promise<void> {\n if (!process.env.MI_DUMP_PFRAMES_RS) return;\n try {\n const relativeUri = relativePath.map((part) => encodeURIComponent(part));\n const fileDir = path.join(\n process.env.MI_DUMP_PFRAMES_RS,\n ...relativeUri.slice(0, -1)\n );\n await ensureDirExists(fileDir);\n\n const filePath = path.join(process.env.MI_DUMP_PFRAMES_RS, ...relativeUri);\n const fileData = ArrayBuffer.isView(data)\n ? (data as Uint8Array)\n : JSON.stringify(data, null, 2);\n await writeFile(filePath, fileData);\n } catch (error: unknown) {\n logger?.('warn', `error while dumping PFrames data: ${error}`);\n }\n}\n","import humanizeDuration from 'humanize-duration';\nimport { ulid } from 'ulid';\nimport {\n DataInfo,\n PColumnInfo,\n PColumnSpec,\n PObjectId,\n PTableColumnId,\n PTableColumnSpec,\n PTableRecordFilter,\n PTableShape,\n PTableSorting,\n PTableVector,\n TableRange,\n UniqueValuesRequest,\n UniqueValuesResponse\n} from '@milaboratories/pl-model-common';\nimport type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport type {\n FrameId,\n TableId,\n NodeFrameSymbol,\n NodeTableSymbol\n} from './addon-def';\nimport { AddonSymbol } from './addon';\nimport {\n hashColumnId,\n dump,\n hashTableColumnId,\n hashFilterColumnId,\n hashUniqueValuesRequestColumnId,\n hashSortingColumnId,\n hashCreateTableRequestColumnId\n} from './dump';\n\nexport class PFrame implements PFrameInternal.PFrameV8 {\n public readonly id: FrameId = ulid() as FrameId;\n private readonly frame: NodeFrameSymbol;\n\n static async pprofDump(): Promise<Uint8Array> {\n return AddonSymbol.pprofDump();\n }\n\n constructor(\n spillPath: string,\n public readonly logger?: PFrameInternal.Logger\n ) {\n dump(\n [`${this.id}`, `${this.id}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'create'\n },\n this.logger\n );\n\n try {\n this.frame = AddonSymbol.pFrameCreate(spillPath, logger);\n this.logger?.('info', `PFrame ${this.id} created`);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} creation failed, ` +\n `logger: ${logger?.toString()}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n addColumnSpec(columnId: PObjectId, columnSpec: PColumnSpec): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'addColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId),\n columnSpec\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.spec`],\n {\n ...columnSpec\n },\n this.logger\n );\n\n try {\n return AddonSymbol.pFrameAddColumnSpec(this.frame, columnId, columnSpec);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} addColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `columnSpec: ${JSON.stringify(columnSpec)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n setDataSource(dataSource: PFrameInternal.PFrameDataSource): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setDataSource'\n },\n this.logger\n );\n\n const wrappedDataSource = {\n preloadBlob: async (\n blobIds: PFrameInternal.PFrameBlobId[]\n ): Promise<void> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'preloadBlob',\n requestData: {\n blobIds\n }\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob started, blobIds: ${JSON.stringify(blobIds)}`\n );\n const t0 = performance.now();\n try {\n return await dataSource.preloadBlob(blobIds);\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} preloadBlob finished, took ${humanizeDuration(Math.round(t1 - t0))} (${blobIds.length} blobs)`\n );\n }\n },\n resolveBlobContent: async (\n blobId: PFrameInternal.PFrameBlobId\n ): Promise<Uint8Array> => {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'resolveBlobContent',\n requestData: {\n blobId\n }\n },\n this.logger\n );\n\n const blob = await dataSource.resolveBlobContent(blobId);\n this.logger?.('info', `PFrame ${this.id} resolved blob ${blobId}`);\n dump([`${this.id}`, `data`, `${blobId}`], blob, this.logger);\n\n return blob;\n }\n };\n\n try {\n return AddonSymbol.pFrameSetDataSource(this.frame, wrappedDataSource);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} setDataSource request ${requestId} failed, ` +\n `dataSource: ${dataSource.toString()}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n setColumnData(\n columnId: PObjectId,\n dataInfo: DataInfo<PFrameInternal.PFrameBlobId>\n ): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'setColumnData',\n requestData: {\n columnId: hashColumnId(columnId),\n dataInfo\n }\n },\n this.logger\n );\n\n dump(\n [`${this.id}`, `data`, `${hashColumnId(columnId)}.datainfo`],\n {\n ...dataInfo\n },\n this.logger\n );\n\n try {\n return AddonSymbol.pFrameSetColumnData(this.frame, columnId, dataInfo);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} setColumnData request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `dataInfo: ${JSON.stringify(dataInfo)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n dispose(): void {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.logger\n );\n\n try {\n AddonSymbol.pFrameDispose(this.frame);\n this.logger?.('info', `PFrame ${this.id} disposed`);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n [Symbol.dispose](): void {\n this.dispose();\n }\n\n async findColumns(\n request: PFrameInternal.FindColumnsRequest\n ): Promise<PFrameInternal.FindColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'findColumns',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameFindColumns(this.frame, request);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} findColumns request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} findColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async deleteColumn(\n request: PFrameInternal.DeleteColumnFromColumnsRequest\n ): Promise<PFrameInternal.DeleteColumnFromColumnsResponse> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'deleteColumn',\n requestData: request\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameDeleteColumn(this.frame, request);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} deleteColumn request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} deleteColumn request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getColumnSpec(columnId: PObjectId): Promise<PColumnSpec> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnSpec',\n requestData: {\n columnId: hashColumnId(columnId)\n }\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameGetColumnSpec(this.frame, columnId);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} getColumnSpec request ${requestId} failed, ` +\n `columnId: ${JSON.stringify(columnId)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getColumnSpec request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async listColumns(): Promise<PColumnInfo[]> {\n const requestId = ulid();\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'listColumns'\n },\n this.logger\n );\n\n const t0 = performance.now();\n try {\n return await AddonSymbol.pFrameListColumns(this.frame);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} listColumns request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} listColumns request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n createTable(\n request: PFrameInternal.CreateTableRequestV3\n ): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n requestType: 'createTable',\n requestData: hashCreateTableRequestColumnId(request)\n };\n dump([`${this.id}`, `${requestId}.json`], dumpData, this.logger);\n dump(\n [`${this.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pFrameCreateTable(\n this.frame,\n requestId,\n request\n );\n return new PTable(this, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} createTable request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} createTable request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getUniqueValues(\n request: UniqueValuesRequest,\n ops?: {\n signal?: AbortSignal;\n }\n ): Promise<UniqueValuesResponse> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getUniqueValues',\n requestData: hashUniqueValuesRequestColumnId(request)\n },\n this.logger\n );\n\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pFrameGetUniqueValues(\n this.frame,\n requestId,\n request,\n ops?.signal\n );\n } catch (err: unknown) {\n throw new Error(\n `PFrame ${this.id} getUniqueValues request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.logger?.(\n 'info',\n `PFrame ${this.id} getUniqueValues request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n}\n\nclass PTable implements PFrameInternal.PTableV6 {\n constructor(\n private readonly frame: PFrame,\n public readonly id: string,\n private readonly table: NodeTableSymbol\n ) {\n this.frame.logger?.('info', `PTable ${this.id} created`);\n }\n\n getSpec(): PTableColumnSpec[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getSpec'\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetSpec(this.table);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getSpec request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n getColumnIndices(columnIds: PTableColumnId[]): number[] {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getColumnIndices',\n requestData: {\n columnIds: columnIds.map(hashTableColumnId)\n }\n },\n this.frame.logger\n );\n\n try {\n return AddonSymbol.pTableGetColumnIndices(this.table, columnIds);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getColumnIndices request ${requestId} failed, ` +\n `columnIds: ${JSON.stringify(columnIds)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n async getFootprint(ops?: {\n withPredecessors?: boolean;\n signal?: AbortSignal;\n }): Promise<number> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getFootprint'\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetFootprint(\n this.table,\n ops?.withPredecessors ?? false,\n ops?.signal\n );\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getFootprint request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getFootprint request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getShape(ops?: { signal?: AbortSignal }): Promise<PTableShape> {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getShape'\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} started`\n );\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n return await AddonSymbol.pTableGetShape(this.table, ops?.signal);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getShape request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getShape request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n async getData(\n columnIndices: number[],\n ops?: {\n range?: TableRange | undefined;\n signal?: AbortSignal | undefined;\n }\n ): Promise<PTableVector[]> {\n const requestId = ulid() as TableId;\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'getData',\n requestData: {\n columnIndices,\n range: ops?.range ?? null\n }\n },\n this.frame.logger\n );\n\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} started`\n );\n let rowCount = 0;\n const t0 = performance.now();\n try {\n ops?.signal?.throwIfAborted();\n const result = await AddonSymbol.pTableGetData(\n this.table,\n requestId,\n columnIndices,\n ops?.range,\n ops?.signal\n );\n rowCount = result[0].data.length;\n return result;\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} getData request ${requestId} failed, ` +\n `columnIndices: ${JSON.stringify(columnIndices)}, ` +\n `range: ${ops?.range ? JSON.stringify(ops.range) : undefined}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} getData request ${requestId} finished, took ${humanizeDuration(Math.round(t1 - t0))} (${rowCount} rows)`\n );\n }\n }\n\n filter(request: PTableRecordFilter[]): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'filter',\n requestData: {\n filters: request.map(hashFilterColumnId)\n }\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableFilter(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} filter request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} filter request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n sort(request: PTableSorting[]): PFrameInternal.PTableV6 {\n const requestId = ulid() as TableId;\n const dumpData = {\n timeStamp: Date.now(),\n table: this.id,\n requestType: 'sort',\n requestData: request.map(hashSortingColumnId)\n };\n dump(\n [`${this.frame.id}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n dump(\n [`${this.frame.id}`, `${requestId}`, `${requestId}.json`],\n dumpData,\n this.frame.logger\n );\n\n const t0 = performance.now();\n try {\n const boxed = AddonSymbol.pTableSort(this.table, requestId, request);\n return new PTable(this.frame, requestId, boxed);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} sort request ${requestId} failed, ` +\n `request: ${JSON.stringify(request)}, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n } finally {\n const t1 = performance.now();\n this.frame.logger?.(\n 'info',\n `PTable ${this.id} sort request ${requestId} took ${humanizeDuration(Math.round(t1 - t0))}`\n );\n }\n }\n\n dispose() {\n const requestId = ulid();\n dump(\n [`${this.frame.id}`, `${this.id}`, `${requestId}.json`],\n {\n timeStamp: Date.now(),\n requestType: 'dispose'\n },\n this.frame.logger\n );\n\n try {\n AddonSymbol.pTableDispose(this.table);\n this.frame.logger?.('info', `PTable ${this.id} disposed`);\n } catch (err: unknown) {\n throw new Error(\n `PTable ${this.id} dispose request ${requestId} failed, ` +\n `error:\\n` +\n `${(err as Error).toString()}`\n );\n }\n }\n\n [Symbol.dispose]() {\n this.dispose();\n }\n}\n","import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';\nimport { PFrame as PFrameImpl } from './wrapper';\n\nexport type PFrame = {\n new (\n spillPath: string,\n logger?: PFrameInternal.Logger\n ): PFrameInternal.PFrameV8;\n\n pprofDump: () => Promise<Uint8Array>;\n};\n\nexport const PFrame: PFrame = PFrameImpl;\n"],"names":["nodeFileUrl","_documentCurrentScript","nodeDirname","dirname","fileURLToPath","nodeRequire","createRequire","findAddon","gyp","AddonSymbol","resolve","fileExists","path","fs","ensureDirExists","fileOrDir","writeFile","filePath","data","tempPath","buffer","source","Readable","destination","Writable","hashColumnId","columnId","createHash","hashTableColumnId","tableId","hashFilterColumnId","filter","hashUniqueValuesRequestColumnId","request","hashSortingColumnId","sorting","hashJoinEntryColumnId","entry","type","hashCreateTableRequestColumnId","dump","relativePath","logger","relativeUri","part","fileDir","fileData","error","PFrame$1","spillPath","__publicField","ulid","_a","err","columnSpec","requestId","dataSource","wrappedDataSource","blobIds","t0","t1","_b","humanizeDuration","blobId","blob","dataInfo","dumpData","boxed","PTable","ops","_c","frame","id","table","columnIds","_e","_d","columnIndices","rowCount","result","PFrame","PFrameImpl"],"mappings":"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"}