@milaboratories/pl-middle-layer 1.11.5 → 1.11.6

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.
@@ -6,6 +6,7 @@ export declare class PFrameDriver implements SdkPFrameDriver {
6
6
  private readonly blobDriver;
7
7
  private readonly pFrames;
8
8
  private readonly pTables;
9
+ private readonly blobContentCache;
9
10
  constructor(blobDriver: DownloadDriver);
10
11
  createPFrame(def: PFrameDef<PlTreeNodeAccessor>, ctx: ComputableCtx): PFrameHandle;
11
12
  createPTable(def: PTableDef<PColumn<PlTreeNodeAccessor>>, ctx: ComputableCtx): PTableHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EAEP,SAAS,EACT,SAAS,EACT,SAAS,EAEV,MAAM,sBAAsB,CAAC;AA8E9B,qBAAa,YAAa,YAAW,eAAe;IAItC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAHvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;gBAEjE,UAAU,EAAE,cAAc;IAwChD,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY;IAOlF,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAC3C,GAAG,EAAE,aAAa,GACjB,YAAY;IAYF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAelB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAI9E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9D,kBAAkB,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,OAAO,CAAC,0BAA0B,CAAC;IAsBzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAQnB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAK1D,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;CAI3B;AA+CD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAI/E"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,IAAI,eAAe,EAC/B,OAAO,EAEP,SAAS,EACT,SAAS,EACT,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAuF9B,qBAAa,YAAa,YAAW,eAAe;IAKtC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsE;IAC9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;gBAEnC,UAAU,EAAE,cAAc;IA8ChD,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,aAAa,GAAG,YAAY;IAOlF,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,EAC3C,GAAG,EAAE,aAAa,GACjB,YAAY;IAYF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IAelB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAI9E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAI9D,kBAAkB,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,OAAO,CAAC,0BAA0B,CAAC;IAsBzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAQnB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IAKpD,OAAO,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAK1D,OAAO,CAClB,MAAM,EAAE,YAAY,EACpB,aAAa,EAAE,MAAM,EAAE,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;CAI3B;AA+CD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAI/E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milaboratories/pl-middle-layer",
3
- "version": "1.11.5",
3
+ "version": "1.11.6",
4
4
  "description": "Pl Middle Layer",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",
@@ -22,6 +22,7 @@
22
22
  "@milaboratories/pframes-node": "^1.5.10",
23
23
  "canonicalize": "^2.0.0",
24
24
  "denque": "^2.1.0",
25
+ "lru-cache": "^11.0.1",
25
26
  "quickjs-emscripten": "^0.31.0",
26
27
  "undici": "^6.19.8",
27
28
  "utility-types": "^3.11.0",
@@ -29,17 +30,17 @@
29
30
  "zod": "^3.23.8",
30
31
  "@milaboratories/computable": "^2.1.12",
31
32
  "@milaboratories/resolve-helper": "^1.0.1",
32
- "@platforma-sdk/block-tools": "^2.3.12",
33
+ "@platforma-sdk/block-tools": "^2.3.13",
33
34
  "@milaboratories/pl-client": "^2.5.0",
34
- "@milaboratories/pl-drivers": "^1.2.32",
35
35
  "@milaboratories/pl-model-common": "^1.3.14",
36
- "@milaboratories/pl-model-middle-layer": "^1.4.4",
37
- "@milaboratories/pl-tree": "^1.4.1",
36
+ "@milaboratories/pl-drivers": "^1.2.32",
37
+ "@milaboratories/pl-model-middle-layer": "^1.4.5",
38
+ "@platforma-sdk/model": "^1.5.40",
38
39
  "@milaboratories/ts-helpers": "^1.0.30",
40
+ "@milaboratories/pl-tree": "^1.4.1",
39
41
  "@platforma-sdk/workflow-tengo": "1.4.2",
40
- "@platforma-sdk/model": "^1.5.40",
41
- "@milaboratories/pl-local": "^1.2.4",
42
- "@milaboratories/pl-config": "^1.2.6"
42
+ "@milaboratories/pl-config": "^1.2.6",
43
+ "@milaboratories/pl-local": "^1.2.5"
43
44
  },
44
45
  "devDependencies": {
45
46
  "typescript": "~5.5.4",
@@ -33,6 +33,8 @@ import { createHash } from 'crypto';
33
33
  import { assertNever } from '@milaboratories/ts-helpers';
34
34
  import canonicalize from 'canonicalize';
35
35
  import { PFrame } from '@milaboratories/pframes-node';
36
+ import * as fsp from 'node:fs/promises';
37
+ import { LRUCache } from 'lru-cache';
36
38
 
37
39
  function blobKey(res: ResourceInfo): string {
38
40
  return String(res.id);
@@ -50,6 +52,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
50
52
 
51
53
  constructor(
52
54
  private readonly blobDriver: DownloadDriver,
55
+ private readonly blobContentCache: LRUCache<string, Uint8Array>,
53
56
  private readonly columns: InternalPFrameData
54
57
  ) {
55
58
  // pframe initialization
@@ -93,6 +96,12 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
93
96
  return this.blobDriver.getLocalPath((await computable.awaitStableValue()).handle);
94
97
  };
95
98
 
99
+ public readonly resolveBlobContent = async (blobId: string): Promise<Uint8Array> => {
100
+ const computable = this.getOrCreateComputableForBlob(blobId);
101
+ const path = this.blobDriver.getLocalPath((await computable.awaitStableValue()).handle);
102
+ return await this.blobContentCache.forceFetch(path);
103
+ };
104
+
96
105
  [Symbol.dispose](): void {
97
106
  for (const computable of this.blobHandleComputables.values()) computable.resetState();
98
107
  this.pFrame.dispose();
@@ -107,14 +116,21 @@ type FullPTableDef = {
107
116
  export class PFrameDriver implements SdkPFrameDriver {
108
117
  private readonly pFrames: RefCountResourcePool<InternalPFrameData, PFrameHolder>;
109
118
  private readonly pTables: RefCountResourcePool<FullPTableDef, Promise<PFrameInternal.PTable>>;
119
+ private readonly blobContentCache: LRUCache<string, Uint8Array>;
110
120
 
111
121
  constructor(private readonly blobDriver: DownloadDriver) {
122
+ const blobContentCache = new LRUCache<string, Uint8Array>({
123
+ maxSize: 1_000_000_000, // 1Gb
124
+ fetchMethod: async (key) => await fsp.readFile(key),
125
+ sizeCalculation: (v) => v.length
126
+ });
127
+ this.blobContentCache = blobContentCache;
112
128
  this.pFrames = new (class extends RefCountResourcePool<InternalPFrameData, PFrameHolder> {
113
129
  constructor(private readonly blobDriver: DownloadDriver) {
114
130
  super();
115
131
  }
116
132
  protected createNewResource(params: InternalPFrameData): PFrameHolder {
117
- return new PFrameHolder(this.blobDriver, params);
133
+ return new PFrameHolder(this.blobDriver, blobContentCache, params);
118
134
  }
119
135
  protected calculateParamsKey(params: InternalPFrameData): string {
120
136
  return stableKeyFromPFrameData(params);