@milaboratories/pf-driver 1.4.12 → 1.4.13
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.
- package/dist/driver_impl.cjs +50 -54
- package/dist/driver_impl.cjs.map +1 -1
- package/dist/driver_impl.d.ts.map +1 -1
- package/dist/driver_impl.js +50 -54
- package/dist/driver_impl.js.map +1 -1
- package/dist/pframe_pool.cjs +78 -56
- package/dist/pframe_pool.cjs.map +1 -1
- package/dist/pframe_pool.d.ts.map +1 -1
- package/dist/pframe_pool.js +79 -57
- package/dist/pframe_pool.js.map +1 -1
- package/dist/ptable_def_pool.cjs +15 -0
- package/dist/ptable_def_pool.cjs.map +1 -1
- package/dist/ptable_def_pool.d.ts +2 -2
- package/dist/ptable_def_pool.js +16 -1
- package/dist/ptable_def_pool.js.map +1 -1
- package/dist/ptable_pool.cjs +18 -96
- package/dist/ptable_pool.cjs.map +1 -1
- package/dist/ptable_pool.d.ts +1 -1
- package/dist/ptable_pool.js +20 -98
- package/dist/ptable_pool.js.map +1 -1
- package/dist/ptable_shared.cjs +26 -0
- package/dist/ptable_shared.cjs.map +1 -1
- package/dist/ptable_shared.d.ts +2 -1
- package/dist/ptable_shared.js +26 -1
- package/dist/ptable_shared.js.map +1 -1
- package/package.json +5 -5
- package/src/driver_impl.ts +44 -58
- package/src/pframe_pool.ts +115 -76
- package/src/ptable_def_pool.ts +26 -3
- package/src/ptable_pool.ts +19 -140
- package/src/ptable_shared.ts +47 -18
package/dist/ptable_def_pool.cjs
CHANGED
|
@@ -40,6 +40,21 @@ var PTableDefPool = class extends _milaboratories_helpers.RefCountPoolBase {
|
|
|
40
40
|
}
|
|
41
41
|
return resource;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Acquire a def from a legacy `PTableDef` + column specs map.
|
|
45
|
+
* Lowers the input via WASM-spec and stores the resulting
|
|
46
|
+
* `{ tableSpec, dataQuery }` shape. Returns the lowered def
|
|
47
|
+
* alongside the pool entry — callers that need `tableSpec`
|
|
48
|
+
* (e.g. `calculateTableData`) read it from `def.tableSpec`
|
|
49
|
+
* without re-deriving.
|
|
50
|
+
*/
|
|
51
|
+
acquireFromLegacy(opts) {
|
|
52
|
+
const def = require_ptable_shared.buildFullPTableDefFromLegacy(opts);
|
|
53
|
+
return {
|
|
54
|
+
def,
|
|
55
|
+
entry: this.acquire(def)
|
|
56
|
+
};
|
|
57
|
+
}
|
|
43
58
|
};
|
|
44
59
|
//#endregion
|
|
45
60
|
exports.PTableDefPool = PTableDefPool;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_def_pool.cjs","names":["logPFrames","RefCountPoolBase","stableKeyFromFullPTableDef","PFrameDriverError"],"sources":["../src/ptable_def_pool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ptable_def_pool.cjs","names":["logPFrames","RefCountPoolBase","stableKeyFromFullPTableDef","PFrameDriverError","buildFullPTableDefFromLegacy"],"sources":["../src/ptable_def_pool.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type PFrameHandle,\n type PObjectId,\n type PTableDef,\n type PTableHandle,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { FullPTableDef } from \"./ptable_shared\";\nimport { buildFullPTableDefFromLegacy, stableKeyFromFullPTableDef } from \"./ptable_shared\";\n\nexport class PTableDefHolder implements Disposable {\n private readonly abortController = new AbortController();\n\n constructor(\n public readonly def: FullPTableDef,\n private readonly pTableHandle: PTableHandle,\n private readonly logger: PFrameInternal.Logger,\n ) {\n if (logPFrames()) {\n this.logger(\"info\", `PTable definition saved (pTableHandle = ${this.pTableHandle})`);\n }\n }\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n if (logPFrames()) {\n this.logger(\"info\", `PTable definition disposed (pTableHandle = ${this.pTableHandle})`);\n }\n }\n}\n\nexport class PTableDefPool extends RefCountPoolBase<FullPTableDef, PTableHandle, PTableDefHolder> {\n constructor(private readonly logger: PFrameInternal.Logger) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableDefHolder {\n return new PTableDefHolder(params, key, this.logger);\n }\n\n public getByKey(key: PTableHandle): PTableDefHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable definition for handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n\n /**\n * Acquire a def from a legacy `PTableDef` + column specs map.\n * Lowers the input via WASM-spec and stores the resulting\n * `{ tableSpec, dataQuery }` shape. Returns the lowered def\n * alongside the pool entry — callers that need `tableSpec`\n * (e.g. `calculateTableData`) read it from `def.tableSpec`\n * without re-deriving.\n */\n public acquireFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n }): { def: FullPTableDef; entry: PoolEntry<PTableHandle> } {\n const def = buildFullPTableDefFromLegacy(opts);\n return { def, entry: this.acquire(def) };\n }\n}\n"],"mappings":";;;;;;AAaA,IAAa,kBAAb,MAAmD;CACjD,kBAAmC,IAAI,iBAAiB;CAExD,YACE,KACA,cACA,QACA;AAHgB,OAAA,MAAA;AACC,OAAA,eAAA;AACA,OAAA,SAAA;AAEjB,MAAIA,gBAAAA,YAAY,CACd,MAAK,OAAO,QAAQ,2CAA2C,KAAK,aAAa,GAAG;;CAIxF,IAAW,gBAA6B;AACtC,SAAO,KAAK,gBAAgB;;CAG9B,CAAC,OAAO,WAAiB;AACvB,OAAK,gBAAgB,OAAO;AAC5B,MAAIA,gBAAAA,YAAY,CACd,MAAK,OAAO,QAAQ,8CAA8C,KAAK,aAAa,GAAG;;;AAK7F,IAAa,gBAAb,cAAmCC,wBAAAA,iBAA+D;CAChG,YAAY,QAAgD;AAC1D,SAAO;AADoB,OAAA,SAAA;;CAI7B,mBAA6B,QAAqC;AAChE,SAAOC,sBAAAA,2BAA2B,OAAO;;CAG3C,kBAA4B,QAAuB,KAAoC;AACrF,SAAO,IAAI,gBAAgB,QAAQ,KAAK,KAAK,OAAO;;CAGtD,SAAgB,KAAoC;EAClD,MAAM,WAAW,MAAM,YAAY,IAAI;AACvC,MAAI,CAAC,UAAU;GACb,MAAM,QAAQ,IAAIC,gCAAAA,kBAAkB,wBAAwB;AAC5D,SAAM,wBAAQ,IAAI,MAAM,gCAAgC,IAAI,YAAY;AACxE,SAAM;;AAER,SAAO;;;;;;;;;;CAWT,kBAAyB,MAIkC;EACzD,MAAM,MAAMC,sBAAAA,6BAA6B,KAAK;AAC9C,SAAO;GAAE;GAAK,OAAO,KAAK,QAAQ,IAAI;GAAE"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { PTableHandle } from "@milaboratories/pl-model-common";
|
|
2
|
-
import { RefCountPoolBase } from "@milaboratories/helpers";
|
|
1
|
+
import { PFrameHandle, PObjectId, PTableDef, PTableHandle } from "@milaboratories/pl-model-common";
|
|
2
|
+
import { PoolEntry, RefCountPoolBase } from "@milaboratories/helpers";
|
|
3
3
|
import { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
|
package/dist/ptable_def_pool.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { logPFrames } from "./logging.js";
|
|
2
|
-
import { stableKeyFromFullPTableDef } from "./ptable_shared.js";
|
|
2
|
+
import { buildFullPTableDefFromLegacy, stableKeyFromFullPTableDef } from "./ptable_shared.js";
|
|
3
3
|
import { PFrameDriverError } from "@milaboratories/pl-model-common";
|
|
4
4
|
import { RefCountPoolBase } from "@milaboratories/helpers";
|
|
5
5
|
//#region src/ptable_def_pool.ts
|
|
@@ -39,6 +39,21 @@ var PTableDefPool = class extends RefCountPoolBase {
|
|
|
39
39
|
}
|
|
40
40
|
return resource;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Acquire a def from a legacy `PTableDef` + column specs map.
|
|
44
|
+
* Lowers the input via WASM-spec and stores the resulting
|
|
45
|
+
* `{ tableSpec, dataQuery }` shape. Returns the lowered def
|
|
46
|
+
* alongside the pool entry — callers that need `tableSpec`
|
|
47
|
+
* (e.g. `calculateTableData`) read it from `def.tableSpec`
|
|
48
|
+
* without re-deriving.
|
|
49
|
+
*/
|
|
50
|
+
acquireFromLegacy(opts) {
|
|
51
|
+
const def = buildFullPTableDefFromLegacy(opts);
|
|
52
|
+
return {
|
|
53
|
+
def,
|
|
54
|
+
entry: this.acquire(def)
|
|
55
|
+
};
|
|
56
|
+
}
|
|
42
57
|
};
|
|
43
58
|
//#endregion
|
|
44
59
|
export { PTableDefPool };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_def_pool.js","names":[],"sources":["../src/ptable_def_pool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ptable_def_pool.js","names":[],"sources":["../src/ptable_def_pool.ts"],"sourcesContent":["import {\n PFrameDriverError,\n type PFrameHandle,\n type PObjectId,\n type PTableDef,\n type PTableHandle,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { FullPTableDef } from \"./ptable_shared\";\nimport { buildFullPTableDefFromLegacy, stableKeyFromFullPTableDef } from \"./ptable_shared\";\n\nexport class PTableDefHolder implements Disposable {\n private readonly abortController = new AbortController();\n\n constructor(\n public readonly def: FullPTableDef,\n private readonly pTableHandle: PTableHandle,\n private readonly logger: PFrameInternal.Logger,\n ) {\n if (logPFrames()) {\n this.logger(\"info\", `PTable definition saved (pTableHandle = ${this.pTableHandle})`);\n }\n }\n\n public get disposeSignal(): AbortSignal {\n return this.abortController.signal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n if (logPFrames()) {\n this.logger(\"info\", `PTable definition disposed (pTableHandle = ${this.pTableHandle})`);\n }\n }\n}\n\nexport class PTableDefPool extends RefCountPoolBase<FullPTableDef, PTableHandle, PTableDefHolder> {\n constructor(private readonly logger: PFrameInternal.Logger) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableDefHolder {\n return new PTableDefHolder(params, key, this.logger);\n }\n\n public getByKey(key: PTableHandle): PTableDefHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable definition for handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n\n /**\n * Acquire a def from a legacy `PTableDef` + column specs map.\n * Lowers the input via WASM-spec and stores the resulting\n * `{ tableSpec, dataQuery }` shape. Returns the lowered def\n * alongside the pool entry — callers that need `tableSpec`\n * (e.g. `calculateTableData`) read it from `def.tableSpec`\n * without re-deriving.\n */\n public acquireFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n }): { def: FullPTableDef; entry: PoolEntry<PTableHandle> } {\n const def = buildFullPTableDefFromLegacy(opts);\n return { def, entry: this.acquire(def) };\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,kBAAb,MAAmD;CACjD,kBAAmC,IAAI,iBAAiB;CAExD,YACE,KACA,cACA,QACA;AAHgB,OAAA,MAAA;AACC,OAAA,eAAA;AACA,OAAA,SAAA;AAEjB,MAAI,YAAY,CACd,MAAK,OAAO,QAAQ,2CAA2C,KAAK,aAAa,GAAG;;CAIxF,IAAW,gBAA6B;AACtC,SAAO,KAAK,gBAAgB;;CAG9B,CAAC,OAAO,WAAiB;AACvB,OAAK,gBAAgB,OAAO;AAC5B,MAAI,YAAY,CACd,MAAK,OAAO,QAAQ,8CAA8C,KAAK,aAAa,GAAG;;;AAK7F,IAAa,gBAAb,cAAmC,iBAA+D;CAChG,YAAY,QAAgD;AAC1D,SAAO;AADoB,OAAA,SAAA;;CAI7B,mBAA6B,QAAqC;AAChE,SAAO,2BAA2B,OAAO;;CAG3C,kBAA4B,QAAuB,KAAoC;AACrF,SAAO,IAAI,gBAAgB,QAAQ,KAAK,KAAK,OAAO;;CAGtD,SAAgB,KAAoC;EAClD,MAAM,WAAW,MAAM,YAAY,IAAI;AACvC,MAAI,CAAC,UAAU;GACb,MAAM,QAAQ,IAAI,kBAAkB,wBAAwB;AAC5D,SAAM,wBAAQ,IAAI,MAAM,gCAAgC,IAAI,YAAY;AACxE,SAAM;;AAER,SAAO;;;;;;;;;;CAWT,kBAAyB,MAIkC;EACzD,MAAM,MAAM,6BAA6B,KAAK;AAC9C,SAAO;GAAE;GAAK,OAAO,KAAK,QAAQ,IAAI;GAAE"}
|
package/dist/ptable_pool.cjs
CHANGED
|
@@ -34,50 +34,16 @@ var PTablePool = class extends _milaboratories_helpers.RefCountPoolBase {
|
|
|
34
34
|
}
|
|
35
35
|
createNewResource(params, key) {
|
|
36
36
|
if (require_logging.logPFrames()) this.logger("info", `PTable creation (pTableHandle = ${key}): ${JSON.stringify(params, _milaboratories_pl_model_common.bigintReplacer)}`);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
case "v2": return this.createNewResourceV2(params, key);
|
|
40
|
-
default: throw new _milaboratories_pl_model_common.PFrameDriverError(`Unsupported FullPTableDef type: ${params.type}`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
createNewResourceV1(params, key) {
|
|
44
|
-
const { def, pFrameHandle } = params;
|
|
45
|
-
const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
37
|
+
const { pFrameHandle } = params;
|
|
38
|
+
const { pFrameDataPromise: pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
46
39
|
const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;
|
|
47
40
|
const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
...def,
|
|
53
|
-
sorting: []
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
const { resource: { pTablePromise } } = predecessor;
|
|
57
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pTablePromise.then((pTable) => pTable.sort(key, def.sorting)), predecessor);
|
|
58
|
-
}
|
|
59
|
-
if (!hasArtificialColumns(def.src) && def.filters.length > 0) {
|
|
60
|
-
const predecessor = this.acquire({
|
|
61
|
-
...params,
|
|
62
|
-
def: {
|
|
63
|
-
...def,
|
|
64
|
-
filters: []
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
const { resource: { pTablePromise } } = predecessor;
|
|
68
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pTablePromise.then((pTable) => pTable.filter(key, def.filters)), predecessor);
|
|
69
|
-
}
|
|
70
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pFramePromise.then((pFrame) => pFrame.createTable(key, {
|
|
71
|
-
src: joinEntryToInternal(def.src),
|
|
72
|
-
filters: [...def.partitionFilters, ...def.filters]
|
|
41
|
+
const { tableSpec, dataQuery } = params;
|
|
42
|
+
return new PTableHolder(pFrameHandle, combinedSignal, pFramePromise.then((pFrame) => pFrame.createTableV2(key, {
|
|
43
|
+
tableSpec,
|
|
44
|
+
dataQuery
|
|
73
45
|
})));
|
|
74
46
|
}
|
|
75
|
-
createNewResourceV2(params, key) {
|
|
76
|
-
const { pFrameHandle } = params;
|
|
77
|
-
const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
78
|
-
const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;
|
|
79
|
-
return new PTableHolder(pFrameHandle, AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s)), pFramePromise.then((pFrame) => pFrame.createTableV2(key, params.def)));
|
|
80
|
-
}
|
|
81
47
|
getByKey(key) {
|
|
82
48
|
const resource = super.tryGetByKey(key);
|
|
83
49
|
if (!resource) {
|
|
@@ -87,64 +53,20 @@ var PTablePool = class extends _milaboratories_helpers.RefCountPoolBase {
|
|
|
87
53
|
}
|
|
88
54
|
return resource;
|
|
89
55
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function joinEntryToInternal(entry) {
|
|
104
|
-
const type = entry.type;
|
|
105
|
-
switch (type) {
|
|
106
|
-
case "column": return {
|
|
107
|
-
type: "column",
|
|
108
|
-
columnId: entry.column
|
|
109
|
-
};
|
|
110
|
-
case "slicedColumn": return {
|
|
111
|
-
type: "slicedColumn",
|
|
112
|
-
columnId: entry.column,
|
|
113
|
-
newId: entry.newId,
|
|
114
|
-
axisFilters: entry.axisFilters
|
|
115
|
-
};
|
|
116
|
-
case "artificialColumn": return {
|
|
117
|
-
type: "artificialColumn",
|
|
118
|
-
columnId: entry.column,
|
|
119
|
-
newId: entry.newId,
|
|
120
|
-
axesIndices: entry.axesIndices
|
|
56
|
+
/**
|
|
57
|
+
* Acquire a PTable from a legacy `PTableDef` + column specs map.
|
|
58
|
+
* Lowers the input via WASM-spec and stores the resulting
|
|
59
|
+
* `{ tableSpec, dataQuery }` shape. Returns the lowered def
|
|
60
|
+
* alongside the pool entry.
|
|
61
|
+
*/
|
|
62
|
+
acquireFromLegacy(opts) {
|
|
63
|
+
const def = require_ptable_shared.buildFullPTableDefFromLegacy(opts);
|
|
64
|
+
return {
|
|
65
|
+
def,
|
|
66
|
+
entry: this.acquire(def)
|
|
121
67
|
};
|
|
122
|
-
case "inlineColumn": return {
|
|
123
|
-
type: "inlineColumn",
|
|
124
|
-
newId: entry.column.id,
|
|
125
|
-
spec: entry.column.spec,
|
|
126
|
-
dataInfo: {
|
|
127
|
-
type: "Json",
|
|
128
|
-
keyLength: entry.column.spec.axesSpec.length,
|
|
129
|
-
data: entry.column.data.reduce((acc, row) => {
|
|
130
|
-
acc[JSON.stringify(row.key)] = row.val;
|
|
131
|
-
return acc;
|
|
132
|
-
}, {})
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
case "inner":
|
|
136
|
-
case "full": return {
|
|
137
|
-
type: entry.type,
|
|
138
|
-
entries: entry.entries.map((col) => joinEntryToInternal(col))
|
|
139
|
-
};
|
|
140
|
-
case "outer": return {
|
|
141
|
-
type: "outer",
|
|
142
|
-
primary: joinEntryToInternal(entry.primary),
|
|
143
|
-
secondary: entry.secondary.map((col) => joinEntryToInternal(col))
|
|
144
|
-
};
|
|
145
|
-
default: throw new _milaboratories_pl_model_common.PFrameDriverError(`unsupported PFrame join entry type: ${type}`);
|
|
146
68
|
}
|
|
147
|
-
}
|
|
69
|
+
};
|
|
148
70
|
//#endregion
|
|
149
71
|
exports.PTablePool = PTablePool;
|
|
150
72
|
|
package/dist/ptable_pool.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_pool.cjs","names":["RefCountPoolBase","stableKeyFromFullPTableDef","logPFrames","bigintReplacer","PFrameDriverError"],"sources":["../src/ptable_pool.ts"],"sourcesContent":["import {\n assertNever,\n bigintReplacer,\n PFrameDriverError,\n type PFrameHandle,\n type PTableHandle,\n type JoinEntry,\n type JsonSerializable,\n type PColumnValue,\n type PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { PFramePool } from \"./pframe_pool\";\nimport {\n FullPTableDefV1,\n FullPTableDefV2,\n stableKeyFromFullPTableDef,\n type FullPTableDef,\n} from \"./ptable_shared\";\nimport type { PTableDefPool } from \"./ptable_def_pool\";\n\nexport class PTableHolder implements Disposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV8>,\n private readonly predecessor?: PoolEntry<PTableHandle, PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([\n pFrameDisposeSignal,\n this.abortController.signal,\n ]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n this.predecessor?.unref();\n void this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => {\n /* mute error */\n });\n }\n}\n\nexport class PTablePool<TreeEntry extends JsonSerializable> extends RefCountPoolBase<\n FullPTableDef,\n PTableHandle,\n PTableHolder\n> {\n constructor(\n private readonly pFrames: PFramePool<TreeEntry>,\n private readonly pTableDefs: PTableDefPool,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableHolder {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `PTable creation (pTableHandle = ${key}): ` + `${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n switch (params.type) {\n case \"v1\":\n return this.createNewResourceV1(params, key);\n case \"v2\":\n return this.createNewResourceV2(params, key);\n default:\n // @ts-expect-error `params.type` is a string, but we want to make sure all cases are handled\n throw new PFrameDriverError(`Unsupported FullPTableDef type: ${params.type}`);\n }\n }\n\n protected createNewResourceV1(params: FullPTableDefV1, key: PTableHandle): PTableHolder {\n const { def, pFrameHandle } = params;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n // 3. Sort\n if (def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...def,\n sorting: [],\n },\n });\n const {\n resource: { pTablePromise },\n } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(key, def.sorting));\n return new PTableHolder(pFrameHandle, combinedSignal, sortedTable, predecessor);\n }\n\n // 2. Filter (except the case with artificial columns where cartesian creates too many rows)\n if (!hasArtificialColumns(def.src) && def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...def,\n filters: [],\n },\n });\n const {\n resource: { pTablePromise },\n } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(key, def.filters));\n return new PTableHolder(pFrameHandle, combinedSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) =>\n pFrame.createTable(key, {\n src: joinEntryToInternal(def.src),\n // `def.filters` would be non-empty only when join has artificial columns\n filters: [...def.partitionFilters, ...def.filters],\n }),\n );\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n protected createNewResourceV2(params: FullPTableDefV2, key: PTableHandle): PTableHolder {\n const { pFrameHandle } = params;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n const table = pFramePromise.then((pFrame) => pFrame.createTableV2(key, params.def));\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable with handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n}\n\nfunction hasArtificialColumns<T>(entry: JoinEntry<T>): boolean {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return false;\n case \"artificialColumn\":\n return true;\n case \"full\":\n case \"inner\":\n return entry.entries.some(hasArtificialColumns);\n case \"outer\":\n return hasArtificialColumns(entry.primary) || entry.secondary.some(hasArtificialColumns);\n default:\n assertNever(entry);\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV4 {\n const type = entry.type;\n switch (type) {\n case \"column\":\n return {\n type: \"column\",\n columnId: entry.column,\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n columnId: entry.column,\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return {\n type: \"inlineColumn\",\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: \"Json\",\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce(\n (acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n },\n {} as Record<string, PColumnValue>,\n ),\n },\n };\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n throw new PFrameDriverError(`unsupported PFrame join entry type: ${type satisfies never}`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ptable_pool.cjs","names":["RefCountPoolBase","stableKeyFromFullPTableDef","logPFrames","bigintReplacer","PFrameDriverError","buildFullPTableDefFromLegacy"],"sources":["../src/ptable_pool.ts"],"sourcesContent":["import {\n bigintReplacer,\n PFrameDriverError,\n type PFrameHandle,\n type PTableDef,\n type PTableHandle,\n type JsonSerializable,\n type PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { PFramePool } from \"./pframe_pool\";\nimport {\n buildFullPTableDefFromLegacy,\n stableKeyFromFullPTableDef,\n type FullPTableDef,\n} from \"./ptable_shared\";\nimport type { PTableDefPool } from \"./ptable_def_pool\";\n\nexport class PTableHolder implements Disposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV8>,\n private readonly predecessor?: PoolEntry<PTableHandle, PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([\n pFrameDisposeSignal,\n this.abortController.signal,\n ]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n this.predecessor?.unref();\n void this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => {\n /* mute error */\n });\n }\n}\n\nexport class PTablePool<TreeEntry extends JsonSerializable> extends RefCountPoolBase<\n FullPTableDef,\n PTableHandle,\n PTableHolder\n> {\n constructor(\n private readonly pFrames: PFramePool<TreeEntry>,\n private readonly pTableDefs: PTableDefPool,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableHolder {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `PTable creation (pTableHandle = ${key}): ` + `${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const { pFrameHandle } = params;\n const { pFrameDataPromise: pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n const { tableSpec, dataQuery } = params;\n const table = pFramePromise.then((pFrame) =>\n pFrame.createTableV2(key, { tableSpec, dataQuery }),\n );\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable with handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n\n /**\n * Acquire a PTable from a legacy `PTableDef` + column specs map.\n * Lowers the input via WASM-spec and stores the resulting\n * `{ tableSpec, dataQuery }` shape. Returns the lowered def\n * alongside the pool entry.\n */\n public acquireFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n }): { def: FullPTableDef; entry: PoolEntry<PTableHandle, PTableHolder> } {\n const def = buildFullPTableDefFromLegacy(opts);\n return { def, entry: this.acquire(def) };\n }\n}\n"],"mappings":";;;;;;AAoBA,IAAa,eAAb,MAAgD;CAC9C,kBAAmC,IAAI,iBAAiB;CACxD;CAEA,YACE,QACA,qBACA,eACA,aACA;AAJgB,OAAA,SAAA;AAEA,OAAA,gBAAA;AACC,OAAA,cAAA;AAEjB,OAAK,wBAAwB,YAAY,IAAI,CAC3C,qBACA,KAAK,gBAAgB,OACtB,CAAC;;CAGJ,IAAW,gBAA6B;AACtC,SAAO,KAAK;;CAGd,CAAC,OAAO,WAAiB;AACvB,OAAK,gBAAgB,OAAO;AAC5B,OAAK,aAAa,OAAO;AACpB,OAAK,cACP,MAAM,WAAW,OAAO,SAAS,CAAC,CAClC,YAAY,GAEX;;;AAIR,IAAa,aAAb,cAAoEA,wBAAAA,iBAIlE;CACA,YACE,SACA,YACA,QACA;AACA,SAAO;AAJU,OAAA,UAAA;AACA,OAAA,aAAA;AACA,OAAA,SAAA;;CAKnB,mBAA6B,QAAqC;AAChE,SAAOC,sBAAAA,2BAA2B,OAAO;;CAG3C,kBAA4B,QAAuB,KAAiC;AAClF,MAAIC,gBAAAA,YAAY,CACd,MAAK,OACH,QACA,mCAAmC,IAAI,KAAU,KAAK,UAAU,QAAQC,gCAAAA,eAAe,GACxF;EAGH,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,mBAAmB,eAAe,kBAAkB,KAAK,QAAQ,SAAS,aAAa;EAE/F,MAAM,mBAAmB,KAAK,WAAW,YAAY,IAAI,EAAE;EAC3D,MAAM,iBAAiB,YAAY,IAAI,CAAC,eAAe,iBAAiB,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC;EAE5F,MAAM,EAAE,WAAW,cAAc;AAIjC,SAAO,IAAI,aAAa,cAAc,gBAHxB,cAAc,MAAM,WAChC,OAAO,cAAc,KAAK;GAAE;GAAW;GAAW,CAAC,CACpD,CAC2D;;CAG9D,SAAgB,KAAiC;EAC/C,MAAM,WAAW,MAAM,YAAY,IAAI;AACvC,MAAI,CAAC,UAAU;GACb,MAAM,QAAQ,IAAIC,gCAAAA,kBAAkB,wBAAwB;AAC5D,SAAM,wBAAQ,IAAI,MAAM,sBAAsB,IAAI,YAAY;AAC9D,SAAM;;AAER,SAAO;;;;;;;;CAST,kBAAyB,MAIgD;EACvE,MAAM,MAAMC,sBAAAA,6BAA6B,KAAK;AAC9C,SAAO;GAAE;GAAK,OAAO,KAAK,QAAQ,IAAI;GAAE"}
|
package/dist/ptable_pool.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { JsonSerializable, PFrameHandle, PTableHandle } from "@milaboratories/pl-model-common";
|
|
1
|
+
import { JsonSerializable, PFrameHandle, PObjectId, PTableDef, PTableHandle } from "@milaboratories/pl-model-common";
|
|
2
2
|
import { PoolEntry, RefCountPoolBase } from "@milaboratories/helpers";
|
|
3
3
|
import { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
|
package/dist/ptable_pool.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { logPFrames } from "./logging.js";
|
|
2
|
-
import { stableKeyFromFullPTableDef } from "./ptable_shared.js";
|
|
3
|
-
import { PFrameDriverError,
|
|
2
|
+
import { buildFullPTableDefFromLegacy, stableKeyFromFullPTableDef } from "./ptable_shared.js";
|
|
3
|
+
import { PFrameDriverError, bigintReplacer } from "@milaboratories/pl-model-common";
|
|
4
4
|
import { RefCountPoolBase } from "@milaboratories/helpers";
|
|
5
5
|
//#region src/ptable_pool.ts
|
|
6
6
|
var PTableHolder = class {
|
|
@@ -33,50 +33,16 @@ var PTablePool = class extends RefCountPoolBase {
|
|
|
33
33
|
}
|
|
34
34
|
createNewResource(params, key) {
|
|
35
35
|
if (logPFrames()) this.logger("info", `PTable creation (pTableHandle = ${key}): ${JSON.stringify(params, bigintReplacer)}`);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
case "v2": return this.createNewResourceV2(params, key);
|
|
39
|
-
default: throw new PFrameDriverError(`Unsupported FullPTableDef type: ${params.type}`);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
createNewResourceV1(params, key) {
|
|
43
|
-
const { def, pFrameHandle } = params;
|
|
44
|
-
const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
36
|
+
const { pFrameHandle } = params;
|
|
37
|
+
const { pFrameDataPromise: pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
45
38
|
const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;
|
|
46
39
|
const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
...def,
|
|
52
|
-
sorting: []
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
const { resource: { pTablePromise } } = predecessor;
|
|
56
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pTablePromise.then((pTable) => pTable.sort(key, def.sorting)), predecessor);
|
|
57
|
-
}
|
|
58
|
-
if (!hasArtificialColumns(def.src) && def.filters.length > 0) {
|
|
59
|
-
const predecessor = this.acquire({
|
|
60
|
-
...params,
|
|
61
|
-
def: {
|
|
62
|
-
...def,
|
|
63
|
-
filters: []
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
const { resource: { pTablePromise } } = predecessor;
|
|
67
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pTablePromise.then((pTable) => pTable.filter(key, def.filters)), predecessor);
|
|
68
|
-
}
|
|
69
|
-
return new PTableHolder(pFrameHandle, combinedSignal, pFramePromise.then((pFrame) => pFrame.createTable(key, {
|
|
70
|
-
src: joinEntryToInternal(def.src),
|
|
71
|
-
filters: [...def.partitionFilters, ...def.filters]
|
|
40
|
+
const { tableSpec, dataQuery } = params;
|
|
41
|
+
return new PTableHolder(pFrameHandle, combinedSignal, pFramePromise.then((pFrame) => pFrame.createTableV2(key, {
|
|
42
|
+
tableSpec,
|
|
43
|
+
dataQuery
|
|
72
44
|
})));
|
|
73
45
|
}
|
|
74
|
-
createNewResourceV2(params, key) {
|
|
75
|
-
const { pFrameHandle } = params;
|
|
76
|
-
const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);
|
|
77
|
-
const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;
|
|
78
|
-
return new PTableHolder(pFrameHandle, AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s)), pFramePromise.then((pFrame) => pFrame.createTableV2(key, params.def)));
|
|
79
|
-
}
|
|
80
46
|
getByKey(key) {
|
|
81
47
|
const resource = super.tryGetByKey(key);
|
|
82
48
|
if (!resource) {
|
|
@@ -86,64 +52,20 @@ var PTablePool = class extends RefCountPoolBase {
|
|
|
86
52
|
}
|
|
87
53
|
return resource;
|
|
88
54
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function joinEntryToInternal(entry) {
|
|
103
|
-
const type = entry.type;
|
|
104
|
-
switch (type) {
|
|
105
|
-
case "column": return {
|
|
106
|
-
type: "column",
|
|
107
|
-
columnId: entry.column
|
|
108
|
-
};
|
|
109
|
-
case "slicedColumn": return {
|
|
110
|
-
type: "slicedColumn",
|
|
111
|
-
columnId: entry.column,
|
|
112
|
-
newId: entry.newId,
|
|
113
|
-
axisFilters: entry.axisFilters
|
|
114
|
-
};
|
|
115
|
-
case "artificialColumn": return {
|
|
116
|
-
type: "artificialColumn",
|
|
117
|
-
columnId: entry.column,
|
|
118
|
-
newId: entry.newId,
|
|
119
|
-
axesIndices: entry.axesIndices
|
|
55
|
+
/**
|
|
56
|
+
* Acquire a PTable from a legacy `PTableDef` + column specs map.
|
|
57
|
+
* Lowers the input via WASM-spec and stores the resulting
|
|
58
|
+
* `{ tableSpec, dataQuery }` shape. Returns the lowered def
|
|
59
|
+
* alongside the pool entry.
|
|
60
|
+
*/
|
|
61
|
+
acquireFromLegacy(opts) {
|
|
62
|
+
const def = buildFullPTableDefFromLegacy(opts);
|
|
63
|
+
return {
|
|
64
|
+
def,
|
|
65
|
+
entry: this.acquire(def)
|
|
120
66
|
};
|
|
121
|
-
case "inlineColumn": return {
|
|
122
|
-
type: "inlineColumn",
|
|
123
|
-
newId: entry.column.id,
|
|
124
|
-
spec: entry.column.spec,
|
|
125
|
-
dataInfo: {
|
|
126
|
-
type: "Json",
|
|
127
|
-
keyLength: entry.column.spec.axesSpec.length,
|
|
128
|
-
data: entry.column.data.reduce((acc, row) => {
|
|
129
|
-
acc[JSON.stringify(row.key)] = row.val;
|
|
130
|
-
return acc;
|
|
131
|
-
}, {})
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
case "inner":
|
|
135
|
-
case "full": return {
|
|
136
|
-
type: entry.type,
|
|
137
|
-
entries: entry.entries.map((col) => joinEntryToInternal(col))
|
|
138
|
-
};
|
|
139
|
-
case "outer": return {
|
|
140
|
-
type: "outer",
|
|
141
|
-
primary: joinEntryToInternal(entry.primary),
|
|
142
|
-
secondary: entry.secondary.map((col) => joinEntryToInternal(col))
|
|
143
|
-
};
|
|
144
|
-
default: throw new PFrameDriverError(`unsupported PFrame join entry type: ${type}`);
|
|
145
67
|
}
|
|
146
|
-
}
|
|
68
|
+
};
|
|
147
69
|
//#endregion
|
|
148
70
|
export { PTablePool };
|
|
149
71
|
|
package/dist/ptable_pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_pool.js","names":[],"sources":["../src/ptable_pool.ts"],"sourcesContent":["import {\n assertNever,\n bigintReplacer,\n PFrameDriverError,\n type PFrameHandle,\n type PTableHandle,\n type JoinEntry,\n type JsonSerializable,\n type PColumnValue,\n type PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { PFramePool } from \"./pframe_pool\";\nimport {\n FullPTableDefV1,\n FullPTableDefV2,\n stableKeyFromFullPTableDef,\n type FullPTableDef,\n} from \"./ptable_shared\";\nimport type { PTableDefPool } from \"./ptable_def_pool\";\n\nexport class PTableHolder implements Disposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV8>,\n private readonly predecessor?: PoolEntry<PTableHandle, PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([\n pFrameDisposeSignal,\n this.abortController.signal,\n ]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n this.predecessor?.unref();\n void this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => {\n /* mute error */\n });\n }\n}\n\nexport class PTablePool<TreeEntry extends JsonSerializable> extends RefCountPoolBase<\n FullPTableDef,\n PTableHandle,\n PTableHolder\n> {\n constructor(\n private readonly pFrames: PFramePool<TreeEntry>,\n private readonly pTableDefs: PTableDefPool,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableHolder {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `PTable creation (pTableHandle = ${key}): ` + `${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n switch (params.type) {\n case \"v1\":\n return this.createNewResourceV1(params, key);\n case \"v2\":\n return this.createNewResourceV2(params, key);\n default:\n // @ts-expect-error `params.type` is a string, but we want to make sure all cases are handled\n throw new PFrameDriverError(`Unsupported FullPTableDef type: ${params.type}`);\n }\n }\n\n protected createNewResourceV1(params: FullPTableDefV1, key: PTableHandle): PTableHolder {\n const { def, pFrameHandle } = params;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n // 3. Sort\n if (def.sorting.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...def,\n sorting: [],\n },\n });\n const {\n resource: { pTablePromise },\n } = predecessor;\n const sortedTable = pTablePromise.then((pTable) => pTable.sort(key, def.sorting));\n return new PTableHolder(pFrameHandle, combinedSignal, sortedTable, predecessor);\n }\n\n // 2. Filter (except the case with artificial columns where cartesian creates too many rows)\n if (!hasArtificialColumns(def.src) && def.filters.length > 0) {\n const predecessor = this.acquire({\n ...params,\n def: {\n ...def,\n filters: [],\n },\n });\n const {\n resource: { pTablePromise },\n } = predecessor;\n const filteredTable = pTablePromise.then((pTable) => pTable.filter(key, def.filters));\n return new PTableHolder(pFrameHandle, combinedSignal, filteredTable, predecessor);\n }\n\n // 1. Join\n const table = pFramePromise.then((pFrame) =>\n pFrame.createTable(key, {\n src: joinEntryToInternal(def.src),\n // `def.filters` would be non-empty only when join has artificial columns\n filters: [...def.partitionFilters, ...def.filters],\n }),\n );\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n protected createNewResourceV2(params: FullPTableDefV2, key: PTableHandle): PTableHolder {\n const { pFrameHandle } = params;\n const { pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n const table = pFramePromise.then((pFrame) => pFrame.createTableV2(key, params.def));\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable with handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n}\n\nfunction hasArtificialColumns<T>(entry: JoinEntry<T>): boolean {\n switch (entry.type) {\n case \"column\":\n case \"slicedColumn\":\n case \"inlineColumn\":\n return false;\n case \"artificialColumn\":\n return true;\n case \"full\":\n case \"inner\":\n return entry.entries.some(hasArtificialColumns);\n case \"outer\":\n return hasArtificialColumns(entry.primary) || entry.secondary.some(hasArtificialColumns);\n default:\n assertNever(entry);\n }\n}\n\nfunction joinEntryToInternal(entry: JoinEntry<PObjectId>): PFrameInternal.JoinEntryV4 {\n const type = entry.type;\n switch (type) {\n case \"column\":\n return {\n type: \"column\",\n columnId: entry.column,\n };\n case \"slicedColumn\":\n return {\n type: \"slicedColumn\",\n columnId: entry.column,\n newId: entry.newId,\n axisFilters: entry.axisFilters,\n };\n case \"artificialColumn\":\n return {\n type: \"artificialColumn\",\n columnId: entry.column,\n newId: entry.newId,\n axesIndices: entry.axesIndices,\n };\n case \"inlineColumn\":\n return {\n type: \"inlineColumn\",\n newId: entry.column.id,\n spec: entry.column.spec,\n dataInfo: {\n type: \"Json\",\n keyLength: entry.column.spec.axesSpec.length,\n data: entry.column.data.reduce(\n (acc, row) => {\n acc[JSON.stringify(row.key)] = row.val;\n return acc;\n },\n {} as Record<string, PColumnValue>,\n ),\n },\n };\n case \"inner\":\n case \"full\":\n return {\n type: entry.type,\n entries: entry.entries.map((col) => joinEntryToInternal(col)),\n };\n case \"outer\":\n return {\n type: \"outer\",\n primary: joinEntryToInternal(entry.primary),\n secondary: entry.secondary.map((col) => joinEntryToInternal(col)),\n };\n default:\n throw new PFrameDriverError(`unsupported PFrame join entry type: ${type satisfies never}`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ptable_pool.js","names":[],"sources":["../src/ptable_pool.ts"],"sourcesContent":["import {\n bigintReplacer,\n PFrameDriverError,\n type PFrameHandle,\n type PTableDef,\n type PTableHandle,\n type JsonSerializable,\n type PObjectId,\n} from \"@milaboratories/pl-model-common\";\nimport type { PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\nimport { RefCountPoolBase, type PoolEntry } from \"@milaboratories/helpers\";\nimport { logPFrames } from \"./logging\";\nimport type { PFramePool } from \"./pframe_pool\";\nimport {\n buildFullPTableDefFromLegacy,\n stableKeyFromFullPTableDef,\n type FullPTableDef,\n} from \"./ptable_shared\";\nimport type { PTableDefPool } from \"./ptable_def_pool\";\n\nexport class PTableHolder implements Disposable {\n private readonly abortController = new AbortController();\n private readonly combinedDisposeSignal: AbortSignal;\n\n constructor(\n public readonly pFrame: PFrameHandle,\n pFrameDisposeSignal: AbortSignal,\n public readonly pTablePromise: Promise<PFrameInternal.PTableV8>,\n private readonly predecessor?: PoolEntry<PTableHandle, PTableHolder>,\n ) {\n this.combinedDisposeSignal = AbortSignal.any([\n pFrameDisposeSignal,\n this.abortController.signal,\n ]);\n }\n\n public get disposeSignal(): AbortSignal {\n return this.combinedDisposeSignal;\n }\n\n [Symbol.dispose](): void {\n this.abortController.abort();\n this.predecessor?.unref();\n void this.pTablePromise\n .then((pTable) => pTable.dispose())\n .catch(() => {\n /* mute error */\n });\n }\n}\n\nexport class PTablePool<TreeEntry extends JsonSerializable> extends RefCountPoolBase<\n FullPTableDef,\n PTableHandle,\n PTableHolder\n> {\n constructor(\n private readonly pFrames: PFramePool<TreeEntry>,\n private readonly pTableDefs: PTableDefPool,\n private readonly logger: PFrameInternal.Logger,\n ) {\n super();\n }\n\n protected calculateParamsKey(params: FullPTableDef): PTableHandle {\n return stableKeyFromFullPTableDef(params);\n }\n\n protected createNewResource(params: FullPTableDef, key: PTableHandle): PTableHolder {\n if (logPFrames()) {\n this.logger(\n \"info\",\n `PTable creation (pTableHandle = ${key}): ` + `${JSON.stringify(params, bigintReplacer)}`,\n );\n }\n\n const { pFrameHandle } = params;\n const { pFrameDataPromise: pFramePromise, disposeSignal } = this.pFrames.getByKey(pFrameHandle);\n\n const defDisposeSignal = this.pTableDefs.tryGetByKey(key)?.disposeSignal;\n const combinedSignal = AbortSignal.any([disposeSignal, defDisposeSignal].filter((s) => !!s));\n\n const { tableSpec, dataQuery } = params;\n const table = pFramePromise.then((pFrame) =>\n pFrame.createTableV2(key, { tableSpec, dataQuery }),\n );\n return new PTableHolder(pFrameHandle, combinedSignal, table);\n }\n\n public getByKey(key: PTableHandle): PTableHolder {\n const resource = super.tryGetByKey(key);\n if (!resource) {\n const error = new PFrameDriverError(`Invalid PTable handle`);\n error.cause = new Error(`PTable with handle ${key} not found`);\n throw error;\n }\n return resource;\n }\n\n /**\n * Acquire a PTable from a legacy `PTableDef` + column specs map.\n * Lowers the input via WASM-spec and stores the resulting\n * `{ tableSpec, dataQuery }` shape. Returns the lowered def\n * alongside the pool entry.\n */\n public acquireFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n }): { def: FullPTableDef; entry: PoolEntry<PTableHandle, PTableHolder> } {\n const def = buildFullPTableDefFromLegacy(opts);\n return { def, entry: this.acquire(def) };\n }\n}\n"],"mappings":";;;;;AAoBA,IAAa,eAAb,MAAgD;CAC9C,kBAAmC,IAAI,iBAAiB;CACxD;CAEA,YACE,QACA,qBACA,eACA,aACA;AAJgB,OAAA,SAAA;AAEA,OAAA,gBAAA;AACC,OAAA,cAAA;AAEjB,OAAK,wBAAwB,YAAY,IAAI,CAC3C,qBACA,KAAK,gBAAgB,OACtB,CAAC;;CAGJ,IAAW,gBAA6B;AACtC,SAAO,KAAK;;CAGd,CAAC,OAAO,WAAiB;AACvB,OAAK,gBAAgB,OAAO;AAC5B,OAAK,aAAa,OAAO;AACpB,OAAK,cACP,MAAM,WAAW,OAAO,SAAS,CAAC,CAClC,YAAY,GAEX;;;AAIR,IAAa,aAAb,cAAoE,iBAIlE;CACA,YACE,SACA,YACA,QACA;AACA,SAAO;AAJU,OAAA,UAAA;AACA,OAAA,aAAA;AACA,OAAA,SAAA;;CAKnB,mBAA6B,QAAqC;AAChE,SAAO,2BAA2B,OAAO;;CAG3C,kBAA4B,QAAuB,KAAiC;AAClF,MAAI,YAAY,CACd,MAAK,OACH,QACA,mCAAmC,IAAI,KAAU,KAAK,UAAU,QAAQ,eAAe,GACxF;EAGH,MAAM,EAAE,iBAAiB;EACzB,MAAM,EAAE,mBAAmB,eAAe,kBAAkB,KAAK,QAAQ,SAAS,aAAa;EAE/F,MAAM,mBAAmB,KAAK,WAAW,YAAY,IAAI,EAAE;EAC3D,MAAM,iBAAiB,YAAY,IAAI,CAAC,eAAe,iBAAiB,CAAC,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC;EAE5F,MAAM,EAAE,WAAW,cAAc;AAIjC,SAAO,IAAI,aAAa,cAAc,gBAHxB,cAAc,MAAM,WAChC,OAAO,cAAc,KAAK;GAAE;GAAW;GAAW,CAAC,CACpD,CAC2D;;CAG9D,SAAgB,KAAiC;EAC/C,MAAM,WAAW,MAAM,YAAY,IAAI;AACvC,MAAI,CAAC,UAAU;GACb,MAAM,QAAQ,IAAI,kBAAkB,wBAAwB;AAC5D,SAAM,wBAAQ,IAAI,MAAM,sBAAsB,IAAI,YAAY;AAC9D,SAAM;;AAER,SAAO;;;;;;;;CAST,kBAAyB,MAIgD;EACvE,MAAM,MAAM,6BAA6B,KAAK;AAC9C,SAAO;GAAE;GAAK,OAAO,KAAK,QAAQ,IAAI;GAAE"}
|
package/dist/ptable_shared.cjs
CHANGED
|
@@ -4,7 +4,33 @@ let _milaboratories_pl_model_middle_layer = require("@milaboratories/pl-model-mi
|
|
|
4
4
|
function stableKeyFromFullPTableDef(data) {
|
|
5
5
|
return (0, _milaboratories_pl_model_middle_layer.hashJson)(data);
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Lower a legacy `PTableDef<PObjectId>` to the data layer. Returns
|
|
9
|
+
* the output `tableSpec` and the lowered `dataQuery`. Routes through
|
|
10
|
+
* `rewriteLegacyQuery` + `evaluateQuery` on the caller-supplied
|
|
11
|
+
* WASM-spec frame.
|
|
12
|
+
*/
|
|
13
|
+
function lowerLegacyPTableDef(pFrameSpec, legacyDef) {
|
|
14
|
+
const legacy = {
|
|
15
|
+
src: legacyDef.src,
|
|
16
|
+
filters: [...legacyDef.partitionFilters, ...legacyDef.filters],
|
|
17
|
+
sorting: legacyDef.sorting
|
|
18
|
+
};
|
|
19
|
+
return pFrameSpec.evaluateQuery(pFrameSpec.rewriteLegacyQuery(legacy));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a `FullPTableDef` from a legacy `PTableDef` plus the
|
|
23
|
+
* PFrame's WASM-spec frame. Used by pool `acquireFromLegacy` methods
|
|
24
|
+
* to keep lowering off the call site.
|
|
25
|
+
*/
|
|
26
|
+
function buildFullPTableDefFromLegacy(opts) {
|
|
27
|
+
return {
|
|
28
|
+
pFrameHandle: opts.pFrameHandle,
|
|
29
|
+
...lowerLegacyPTableDef(opts.pFrameSpec, opts.def)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
7
32
|
//#endregion
|
|
33
|
+
exports.buildFullPTableDefFromLegacy = buildFullPTableDefFromLegacy;
|
|
8
34
|
exports.stableKeyFromFullPTableDef = stableKeyFromFullPTableDef;
|
|
9
35
|
|
|
10
36
|
//# sourceMappingURL=ptable_shared.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_shared.cjs","names":[],"sources":["../src/ptable_shared.ts"],"sourcesContent":["import type {\n
|
|
1
|
+
{"version":3,"file":"ptable_shared.cjs","names":[],"sources":["../src/ptable_shared.ts"],"sourcesContent":["import type {\n DataQuery,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableDef,\n PTableHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { hashJson, PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\n\n/**\n * PTable definition stored in the def / table pools. Always\n * carries a pre-lowered data query plus the corresponding output\n * `tableSpec`. Legacy `PTableDef<PObjectId>` inputs are lowered to\n * this shape via WASM-spec at acquire time.\n */\nexport type FullPTableDef = {\n pFrameHandle: PFrameHandle;\n tableSpec: PTableColumnSpec[];\n dataQuery: DataQuery;\n};\n\nexport function stableKeyFromFullPTableDef(data: FullPTableDef): PTableHandle {\n return hashJson(data) as string as PTableHandle;\n}\n\n/**\n * Lower a legacy `PTableDef<PObjectId>` to the data layer. Returns\n * the output `tableSpec` and the lowered `dataQuery`. Routes through\n * `rewriteLegacyQuery` + `evaluateQuery` on the caller-supplied\n * WASM-spec frame.\n */\nexport function lowerLegacyPTableDef(\n pFrameSpec: PFrameInternal.PFrameWasmV3,\n legacyDef: PTableDef<PObjectId>,\n): { tableSpec: PTableColumnSpec[]; dataQuery: DataQuery } {\n const legacy: PFrameInternal.LegacyQuery = {\n src: legacyDef.src,\n filters: [...legacyDef.partitionFilters, ...legacyDef.filters],\n sorting: legacyDef.sorting,\n };\n return pFrameSpec.evaluateQuery(pFrameSpec.rewriteLegacyQuery(legacy));\n}\n\n/**\n * Build a `FullPTableDef` from a legacy `PTableDef` plus the\n * PFrame's WASM-spec frame. Used by pool `acquireFromLegacy` methods\n * to keep lowering off the call site.\n */\nexport function buildFullPTableDefFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n}): FullPTableDef {\n return {\n pFrameHandle: opts.pFrameHandle,\n ...lowerLegacyPTableDef(opts.pFrameSpec, opts.def),\n };\n}\n"],"mappings":";;;AAsBA,SAAgB,2BAA2B,MAAmC;AAC5E,SAAA,GAAA,sCAAA,UAAgB,KAAK;;;;;;;;AASvB,SAAgB,qBACd,YACA,WACyD;CACzD,MAAM,SAAqC;EACzC,KAAK,UAAU;EACf,SAAS,CAAC,GAAG,UAAU,kBAAkB,GAAG,UAAU,QAAQ;EAC9D,SAAS,UAAU;EACpB;AACD,QAAO,WAAW,cAAc,WAAW,mBAAmB,OAAO,CAAC;;;;;;;AAQxE,SAAgB,6BAA6B,MAI3B;AAChB,QAAO;EACL,cAAc,KAAK;EACnB,GAAG,qBAAqB,KAAK,YAAY,KAAK,IAAI;EACnD"}
|
package/dist/ptable_shared.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import { PFrameHandle, PObjectId, PTableColumnSpec, PTableDef, PTableHandle } from "@milaboratories/pl-model-common";
|
|
1
|
+
import { PFrameHandle, PObjectId, PTableColumnSpec, PTableDef, PTableHandle } from "@milaboratories/pl-model-common";
|
|
2
|
+
import { PFrameInternal } from "@milaboratories/pl-model-middle-layer";
|
package/dist/ptable_shared.js
CHANGED
|
@@ -3,7 +3,32 @@ import { hashJson } from "@milaboratories/pl-model-middle-layer";
|
|
|
3
3
|
function stableKeyFromFullPTableDef(data) {
|
|
4
4
|
return hashJson(data);
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Lower a legacy `PTableDef<PObjectId>` to the data layer. Returns
|
|
8
|
+
* the output `tableSpec` and the lowered `dataQuery`. Routes through
|
|
9
|
+
* `rewriteLegacyQuery` + `evaluateQuery` on the caller-supplied
|
|
10
|
+
* WASM-spec frame.
|
|
11
|
+
*/
|
|
12
|
+
function lowerLegacyPTableDef(pFrameSpec, legacyDef) {
|
|
13
|
+
const legacy = {
|
|
14
|
+
src: legacyDef.src,
|
|
15
|
+
filters: [...legacyDef.partitionFilters, ...legacyDef.filters],
|
|
16
|
+
sorting: legacyDef.sorting
|
|
17
|
+
};
|
|
18
|
+
return pFrameSpec.evaluateQuery(pFrameSpec.rewriteLegacyQuery(legacy));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Build a `FullPTableDef` from a legacy `PTableDef` plus the
|
|
22
|
+
* PFrame's WASM-spec frame. Used by pool `acquireFromLegacy` methods
|
|
23
|
+
* to keep lowering off the call site.
|
|
24
|
+
*/
|
|
25
|
+
function buildFullPTableDefFromLegacy(opts) {
|
|
26
|
+
return {
|
|
27
|
+
pFrameHandle: opts.pFrameHandle,
|
|
28
|
+
...lowerLegacyPTableDef(opts.pFrameSpec, opts.def)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
6
31
|
//#endregion
|
|
7
|
-
export { stableKeyFromFullPTableDef };
|
|
32
|
+
export { buildFullPTableDefFromLegacy, stableKeyFromFullPTableDef };
|
|
8
33
|
|
|
9
34
|
//# sourceMappingURL=ptable_shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ptable_shared.js","names":[],"sources":["../src/ptable_shared.ts"],"sourcesContent":["import type {\n
|
|
1
|
+
{"version":3,"file":"ptable_shared.js","names":[],"sources":["../src/ptable_shared.ts"],"sourcesContent":["import type {\n DataQuery,\n PFrameHandle,\n PObjectId,\n PTableColumnSpec,\n PTableDef,\n PTableHandle,\n} from \"@milaboratories/pl-model-common\";\nimport { hashJson, PFrameInternal } from \"@milaboratories/pl-model-middle-layer\";\n\n/**\n * PTable definition stored in the def / table pools. Always\n * carries a pre-lowered data query plus the corresponding output\n * `tableSpec`. Legacy `PTableDef<PObjectId>` inputs are lowered to\n * this shape via WASM-spec at acquire time.\n */\nexport type FullPTableDef = {\n pFrameHandle: PFrameHandle;\n tableSpec: PTableColumnSpec[];\n dataQuery: DataQuery;\n};\n\nexport function stableKeyFromFullPTableDef(data: FullPTableDef): PTableHandle {\n return hashJson(data) as string as PTableHandle;\n}\n\n/**\n * Lower a legacy `PTableDef<PObjectId>` to the data layer. Returns\n * the output `tableSpec` and the lowered `dataQuery`. Routes through\n * `rewriteLegacyQuery` + `evaluateQuery` on the caller-supplied\n * WASM-spec frame.\n */\nexport function lowerLegacyPTableDef(\n pFrameSpec: PFrameInternal.PFrameWasmV3,\n legacyDef: PTableDef<PObjectId>,\n): { tableSpec: PTableColumnSpec[]; dataQuery: DataQuery } {\n const legacy: PFrameInternal.LegacyQuery = {\n src: legacyDef.src,\n filters: [...legacyDef.partitionFilters, ...legacyDef.filters],\n sorting: legacyDef.sorting,\n };\n return pFrameSpec.evaluateQuery(pFrameSpec.rewriteLegacyQuery(legacy));\n}\n\n/**\n * Build a `FullPTableDef` from a legacy `PTableDef` plus the\n * PFrame's WASM-spec frame. Used by pool `acquireFromLegacy` methods\n * to keep lowering off the call site.\n */\nexport function buildFullPTableDefFromLegacy(opts: {\n pFrameHandle: PFrameHandle;\n def: PTableDef<PObjectId>;\n pFrameSpec: PFrameInternal.PFrameWasmV3;\n}): FullPTableDef {\n return {\n pFrameHandle: opts.pFrameHandle,\n ...lowerLegacyPTableDef(opts.pFrameSpec, opts.def),\n };\n}\n"],"mappings":";;AAsBA,SAAgB,2BAA2B,MAAmC;AAC5E,QAAO,SAAS,KAAK;;;;;;;;AASvB,SAAgB,qBACd,YACA,WACyD;CACzD,MAAM,SAAqC;EACzC,KAAK,UAAU;EACf,SAAS,CAAC,GAAG,UAAU,kBAAkB,GAAG,UAAU,QAAQ;EAC9D,SAAS,UAAU;EACpB;AACD,QAAO,WAAW,cAAc,WAAW,mBAAmB,OAAO,CAAC;;;;;;;AAQxE,SAAgB,6BAA6B,MAI3B;AAChB,QAAO;EACL,cAAc,KAAK;EACnB,GAAG,qBAAqB,KAAK,YAAY,KAAK,IAAI;EACnD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pf-driver",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.13",
|
|
4
4
|
"description": "PFrameDriver implementation abstracted from Middle Layer",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"lru-cache": "^11.2.2",
|
|
27
27
|
"@milaboratories/helpers": "1.14.2",
|
|
28
28
|
"@milaboratories/pl-model-common": "1.42.0",
|
|
29
|
-
"@milaboratories/
|
|
30
|
-
"@milaboratories/
|
|
29
|
+
"@milaboratories/pl-model-middle-layer": "1.21.0",
|
|
30
|
+
"@milaboratories/ts-helpers": "1.8.2"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "~24.5.2",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"fast-csv": "5.0.5",
|
|
36
36
|
"typescript": "~5.9.3",
|
|
37
37
|
"vitest": "^4.1.3",
|
|
38
|
-
"@milaboratories/ts-
|
|
38
|
+
"@milaboratories/ts-configs": "1.2.3",
|
|
39
39
|
"@milaboratories/build-configs": "2.0.0",
|
|
40
|
-
"@milaboratories/ts-
|
|
40
|
+
"@milaboratories/ts-builder": "1.5.0"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
|
43
43
|
"node": ">=22.19.0"
|