@milaboratories/pl-middle-layer 1.27.1 → 1.27.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +745 -731
- package/dist/index.mjs.map +1 -1
- package/dist/pool/data.d.ts.map +1 -1
- package/dist/pool/driver.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/pool/data.ts +38 -31
- package/src/pool/driver.ts +19 -13
package/dist/pool/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAS,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/pool/data.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAS,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAYhF,wBAAiB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAgB3E;AAYD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAC7B,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,EACjC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GACxB,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAiB7B;AAED,eAAO,MAAM,0BAA0B,kDAAmD,CAAC;AAC3F,eAAO,MAAM,+BAA+B,kDAG3C,CAAC;AACF,eAAO,MAAM,4BAA4B,kDAAqD,CAAC;AAC/F,eAAO,MAAM,iCAAiC,kDAG7C,CAAC;AACF,eAAO,MAAM,eAAe,kDAAwC,CAAC;AAErE,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,GACvB,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAkJvC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,aAAa,GAClB,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAcvC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,GAAG,SAAS,CAK5F;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEpF;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAEzF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EACV,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,EACP,SAAS,EAET,SAAS,EAIT,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../src/pool/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,yBAAyB,CAAC;AAEhF,OAAO,KAAK,EAAE,aAAa,EAA2B,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EACV,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,EACP,SAAS,EAET,SAAS,EAIT,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAoM3D,qBAAa,YAAa,YAAW,eAAe;IAQhD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyD;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwE;IAChG,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAChE,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;gBAG9C,UAAU,EAAE,cAAc,EAC1B,MAAM,EAAE,QAAQ;IAoE5B,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAClD,GAAG,EAAE,aAAa,GACjB,YAAY;IAaR,YAAY,CACjB,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,GAAG,aAAa,CAAC,CAAC,EAC3D,GAAG,EAAE,aAAa,GACjB,YAAY;IAmBF,WAAW,CACtB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA6BlB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAM9E,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAM9D,kBAAkB,CAC7B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,yBAAyB,CAAC,SAAS,CAAC,GAC5C,OAAO,CAAC,0BAA0B,CAAC;IAiCzB,eAAe,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAkBnB,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;CAM3B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milaboratories/pl-middle-layer",
|
|
3
|
-
"version": "1.27.
|
|
3
|
+
"version": "1.27.2",
|
|
4
4
|
"description": "Pl Middle Layer",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,18 +30,18 @@
|
|
|
30
30
|
"yaml": "^2.6.1",
|
|
31
31
|
"zod": "~3.23.8",
|
|
32
32
|
"@milaboratories/pl-http": "^1.0.3",
|
|
33
|
-
"@milaboratories/resolve-helper": "^1.0.2",
|
|
34
33
|
"@platforma-sdk/block-tools": "^2.5.7",
|
|
35
|
-
"@milaboratories/
|
|
34
|
+
"@milaboratories/resolve-helper": "^1.0.2",
|
|
36
35
|
"@milaboratories/computable": "^2.3.4",
|
|
36
|
+
"@milaboratories/pl-client": "^2.7.3",
|
|
37
|
+
"@milaboratories/pl-model-common": "^1.10.4",
|
|
37
38
|
"@milaboratories/pl-drivers": "^1.5.12",
|
|
38
39
|
"@milaboratories/pl-model-middle-layer": "^1.7.1",
|
|
39
|
-
"@milaboratories/pl-model-common": "^1.10.4",
|
|
40
|
-
"@milaboratories/pl-tree": "^1.4.22",
|
|
41
40
|
"@milaboratories/pl-model-backend": "^1.0.1",
|
|
41
|
+
"@milaboratories/pl-tree": "^1.4.22",
|
|
42
|
+
"@milaboratories/pl-deployments": "^1.1.0",
|
|
42
43
|
"@platforma-sdk/model": "^1.22.2",
|
|
43
44
|
"@milaboratories/ts-helpers": "^1.1.3",
|
|
44
|
-
"@milaboratories/pl-deployments": "^1.1.0",
|
|
45
45
|
"@milaboratories/pl-config": "^1.4.0",
|
|
46
46
|
"@platforma-sdk/workflow-tengo": "2.9.9"
|
|
47
47
|
},
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
"jest": "^29.7.0",
|
|
56
56
|
"@jest/globals": "^29.7.0",
|
|
57
57
|
"ts-jest": "^29.2.5",
|
|
58
|
-
"@milaboratories/
|
|
59
|
-
"@milaboratories/
|
|
58
|
+
"@milaboratories/platforma-build-configs": "1.0.2",
|
|
59
|
+
"@milaboratories/eslint-config": "^1.0.1"
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"type-check": "tsc --noEmit --composite false",
|
package/src/pool/data.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { PColumnSpec, PColumnValues, PlRef, PObjectId, PObjectSpec } from '@platforma-sdk/model';
|
|
2
|
-
import { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
|
|
3
|
-
import { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';
|
|
1
|
+
import type { PColumnSpec, PColumnValues, PlRef, PObjectId, PObjectSpec } from '@platforma-sdk/model';
|
|
2
|
+
import type { PFrameInternal } from '@milaboratories/pl-model-middle-layer';
|
|
3
|
+
import type { PlTreeNodeAccessor, ResourceInfo } from '@milaboratories/pl-tree';
|
|
4
4
|
import { assertNever } from '@milaboratories/ts-helpers';
|
|
5
5
|
import canonicalize from 'canonicalize';
|
|
6
6
|
import {
|
|
7
7
|
isNullResourceId,
|
|
8
8
|
resourceType,
|
|
9
9
|
resourceTypeToString,
|
|
10
|
-
resourceTypesEqual
|
|
10
|
+
resourceTypesEqual,
|
|
11
11
|
} from '@milaboratories/pl-client';
|
|
12
|
-
import { Writable } from 'utility-types';
|
|
13
|
-
import { createHash } from 'crypto';
|
|
12
|
+
import type { Writable } from 'utility-types';
|
|
13
|
+
import { createHash } from 'node:crypto';
|
|
14
14
|
|
|
15
15
|
export function* allBlobs<B>(data: PFrameInternal.DataInfo<B>): Generator<B> {
|
|
16
16
|
switch (data.type) {
|
|
@@ -32,16 +32,17 @@ export function* allBlobs<B>(data: PFrameInternal.DataInfo<B>): Generator<B> {
|
|
|
32
32
|
|
|
33
33
|
function mapValues<T extends object, TResult>(
|
|
34
34
|
obj: T,
|
|
35
|
-
callback: (v: T[keyof T], key: keyof T) => TResult
|
|
36
|
-
): { [
|
|
35
|
+
callback: (v: T[keyof T], key: keyof T) => TResult,
|
|
36
|
+
): { [K in keyof T]: TResult } {
|
|
37
37
|
return Object.fromEntries(
|
|
38
|
-
Object.entries(obj)
|
|
39
|
-
|
|
38
|
+
(Object.entries(obj) as { [K in keyof T]: [K, T[K]]; }[keyof T][])
|
|
39
|
+
.map(([key, value]) => [key, callback(value, key)]),
|
|
40
|
+
) as { [K in keyof T]: TResult };
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
export function mapBlobs<B1, B2>(
|
|
43
44
|
data: PFrameInternal.DataInfo<B1>,
|
|
44
|
-
mapping: (blob: B1) => B2
|
|
45
|
+
mapping: (blob: B1) => B2,
|
|
45
46
|
): PFrameInternal.DataInfo<B2> {
|
|
46
47
|
switch (data.type) {
|
|
47
48
|
case 'Json':
|
|
@@ -53,8 +54,8 @@ export function mapBlobs<B1, B2>(
|
|
|
53
54
|
...data,
|
|
54
55
|
parts: mapValues(data.parts, (v) => ({
|
|
55
56
|
index: mapping(v.index),
|
|
56
|
-
values: mapping(v.values)
|
|
57
|
-
}))
|
|
57
|
+
values: mapping(v.values),
|
|
58
|
+
})),
|
|
58
59
|
};
|
|
59
60
|
default:
|
|
60
61
|
assertNever(data);
|
|
@@ -64,12 +65,12 @@ export function mapBlobs<B1, B2>(
|
|
|
64
65
|
export const PColumnDataJsonPartitioned = resourceType('PColumnData/JsonPartitioned', '1');
|
|
65
66
|
export const PColumnDataJsonSuperPartitioned = resourceType(
|
|
66
67
|
'PColumnData/Partitioned/JsonPartitioned',
|
|
67
|
-
'1'
|
|
68
|
+
'1',
|
|
68
69
|
);
|
|
69
70
|
export const PColumnDataBinaryPartitioned = resourceType('PColumnData/BinaryPartitioned', '1');
|
|
70
71
|
export const PColumnDataBinarySuperPartitioned = resourceType(
|
|
71
72
|
'PColumnData/Partitioned/BinaryPartitioned',
|
|
72
|
-
'1'
|
|
73
|
+
'1',
|
|
73
74
|
);
|
|
74
75
|
export const PColumnDataJson = resourceType('PColumnData/Json', '1');
|
|
75
76
|
|
|
@@ -88,7 +89,7 @@ export type PColumnDataSuperPartitionedResourceValue = {
|
|
|
88
89
|
};
|
|
89
90
|
|
|
90
91
|
export function parseDataInfoResource(
|
|
91
|
-
data: PlTreeNodeAccessor
|
|
92
|
+
data: PlTreeNodeAccessor,
|
|
92
93
|
): PFrameInternal.DataInfo<ResourceInfo> {
|
|
93
94
|
if (!data.getIsReadyOrError()) throw new Error('Data not ready.');
|
|
94
95
|
|
|
@@ -102,7 +103,7 @@ export function parseDataInfoResource(
|
|
|
102
103
|
return {
|
|
103
104
|
type: 'Json',
|
|
104
105
|
keyLength: dataContent.keyLength,
|
|
105
|
-
data: dataContent.data
|
|
106
|
+
data: dataContent.data,
|
|
106
107
|
};
|
|
107
108
|
} else if (resourceTypesEqual(data.resourceType, PColumnDataJsonPartitioned)) {
|
|
108
109
|
const meta = resourceData as PColumnDataPartitionedResourceValue;
|
|
@@ -110,13 +111,13 @@ export function parseDataInfoResource(
|
|
|
110
111
|
const parts = Object.fromEntries(
|
|
111
112
|
data
|
|
112
113
|
.listInputFields()
|
|
113
|
-
.map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo])
|
|
114
|
+
.map((field) => [field, data.traverse({ field, errorIfFieldNotSet: true }).resourceInfo]),
|
|
114
115
|
);
|
|
115
116
|
|
|
116
117
|
return {
|
|
117
118
|
type: 'JsonPartitioned',
|
|
118
119
|
partitionKeyLength: meta.partitionKeyLength,
|
|
119
|
-
parts
|
|
120
|
+
parts,
|
|
120
121
|
};
|
|
121
122
|
} else if (resourceTypesEqual(data.resourceType, PColumnDataJsonSuperPartitioned)) {
|
|
122
123
|
const meta = resourceData as PColumnDataSuperPartitionedResourceValue;
|
|
@@ -128,7 +129,9 @@ export function parseDataInfoResource(
|
|
|
128
129
|
if (keys === undefined) throw new Error(`no partition keys for super key ${superKey}`);
|
|
129
130
|
|
|
130
131
|
for (const key of keys) {
|
|
131
|
-
const partKey = JSON.stringify([
|
|
132
|
+
const partKey = JSON.stringify([
|
|
133
|
+
...JSON.parse(superKey) as PFrameInternal.JsonDataValue[],
|
|
134
|
+
...JSON.parse(key) as PFrameInternal.JsonDataValue[]]);
|
|
132
135
|
parts[partKey] = superPart.traverse({ field: key, errorIfFieldNotSet: true }).resourceInfo;
|
|
133
136
|
}
|
|
134
137
|
}
|
|
@@ -136,7 +139,7 @@ export function parseDataInfoResource(
|
|
|
136
139
|
return {
|
|
137
140
|
type: 'JsonPartitioned',
|
|
138
141
|
partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,
|
|
139
|
-
parts
|
|
142
|
+
parts,
|
|
140
143
|
};
|
|
141
144
|
} else if (resourceTypesEqual(data.resourceType, PColumnDataBinaryPartitioned)) {
|
|
142
145
|
const meta = resourceData as PColumnDataPartitionedResourceValue;
|
|
@@ -176,7 +179,7 @@ export function parseDataInfoResource(
|
|
|
176
179
|
return {
|
|
177
180
|
type: 'BinaryPartitioned',
|
|
178
181
|
partitionKeyLength: meta.partitionKeyLength,
|
|
179
|
-
parts: parts as Record<string, PFrameInternal.BinaryChunkInfo<ResourceInfo
|
|
182
|
+
parts: parts as Record<string, PFrameInternal.BinaryChunkInfo<ResourceInfo>>,
|
|
180
183
|
};
|
|
181
184
|
} else if (resourceTypesEqual(data.resourceType, PColumnDataBinarySuperPartitioned)) {
|
|
182
185
|
const meta = resourceData as PColumnDataSuperPartitionedResourceValue;
|
|
@@ -194,7 +197,9 @@ export function parseDataInfoResource(
|
|
|
194
197
|
if (field.endsWith('.index')) {
|
|
195
198
|
const key = field.slice(0, field.length - 6);
|
|
196
199
|
|
|
197
|
-
const partKey = JSON.stringify([
|
|
200
|
+
const partKey = JSON.stringify([
|
|
201
|
+
...JSON.parse(superKey) as PFrameInternal.JsonDataValue[],
|
|
202
|
+
...JSON.parse(key) as PFrameInternal.JsonDataValue[]]);
|
|
198
203
|
let part = parts[partKey];
|
|
199
204
|
if (part === undefined) {
|
|
200
205
|
part = {};
|
|
@@ -202,12 +207,14 @@ export function parseDataInfoResource(
|
|
|
202
207
|
}
|
|
203
208
|
parts[partKey].index = superData.traverse({
|
|
204
209
|
field,
|
|
205
|
-
errorIfFieldNotSet: true
|
|
210
|
+
errorIfFieldNotSet: true,
|
|
206
211
|
}).resourceInfo;
|
|
207
212
|
} else if (field.endsWith('.values')) {
|
|
208
213
|
const key = field.slice(0, field.length - 7);
|
|
209
214
|
|
|
210
|
-
const partKey = JSON.stringify([
|
|
215
|
+
const partKey = JSON.stringify([
|
|
216
|
+
...JSON.parse(superKey) as PFrameInternal.JsonDataValue[],
|
|
217
|
+
...JSON.parse(key) as PFrameInternal.JsonDataValue[]]);
|
|
211
218
|
let part = parts[partKey];
|
|
212
219
|
if (part === undefined) {
|
|
213
220
|
part = {};
|
|
@@ -215,7 +222,7 @@ export function parseDataInfoResource(
|
|
|
215
222
|
}
|
|
216
223
|
parts[partKey].values = superData.traverse({
|
|
217
224
|
field,
|
|
218
|
-
errorIfFieldNotSet: true
|
|
225
|
+
errorIfFieldNotSet: true,
|
|
219
226
|
}).resourceInfo;
|
|
220
227
|
} else throw new Error(`unrecognized part field name: ${field}`);
|
|
221
228
|
}
|
|
@@ -224,7 +231,7 @@ export function parseDataInfoResource(
|
|
|
224
231
|
return {
|
|
225
232
|
type: 'BinaryPartitioned',
|
|
226
233
|
partitionKeyLength: meta.superPartitionKeyLength + meta.partitionKeyLength,
|
|
227
|
-
parts: parts as Record<string, PFrameInternal.BinaryChunkInfo<ResourceInfo
|
|
234
|
+
parts: parts as Record<string, PFrameInternal.BinaryChunkInfo<ResourceInfo>>,
|
|
228
235
|
};
|
|
229
236
|
}
|
|
230
237
|
|
|
@@ -233,7 +240,7 @@ export function parseDataInfoResource(
|
|
|
233
240
|
|
|
234
241
|
export function makeDataInfoResource(
|
|
235
242
|
spec: PColumnSpec,
|
|
236
|
-
data: PColumnValues
|
|
243
|
+
data: PColumnValues,
|
|
237
244
|
): PFrameInternal.DataInfo<ResourceInfo> {
|
|
238
245
|
const keyLength = spec.axesSpec.length;
|
|
239
246
|
const jsonData: Record<string, PFrameInternal.JsonDataValue> = {};
|
|
@@ -242,11 +249,11 @@ export function makeDataInfoResource(
|
|
|
242
249
|
throw new Error(`inline column key length ${key.length} differs from axes count ${keyLength}`);
|
|
243
250
|
jsonData[JSON.stringify(key)] = val;
|
|
244
251
|
}
|
|
245
|
-
|
|
252
|
+
|
|
246
253
|
return {
|
|
247
254
|
type: 'Json',
|
|
248
255
|
keyLength,
|
|
249
|
-
data: jsonData
|
|
256
|
+
data: jsonData,
|
|
250
257
|
};
|
|
251
258
|
}
|
|
252
259
|
|
|
@@ -262,5 +269,5 @@ export function deriveGlobalPObjectId(blockId: string, exportName: string): PObj
|
|
|
262
269
|
}
|
|
263
270
|
|
|
264
271
|
export function deriveLocalPObjectId(resolvePath: string[], outputName: string): PObjectId {
|
|
265
|
-
return canonicalize({ resolvePath, name: outputName })! as PObjectId
|
|
272
|
+
return canonicalize({ resolvePath, name: outputName })! as PObjectId;
|
|
266
273
|
}
|
package/src/pool/driver.ts
CHANGED
|
@@ -103,7 +103,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
103
103
|
private readonly blobDriver: DownloadDriver,
|
|
104
104
|
private readonly logger: MiLogger,
|
|
105
105
|
private readonly blobContentCache: LRUCache<string, Uint8Array>,
|
|
106
|
-
|
|
106
|
+
columns: InternalPFrameData,
|
|
107
107
|
) {
|
|
108
108
|
const logFunc: PFrameInternal.Logger = (level: 'info' | 'warn' | 'error', message: string) => {
|
|
109
109
|
switch (level) {
|
|
@@ -122,18 +122,26 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
122
122
|
this.blobIdToResource.set(blobKey(blob), blob);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
const distinct_columns = [
|
|
126
|
+
...new Map(columns.map((column) => ({
|
|
127
|
+
...column,
|
|
128
|
+
data: mapBlobs(column.data, blobKey),
|
|
129
|
+
})).map(
|
|
130
|
+
(item) => [canonicalize(item)!, item] as const,
|
|
131
|
+
)).values(),
|
|
132
|
+
];
|
|
125
133
|
|
|
126
134
|
const createSpecPFrame = (): PFrameInternal.PFrameV2 => {
|
|
127
135
|
try {
|
|
128
136
|
if (getDebugFlags().usePFrameRs) {
|
|
129
137
|
const pFrame = new PFrameRs(getDebugFlags().logPFrameRequests ? logFunc : undefined);
|
|
130
|
-
for (const column of
|
|
138
|
+
for (const column of distinct_columns) {
|
|
131
139
|
pFrame.addColumnSpec(column.id, column.spec);
|
|
132
140
|
}
|
|
133
141
|
return pFrame;
|
|
134
142
|
} else {
|
|
135
143
|
const pFrame = getDebugFlags().logPFrameRequests ? new PFrame(logFunc) : new PFrame();
|
|
136
|
-
for (const column of
|
|
144
|
+
for (const column of distinct_columns) {
|
|
137
145
|
try {
|
|
138
146
|
pFrame.addColumnSpec(column.id, column.spec);
|
|
139
147
|
} catch (err: unknown) {
|
|
@@ -146,7 +154,7 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
146
154
|
}
|
|
147
155
|
} catch (err: unknown) {
|
|
148
156
|
throw new Error(
|
|
149
|
-
`Spec PFrame creation failed, columns: ${JSON.stringify(
|
|
157
|
+
`Spec PFrame creation failed, columns: ${JSON.stringify(distinct_columns)}, error: ${err as Error}`,
|
|
150
158
|
);
|
|
151
159
|
}
|
|
152
160
|
};
|
|
@@ -155,21 +163,20 @@ class PFrameHolder implements PFrameInternal.PFrameDataSource, Disposable {
|
|
|
155
163
|
try {
|
|
156
164
|
const pFrame = getDebugFlags().logPFrameRequests ? new PFrame(logFunc) : new PFrame();
|
|
157
165
|
pFrame.setDataSource(this);
|
|
158
|
-
for (const column of
|
|
159
|
-
const dataInfo = mapBlobs(column.data, blobKey);
|
|
166
|
+
for (const column of distinct_columns) {
|
|
160
167
|
try {
|
|
161
168
|
pFrame.addColumnSpec(column.id, column.spec);
|
|
162
|
-
pFrame.setColumnData(column.id,
|
|
169
|
+
pFrame.setColumnData(column.id, column.data);
|
|
163
170
|
} catch (err: unknown) {
|
|
164
171
|
throw new Error(
|
|
165
|
-
`Adding column ${column.id} to PFrame failed: ${err as Error}; Spec: ${JSON.stringify(column.spec)}, DataInfo: ${JSON.stringify(
|
|
172
|
+
`Adding column ${column.id} to PFrame failed: ${err as Error}; Spec: ${JSON.stringify(column.spec)}, DataInfo: ${JSON.stringify(column.data)}.`,
|
|
166
173
|
);
|
|
167
174
|
}
|
|
168
175
|
}
|
|
169
176
|
return pFrame;
|
|
170
177
|
} catch (err: unknown) {
|
|
171
178
|
throw new Error(
|
|
172
|
-
`Data PFrame creation failed, columns: ${JSON.stringify(
|
|
179
|
+
`Data PFrame creation failed, columns: ${JSON.stringify(distinct_columns)}, error: ${err as Error}`,
|
|
173
180
|
);
|
|
174
181
|
}
|
|
175
182
|
};
|
|
@@ -524,7 +531,7 @@ function stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceI
|
|
|
524
531
|
keyLength: r.partitionKeyLength,
|
|
525
532
|
payload: Object.entries(r.parts).map(([part, info]) => ({
|
|
526
533
|
key: part,
|
|
527
|
-
value: info
|
|
534
|
+
value: blobKey(info),
|
|
528
535
|
})),
|
|
529
536
|
};
|
|
530
537
|
break;
|
|
@@ -534,13 +541,12 @@ function stableKeyFromPFrameData(data: PColumn<PFrameInternal.DataInfo<ResourceI
|
|
|
534
541
|
keyLength: r.partitionKeyLength,
|
|
535
542
|
payload: Object.entries(r.parts).map(([part, info]) => ({
|
|
536
543
|
key: part,
|
|
537
|
-
value: [info.index
|
|
544
|
+
value: [blobKey(info.index), blobKey(info.values)] as const,
|
|
538
545
|
})),
|
|
539
546
|
};
|
|
540
547
|
break;
|
|
541
548
|
default:
|
|
542
|
-
|
|
543
|
-
throw Error(`unsupported resource type: ${type satisfies never}`);
|
|
549
|
+
throw Error(`unsupported resource type: ${JSON.stringify(type satisfies never)}`);
|
|
544
550
|
}
|
|
545
551
|
result.payload.sort((lhs, rhs) => lhs.key.localeCompare(rhs.key));
|
|
546
552
|
return result;
|