@deck.gl-community/infovis-layers 9.3.2 → 9.3.7
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.cjs +2998 -114
- package/dist/index.cjs.map +4 -4
- package/dist/index.d.ts +11 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/layers/animation-layer/animation-layer.d.ts +30 -0
- package/dist/layers/animation-layer/animation-layer.d.ts.map +1 -0
- package/dist/layers/animation-layer/animation-layer.js +53 -0
- package/dist/layers/animation-layer/animation-layer.js.map +1 -0
- package/dist/layers/animation-layer/animation.d.ts +86 -0
- package/dist/layers/animation-layer/animation.d.ts.map +1 -0
- package/dist/layers/animation-layer/animation.js +214 -0
- package/dist/layers/animation-layer/animation.js.map +1 -0
- package/dist/layers/block-layer/block-layer-fragment.glsl.d.ts +3 -0
- package/dist/layers/block-layer/block-layer-fragment.glsl.d.ts.map +1 -0
- package/dist/layers/block-layer/block-layer-fragment.glsl.js +41 -0
- package/dist/layers/block-layer/block-layer-fragment.glsl.js.map +1 -0
- package/dist/layers/block-layer/block-layer-uniforms.d.ts +27 -0
- package/dist/layers/block-layer/block-layer-uniforms.d.ts.map +1 -0
- package/dist/layers/block-layer/block-layer-uniforms.js +26 -0
- package/dist/layers/block-layer/block-layer-uniforms.js.map +1 -0
- package/dist/layers/block-layer/block-layer-vertex.glsl.d.ts +3 -0
- package/dist/layers/block-layer/block-layer-vertex.glsl.d.ts.map +1 -0
- package/dist/layers/block-layer/block-layer-vertex.glsl.js +67 -0
- package/dist/layers/block-layer/block-layer-vertex.glsl.js.map +1 -0
- package/dist/layers/block-layer/block-layer.d.ts +71 -0
- package/dist/layers/block-layer/block-layer.d.ts.map +1 -0
- package/dist/layers/block-layer/block-layer.js +108 -0
- package/dist/layers/block-layer/block-layer.js.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layer.d.ts +148 -0
- package/dist/layers/fast-text-layer/fast-text-layer.d.ts.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layer.js +862 -0
- package/dist/layers/fast-text-layer/fast-text-layer.js.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layer.test.d.ts +2 -0
- package/dist/layers/fast-text-layer/fast-text-layer.test.d.ts.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layer.test.js +300 -0
- package/dist/layers/fast-text-layer/fast-text-layer.test.js.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layout.d.ts +179 -0
- package/dist/layers/fast-text-layer/fast-text-layout.d.ts.map +1 -0
- package/dist/layers/fast-text-layer/fast-text-layout.js +665 -0
- package/dist/layers/fast-text-layer/fast-text-layout.js.map +1 -0
- package/dist/layers/fast-text-layer/font-atlas.d.ts +98 -0
- package/dist/layers/fast-text-layer/font-atlas.d.ts.map +1 -0
- package/dist/layers/fast-text-layer/font-atlas.js +337 -0
- package/dist/layers/fast-text-layer/font-atlas.js.map +1 -0
- package/dist/layers/fast-text-layer/index.d.ts +4 -0
- package/dist/layers/fast-text-layer/index.d.ts.map +1 -0
- package/dist/layers/fast-text-layer/index.js +4 -0
- package/dist/layers/fast-text-layer/index.js.map +1 -0
- package/dist/layers/time-delta-layer.d.ts +22 -60
- package/dist/layers/time-delta-layer.d.ts.map +1 -1
- package/dist/layers/time-delta-layer.js +31 -53
- package/dist/layers/time-delta-layer.js.map +1 -1
- package/dist/synchronized-views/synchronized-views.js +1 -1
- package/dist/synchronized-views/synchronized-views.js.map +1 -1
- package/dist/utils/format-utils.d.ts +27 -3
- package/dist/utils/format-utils.d.ts.map +1 -1
- package/dist/utils/format-utils.js +72 -40
- package/dist/utils/format-utils.js.map +1 -1
- package/dist/utils/utf8-string-view.d.ts +53 -0
- package/dist/utils/utf8-string-view.d.ts.map +1 -0
- package/dist/utils/utf8-string-view.js +169 -0
- package/dist/utils/utf8-string-view.js.map +1 -0
- package/dist/utils/utf8-string-view.test.d.ts +2 -0
- package/dist/utils/utf8-string-view.test.d.ts.map +1 -0
- package/dist/utils/utf8-string-view.test.js +88 -0
- package/dist/utils/utf8-string-view.test.js.map +1 -0
- package/dist/views/bounds-utils.d.ts +23 -0
- package/dist/views/bounds-utils.d.ts.map +1 -0
- package/dist/views/bounds-utils.js +65 -0
- package/dist/views/bounds-utils.js.map +1 -0
- package/dist/views/layer-bounds-filter.d.ts +48 -0
- package/dist/views/layer-bounds-filter.d.ts.map +1 -0
- package/dist/views/layer-bounds-filter.js +99 -0
- package/dist/views/layer-bounds-filter.js.map +1 -0
- package/dist/views/layer-filter.js +4 -4
- package/dist/views/layer-filter.js.map +1 -1
- package/dist/views/orthographic-utils.d.ts +30 -2
- package/dist/views/orthographic-utils.d.ts.map +1 -1
- package/dist/views/orthographic-utils.js +33 -14
- package/dist/views/orthographic-utils.js.map +1 -1
- package/dist/views/view-layout/build-views-from-view-layout.d.ts +37 -0
- package/dist/views/view-layout/build-views-from-view-layout.d.ts.map +1 -0
- package/dist/views/view-layout/build-views-from-view-layout.js +413 -0
- package/dist/views/view-layout/build-views-from-view-layout.js.map +1 -0
- package/dist/views/view-layout/index.d.ts +3 -0
- package/dist/views/view-layout/index.d.ts.map +1 -0
- package/dist/views/view-layout/index.js +3 -0
- package/dist/views/view-layout/index.js.map +1 -0
- package/dist/views/view-layout/view-layout-item.d.ts +74 -0
- package/dist/views/view-layout/view-layout-item.d.ts.map +1 -0
- package/dist/views/view-layout/view-layout-item.js +48 -0
- package/dist/views/view-layout/view-layout-item.js.map +1 -0
- package/dist/views/view-layout/view-layout.test.d.ts +2 -0
- package/dist/views/view-layout/view-layout.test.d.ts.map +1 -0
- package/dist/views/view-layout/view-layout.test.js +112 -0
- package/dist/views/view-layout/view-layout.test.js.map +1 -0
- package/dist/views/viewport-bounds-utils.d.ts +55 -0
- package/dist/views/viewport-bounds-utils.d.ts.map +1 -0
- package/dist/views/viewport-bounds-utils.js +70 -0
- package/dist/views/viewport-bounds-utils.js.map +1 -0
- package/package.json +15 -5
- package/src/index.ts +91 -2
- package/src/layers/animation-layer/animation-layer.ts +92 -0
- package/src/layers/animation-layer/animation.ts +328 -0
- package/src/layers/block-layer/block-layer-fragment.glsl.ts +41 -0
- package/src/layers/block-layer/block-layer-uniforms.ts +43 -0
- package/src/layers/block-layer/block-layer-vertex.glsl.ts +67 -0
- package/src/layers/block-layer/block-layer.ts +199 -0
- package/src/layers/fast-text-layer/fast-text-layer.test.ts +359 -0
- package/src/layers/fast-text-layer/fast-text-layer.ts +1208 -0
- package/src/layers/fast-text-layer/fast-text-layout.ts +1124 -0
- package/src/layers/fast-text-layer/font-atlas.ts +574 -0
- package/src/layers/fast-text-layer/index.ts +37 -0
- package/src/layers/time-delta-layer.ts +55 -70
- package/src/synchronized-views/synchronized-views.ts +1 -1
- package/src/utils/format-utils.ts +90 -40
- package/src/utils/utf8-string-view.test.ts +119 -0
- package/src/utils/utf8-string-view.ts +273 -0
- package/src/views/bounds-utils.ts +88 -0
- package/src/views/layer-bounds-filter.ts +160 -0
- package/src/views/layer-filter.ts +4 -4
- package/src/views/orthographic-utils.ts +65 -18
- package/src/views/view-layout/build-views-from-view-layout.ts +547 -0
- package/src/views/view-layout/index.ts +18 -0
- package/src/views/view-layout/view-layout-item.ts +125 -0
- package/src/views/view-layout/view-layout.test.ts +129 -0
- package/src/views/viewport-bounds-utils.ts +104 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-delta-layer.d.ts","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"time-delta-layer.d.ts","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,cAAc,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAuB,KAAK,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAM1E,sDAAsD;AACtD,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,oBAAoB,CAAC;AAEpE,KAAK,oBAAoB,GAAG,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC,GAAG;IAC/F,mFAAmF;IACnF,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC;IACnC,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,yGAAyG;IACzG,MAAM,EAAE,OAAO,CAAC;IAEhB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,0EAA0E;AAC1E,qBAAa,cAAe,SAAQ,cAAc,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAChF,OAAgB,SAAS,SAAoB;IAC7C,OAAgB,YAAY,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAe9D;IAEO,YAAY,IAAI,KAAK,EAAE;CA6FjC"}
|
|
@@ -5,6 +5,7 @@ import { CompositeLayer } from '@deck.gl/core';
|
|
|
5
5
|
import { LineLayer, TextLayer } from '@deck.gl/layers';
|
|
6
6
|
// import {PathStyleExtension} from '@deck.gl/extensions';
|
|
7
7
|
import { formatTimeMs } from "../utils/format-utils.js";
|
|
8
|
+
/** Renders a selected time interval as header or viewport guide lines. */
|
|
8
9
|
export class TimeDeltaLayer extends CompositeLayer {
|
|
9
10
|
static layerName = 'TimeDeltaLayer';
|
|
10
11
|
static defaultProps = {
|
|
@@ -17,13 +18,14 @@ export class TimeDeltaLayer extends CompositeLayer {
|
|
|
17
18
|
color: [0, 0, 0, 255],
|
|
18
19
|
unit: 'timestamp',
|
|
19
20
|
yMin: -1e6, // Should cover full viewport height in most cases
|
|
20
|
-
yMax: 1e6 // Should cover full viewport height in most cases
|
|
21
|
+
yMax: 1e6, // Should cover full viewport height in most cases
|
|
22
|
+
fontSize: 12,
|
|
23
|
+
fontFamily: TextLayer.defaultProps.fontFamily,
|
|
24
|
+
fontSettings: TextLayer.defaultProps.fontSettings,
|
|
25
|
+
fontWeight: TextLayer.defaultProps.fontWeight
|
|
21
26
|
};
|
|
22
27
|
renderLayers() {
|
|
23
28
|
const { startTimeMs, endTimeMs, color = [0, 0, 0, 255], yMin, yMax } = this.props;
|
|
24
|
-
const timeDeltaPosition = [(startTimeMs + endTimeMs) / 2, 10];
|
|
25
|
-
const timeDeltaMs = Math.abs(endTimeMs - startTimeMs);
|
|
26
|
-
const timeDeltaLabel = formatTimeMs(timeDeltaMs, false);
|
|
27
29
|
if (!this.props.header) {
|
|
28
30
|
const timeLines = [
|
|
29
31
|
{
|
|
@@ -40,54 +42,26 @@ export class TimeDeltaLayer extends CompositeLayer {
|
|
|
40
42
|
new LineLayer({
|
|
41
43
|
id: 'time-delta-side-bars',
|
|
42
44
|
data: timeLines,
|
|
43
|
-
getSourcePosition:
|
|
44
|
-
getTargetPosition:
|
|
45
|
+
getSourcePosition: d => d.sourcePosition,
|
|
46
|
+
getTargetPosition: d => d.targetPosition,
|
|
45
47
|
getColor: color,
|
|
46
48
|
getWidth: 4,
|
|
47
49
|
widthUnits: 'pixels'
|
|
48
50
|
})
|
|
49
51
|
];
|
|
50
52
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// getSourcePosition: (d) => d.sourcePosition,
|
|
56
|
-
// getTargetPosition: (d) => d.targetPosition,
|
|
57
|
-
// getColor: color,
|
|
58
|
-
// getWidth: 1,
|
|
59
|
-
// }),
|
|
60
|
-
// TODO - triggers broader root-level file updates
|
|
61
|
-
// new PathLayer({
|
|
62
|
-
// id: 'dotted-path',
|
|
63
|
-
// data: route,
|
|
64
|
-
// getPath: d => d.path,
|
|
65
|
-
// getWidth: 4,
|
|
66
|
-
// getColor: [255, 0, 0],
|
|
67
|
-
// // Enable rounded caps on each dash
|
|
68
|
-
// rounded: true,
|
|
69
|
-
// // Add the dash extension
|
|
70
|
-
// extensions: [
|
|
71
|
-
// new PathStyleExtension({
|
|
72
|
-
// dash: true,
|
|
73
|
-
// // highPrecisionDash: true, // uncomment for finer control at low zoom
|
|
74
|
-
// capRounded: true // draw dash ends as semicircles
|
|
75
|
-
// })
|
|
76
|
-
// ],
|
|
77
|
-
// // [dashLength, gapLength] in pixels
|
|
78
|
-
// // small dash + equal or larger gap = dotted effect
|
|
79
|
-
// getDashArray: () => [2, 6]
|
|
80
|
-
// })
|
|
81
|
-
// ]
|
|
82
|
-
const HEADER_Y = 12;
|
|
53
|
+
const { y, fontSize, fontFamily, fontSettings, fontWeight } = this.props;
|
|
54
|
+
const timeDeltaPosition = [(startTimeMs + endTimeMs) / 2, y - 10];
|
|
55
|
+
const timeDeltaMs = Math.abs(endTimeMs - startTimeMs);
|
|
56
|
+
const timeDeltaLabel = formatTimeMs(timeDeltaMs, { space: false });
|
|
83
57
|
const timeLines = [
|
|
84
58
|
{
|
|
85
|
-
sourcePosition: [startTimeMs,
|
|
86
|
-
targetPosition: [startTimeMs,
|
|
59
|
+
sourcePosition: [startTimeMs, y],
|
|
60
|
+
targetPosition: [startTimeMs, y - 7]
|
|
87
61
|
},
|
|
88
62
|
{
|
|
89
|
-
sourcePosition: [endTimeMs,
|
|
90
|
-
targetPosition: [endTimeMs,
|
|
63
|
+
sourcePosition: [endTimeMs, y],
|
|
64
|
+
targetPosition: [endTimeMs, y - 7]
|
|
91
65
|
}
|
|
92
66
|
];
|
|
93
67
|
return [
|
|
@@ -95,8 +69,8 @@ export class TimeDeltaLayer extends CompositeLayer {
|
|
|
95
69
|
new LineLayer({
|
|
96
70
|
id: 'header-time-delta-side-bars',
|
|
97
71
|
data: timeLines,
|
|
98
|
-
getSourcePosition:
|
|
99
|
-
getTargetPosition:
|
|
72
|
+
getSourcePosition: d => d.sourcePosition,
|
|
73
|
+
getTargetPosition: d => d.targetPosition,
|
|
100
74
|
getColor: color,
|
|
101
75
|
getWidth: 4,
|
|
102
76
|
widthUnits: 'pixels'
|
|
@@ -106,12 +80,12 @@ export class TimeDeltaLayer extends CompositeLayer {
|
|
|
106
80
|
id: 'header-time-delta-dotted-line',
|
|
107
81
|
data: [
|
|
108
82
|
{
|
|
109
|
-
sourcePosition: [startTimeMs,
|
|
110
|
-
targetPosition: [endTimeMs,
|
|
83
|
+
sourcePosition: [startTimeMs, y - 7],
|
|
84
|
+
targetPosition: [endTimeMs, y - 7]
|
|
111
85
|
}
|
|
112
86
|
],
|
|
113
|
-
getSourcePosition:
|
|
114
|
-
getTargetPosition:
|
|
87
|
+
getSourcePosition: d => d.sourcePosition,
|
|
88
|
+
getTargetPosition: d => d.targetPosition,
|
|
115
89
|
getColor: color,
|
|
116
90
|
getWidth: 1,
|
|
117
91
|
widthUnits: 'pixels'
|
|
@@ -120,14 +94,18 @@ export class TimeDeltaLayer extends CompositeLayer {
|
|
|
120
94
|
new TextLayer({
|
|
121
95
|
id: 'header-time-delta-label',
|
|
122
96
|
data: [{ position: timeDeltaPosition, text: timeDeltaLabel }],
|
|
123
|
-
getPosition:
|
|
124
|
-
getText:
|
|
125
|
-
|
|
97
|
+
getPosition: d => d.position,
|
|
98
|
+
getText: d => d.text,
|
|
99
|
+
characterSet: '-0123456789.dhmsµ',
|
|
100
|
+
getSize: fontSize,
|
|
101
|
+
fontFamily,
|
|
102
|
+
fontSettings,
|
|
103
|
+
fontWeight,
|
|
126
104
|
getColor: color,
|
|
127
105
|
getTextAnchor: 'middle',
|
|
128
|
-
getAlignmentBaseline: '
|
|
106
|
+
getAlignmentBaseline: 'center',
|
|
129
107
|
background: true,
|
|
130
|
-
getBackgroundColor: [255, 255, 255, 255],
|
|
108
|
+
getBackgroundColor: [255 - color[0], 255 - color[1], 255 - color[2], 255],
|
|
131
109
|
backgroundPadding: [4, 2] // Horizontal and vertical padding
|
|
132
110
|
})
|
|
133
111
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-delta-layer.js","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"time-delta-layer.js","sourceRoot":"","sources":["../../src/layers/time-delta-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ export const SYNCHRONIZED_VIEWS = [
|
|
|
12
12
|
flipY: false,
|
|
13
13
|
clear: true, // [1, 1, 1, 1],
|
|
14
14
|
x: LEGEND_VIEW_WIDTH,
|
|
15
|
-
width: `calc(100% - ${LEGEND_VIEW_WIDTH}px`,
|
|
15
|
+
width: `calc(100% - ${LEGEND_VIEW_WIDTH}px)`,
|
|
16
16
|
y: HEADER_VIEW_HEIGHT,
|
|
17
17
|
height: `calc(100% - ${HEADER_VIEW_HEIGHT}px)`,
|
|
18
18
|
controller: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"synchronized-views.js","sourceRoot":"","sources":["../../src/synchronized-views/synchronized-views.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAC,qBAAqB,EAAC,uCAAoC;AAClE,OAAO,EAAC,eAAe,EAAC,qCAAkC;AAK1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,gBAAgB,CAAC;QACnB,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI,EAAE,gBAAgB;QAC7B,CAAC,EAAE,iBAAiB;QACpB,KAAK,EAAE,eAAe,iBAAiB,
|
|
1
|
+
{"version":3,"file":"synchronized-views.js","sourceRoot":"","sources":["../../src/synchronized-views/synchronized-views.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAC,qBAAqB,EAAC,uCAAoC;AAClE,OAAO,EAAC,eAAe,EAAC,qCAAkC;AAK1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,gBAAgB,CAAC;QACnB,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI,EAAE,gBAAgB;QAC7B,CAAC,EAAE,iBAAiB;QACpB,KAAK,EAAE,eAAe,iBAAiB,KAAK;QAC5C,CAAC,EAAE,kBAAkB;QACrB,MAAM,EAAE,eAAe,kBAAkB,KAAK;QAC9C,UAAU,EAAE;YACV,IAAI,EAAE,sBAAsB;YAC5B,sDAAsD;YACtD,QAAQ,EAAE,GAAG;YACb,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,IAAI;SACjB;KACF,CAAC;IACF,IAAI,gBAAgB,CAAC;QACnB,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI,EAAE,gBAAgB;QAC7B,CAAC,EAAE,iBAAiB;QACpB,KAAK,EAAE,eAAe,iBAAiB,KAAK;QAC5C,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,KAAK;KAClB,CAAC;IACF,IAAI,gBAAgB,CAAC;QACnB,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,IAAI,EAAE,gBAAgB;QAC7B,CAAC,EAAE,CAAC;QACJ,KAAK,EAAE,iBAAiB;QACxB,CAAC,EAAE,kBAAkB;QACrB,MAAM,EAAE,eAAe,kBAAkB,KAAK;QAC9C,UAAU,EAAE,KAAK;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAG;IACjD,MAAM,EAAE,EAAC,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,EAA6B;IACnF,MAAM,EAAE,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,EAA6B;CACrF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,SAAgC;IACxE,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,mCAAmC,CAAC,MAAM,CAAC;QAC9E,MAAM,EAAE,eAAe,CAAC,SAAS,EAAE,mCAAmC,CAAC,MAAM,CAAC;QAC9E,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,KAajD;IAKC,MAAM,EAAC,SAAS,EAAE,UAAU,EAAC,GAAG,KAAK,CAAC;IACtC,MAAM,EAAC,YAAY,GAAG,kBAAkB,EAAE,WAAW,GAAG,iBAAiB,EAAC,GAAG,KAAK,CAAC;IAEnF,+EAA+E;IAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;IAExD,MAAM,EAAC,MAAM,EAAE,IAAI,EAAC,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtF,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,sBAAsB;IAEnD,IAAI,aAAoC,CAAC;IACzC,qEAAqE;IACrE,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,GAAG,EAAC,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,aAAa,GAAG;YACd,GAAG,SAAS,CAAC,IAAI;YACjB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,EAAE,CAAE,SAAS,CAAC,IAAI,CAAC,IAAyB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;SAC9D,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG;QACnB,GAAG,SAAS;QACZ,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,eAAe,CAAC,aAAa,EAAE,mCAAmC,CAAC,MAAM,CAAC;QAClF,MAAM,EAAE,eAAe,CAAC,aAAa,EAAE,mCAAmC,CAAC,MAAM,CAAC;KACnF,CAAC;IACF,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
2
|
+
* Options for formatting millisecond duration labels.
|
|
3
|
+
*/
|
|
4
|
+
export type FormatTimeMsOptions = {
|
|
5
|
+
/** Whether to include a space between the value and unit. @defaultValue true */
|
|
6
|
+
space?: boolean;
|
|
7
|
+
/** Number of significant digits used for fractional values. @defaultValue 5 */
|
|
8
|
+
roundDigits?: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Convert a time in milliseconds to a human-readable string.
|
|
12
|
+
* @param timeMs Time in milliseconds.
|
|
13
|
+
* @param options Formatting options, or the legacy `space` boolean argument.
|
|
14
|
+
* @returns Human-readable duration label.
|
|
15
|
+
*/
|
|
16
|
+
export declare function formatTimeMs(timeMs: number, options?: boolean | FormatTimeMsOptions): string;
|
|
17
|
+
/**
|
|
18
|
+
* Convert a millisecond time range to a human-readable string.
|
|
19
|
+
* @param startMs Range start in milliseconds.
|
|
20
|
+
* @param endMs Range end in milliseconds.
|
|
21
|
+
* @returns Human-readable start and end labels joined by a separator.
|
|
4
22
|
*/
|
|
5
|
-
export declare function formatTimeMs(timeMs: number, space?: boolean): string;
|
|
6
23
|
export declare function formatTimeRangeMs(startMs: number, endMs: number): string;
|
|
24
|
+
/**
|
|
25
|
+
* Convert a float to a string with a specified number of significant digits.
|
|
26
|
+
* @param f The float to convert.
|
|
27
|
+
* @param roundDigits The number of significant digits to round to (default is 5).
|
|
28
|
+
* @returns The float as a string, rounded to the specified precision.
|
|
29
|
+
*/
|
|
30
|
+
export declare function floatToStr(f: number, roundDigits?: number): string;
|
|
7
31
|
//# sourceMappingURL=format-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"format-utils.d.ts","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,mBAAwB,GAAG,MAAM,CA6BhG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,GAAG,MAAM,CAQrE"}
|
|
@@ -2,74 +2,106 @@
|
|
|
2
2
|
// SPDX-License-Identifier: MIT
|
|
3
3
|
// Copyright (c) vis.gl contributors
|
|
4
4
|
/**
|
|
5
|
-
* Convert a time in
|
|
6
|
-
* @param
|
|
5
|
+
* Convert a time in milliseconds to a human-readable string.
|
|
6
|
+
* @param timeMs Time in milliseconds.
|
|
7
|
+
* @param options Formatting options, or the legacy `space` boolean argument.
|
|
8
|
+
* @returns Human-readable duration label.
|
|
7
9
|
*/
|
|
8
|
-
export function formatTimeMs(timeMs,
|
|
10
|
+
export function formatTimeMs(timeMs, options = {}) {
|
|
11
|
+
const normalizedOptions = typeof options === 'boolean' ? { space: options } : options;
|
|
12
|
+
const { space = true, roundDigits = 5 } = normalizedOptions;
|
|
9
13
|
const sep = space ? ' ' : '';
|
|
10
14
|
const us = timeMs * 1000;
|
|
11
15
|
if (us === 0) {
|
|
12
16
|
return '0s';
|
|
13
17
|
}
|
|
14
18
|
if (Math.abs(us) < 1000) {
|
|
15
|
-
return `${floatToStr(us)}${sep}µs`;
|
|
19
|
+
return `${floatToStr(us, roundDigits)}${sep}µs`;
|
|
16
20
|
}
|
|
17
21
|
const ms = us / 1000;
|
|
18
22
|
if (Math.abs(ms) < 1000) {
|
|
19
|
-
return `${floatToStr(ms)}${sep}
|
|
23
|
+
return `${floatToStr(ms, roundDigits)}${sep}ms`;
|
|
20
24
|
}
|
|
21
25
|
const s = ms / 1000;
|
|
22
26
|
if (Math.abs(s) < 60) {
|
|
23
|
-
return `${floatToStr(s)}${sep}
|
|
27
|
+
return `${floatToStr(s, roundDigits)}${sep}s`;
|
|
24
28
|
}
|
|
25
29
|
const m = s / 60;
|
|
26
30
|
if (Math.abs(m) < 60) {
|
|
27
|
-
return
|
|
31
|
+
return formatMinuteDuration(s);
|
|
28
32
|
}
|
|
29
33
|
const h = m / 60;
|
|
30
34
|
if (Math.abs(h) < 24) {
|
|
31
|
-
return
|
|
35
|
+
return formatHourDuration(s);
|
|
32
36
|
}
|
|
33
|
-
|
|
34
|
-
return `${floatToStr(d)}${sep} days`;
|
|
37
|
+
return formatDayDuration(s);
|
|
35
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Convert a millisecond time range to a human-readable string.
|
|
41
|
+
* @param startMs Range start in milliseconds.
|
|
42
|
+
* @param endMs Range end in milliseconds.
|
|
43
|
+
* @returns Human-readable start and end labels joined by a separator.
|
|
44
|
+
*/
|
|
36
45
|
export function formatTimeRangeMs(startMs, endMs) {
|
|
37
46
|
return `${formatTimeMs(startMs)} - ${formatTimeMs(endMs)}`;
|
|
38
47
|
}
|
|
39
48
|
/**
|
|
40
|
-
* Convert a float to a string
|
|
49
|
+
* Convert a float to a string with a specified number of significant digits.
|
|
50
|
+
* @param f The float to convert.
|
|
51
|
+
* @param roundDigits The number of significant digits to round to (default is 5).
|
|
52
|
+
* @returns The float as a string, rounded to the specified precision.
|
|
41
53
|
*/
|
|
42
|
-
function floatToStr(f, roundDigits = 5) {
|
|
43
|
-
if (Number.isInteger(f)) {
|
|
54
|
+
export function floatToStr(f, roundDigits = 5) {
|
|
55
|
+
if (roundDigits < 1 || Number.isInteger(f)) {
|
|
44
56
|
return f.toString();
|
|
45
57
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
58
|
+
// Round the float to the specified precision
|
|
59
|
+
const precision = f.toPrecision(roundDigits);
|
|
60
|
+
return parseFloat(precision).toString();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format a duration between one minute and one hour with whole seconds.
|
|
64
|
+
* @param seconds Duration in seconds.
|
|
65
|
+
* @returns A compact minutes-and-seconds duration label.
|
|
66
|
+
*/
|
|
67
|
+
function formatMinuteDuration(seconds) {
|
|
68
|
+
const sign = seconds < 0 ? '-' : '';
|
|
69
|
+
const totalSeconds = Math.floor(Math.abs(seconds));
|
|
70
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
71
|
+
const remainingSeconds = totalSeconds % 60;
|
|
72
|
+
if (remainingSeconds === 0) {
|
|
73
|
+
return `${sign}${minutes}m`;
|
|
74
|
+
}
|
|
75
|
+
return `${sign}${minutes}m${remainingSeconds}s`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format a duration between one hour and one day with whole minutes.
|
|
79
|
+
* @param seconds Duration in seconds.
|
|
80
|
+
* @returns A compact hours-and-minutes duration label.
|
|
81
|
+
*/
|
|
82
|
+
function formatHourDuration(seconds) {
|
|
83
|
+
const sign = seconds < 0 ? '-' : '';
|
|
84
|
+
const totalMinutes = Math.floor(Math.abs(seconds) / 60);
|
|
85
|
+
const hours = Math.floor(totalMinutes / 60);
|
|
86
|
+
const remainingMinutes = totalMinutes % 60;
|
|
87
|
+
if (remainingMinutes === 0) {
|
|
88
|
+
return `${sign}${hours}h`;
|
|
89
|
+
}
|
|
90
|
+
return `${sign}${hours}h${remainingMinutes}m`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Format a duration of at least one day with whole hours.
|
|
94
|
+
* @param seconds Duration in seconds.
|
|
95
|
+
* @returns A compact days-and-hours duration label.
|
|
96
|
+
*/
|
|
97
|
+
function formatDayDuration(seconds) {
|
|
98
|
+
const sign = seconds < 0 ? '-' : '';
|
|
99
|
+
const totalHours = Math.floor(Math.abs(seconds) / 3600);
|
|
100
|
+
const days = Math.floor(totalHours / 24);
|
|
101
|
+
const remainingHours = totalHours % 24;
|
|
102
|
+
if (remainingHours === 0) {
|
|
103
|
+
return `${sign}${days}d`;
|
|
51
104
|
}
|
|
52
|
-
return
|
|
105
|
+
return `${sign}${days}d${remainingHours}h`;
|
|
53
106
|
}
|
|
54
|
-
// export function formatTimesUs(ticks: number[]): string {
|
|
55
|
-
// // Try from 0 up to a reasonable max (e.g. 20)
|
|
56
|
-
// for (let d = 0; d <= 20; d++) {
|
|
57
|
-
// const seen = new Set<string>();
|
|
58
|
-
// let allDistinct = true;
|
|
59
|
-
// for (const t of ticks) {
|
|
60
|
-
// // Format each tick with d decimals
|
|
61
|
-
// const str = t.toFixed(d);
|
|
62
|
-
// if (seen.has(str)) {
|
|
63
|
-
// allDistinct = false;
|
|
64
|
-
// break;
|
|
65
|
-
// }
|
|
66
|
-
// seen.add(str);
|
|
67
|
-
// }
|
|
68
|
-
// if (allDistinct) {
|
|
69
|
-
// return d;
|
|
70
|
-
// }
|
|
71
|
-
// }
|
|
72
|
-
// // Fallback if somehow not distinct even at 20 decimals
|
|
73
|
-
// return 20;
|
|
74
|
-
// }
|
|
75
107
|
//# sourceMappingURL=format-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;
|
|
1
|
+
{"version":3,"file":"format-utils.js","sourceRoot":"","sources":["../../src/utils/format-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type * as arrow from 'apache-arrow';
|
|
2
|
+
/** Byte-range view for one UTF-8 encoded string. */
|
|
3
|
+
export type Utf8StringView = {
|
|
4
|
+
/** Backing UTF-8 bytes. */
|
|
5
|
+
data: Uint8Array;
|
|
6
|
+
/** Inclusive byte offset where the string starts. */
|
|
7
|
+
start: number;
|
|
8
|
+
/** Exclusive byte offset where the string ends. */
|
|
9
|
+
end: number;
|
|
10
|
+
};
|
|
11
|
+
/** Normalized direct-buffer source for one Arrow Utf8 vector. */
|
|
12
|
+
export type Utf8ColumnSource = {
|
|
13
|
+
/** Number of logical rows in the column. */
|
|
14
|
+
readonly rowCount: number;
|
|
15
|
+
/** Direct-buffer chunks that make up the column. */
|
|
16
|
+
readonly chunks: readonly Utf8ColumnSourceChunk[];
|
|
17
|
+
/** Returns whether one logical row is valid. */
|
|
18
|
+
readonly isValid: (rowIndex: number) => boolean;
|
|
19
|
+
};
|
|
20
|
+
/** One direct-buffer chunk in a normalized Arrow Utf8 column source. */
|
|
21
|
+
export type Utf8ColumnSourceChunk = {
|
|
22
|
+
/** Logical row index where this chunk starts. */
|
|
23
|
+
readonly rowOffset: number;
|
|
24
|
+
/** Number of logical rows in this chunk. */
|
|
25
|
+
readonly rowCount: number;
|
|
26
|
+
/** Row offset inside the chunk's value-offset buffer. */
|
|
27
|
+
readonly valueOffsetIndex: number;
|
|
28
|
+
/** UTF-8 value-offset buffer. */
|
|
29
|
+
readonly valueOffsets: Int32Array | Uint32Array;
|
|
30
|
+
/** Contiguous UTF-8 value bytes. */
|
|
31
|
+
readonly values: Uint8Array;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Encodes one JavaScript string into a reusable UTF-8 byte view.
|
|
35
|
+
*/
|
|
36
|
+
export declare function makeUtf8StringView(value: string): Utf8StringView;
|
|
37
|
+
/**
|
|
38
|
+
* Builds a direct-buffer source from an Arrow Utf8 vector without copying UTF-8 bytes.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getArrowUtf8ColumnSource(utf8Column: arrow.Vector<arrow.Utf8>): Utf8ColumnSource | null;
|
|
41
|
+
/**
|
|
42
|
+
* Fills a reusable UTF-8 view for one Arrow Utf8 row without decoding the row to a string.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getArrowUtf8RowView(utf8Column: arrow.Vector<arrow.Utf8>, rowIndex: number, out: Utf8StringView): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Fills a reusable UTF-8 view for one normalized Utf8 column row.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getUtf8ColumnSourceRowView(source: Utf8ColumnSource, rowIndex: number, out: Utf8StringView): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Finds the first row in an Arrow Utf8 column whose bytes equal the requested string view.
|
|
51
|
+
*/
|
|
52
|
+
export declare function arrowFindUtf8(utf8Column: arrow.Vector<arrow.Utf8>, value: Utf8StringView, startRow?: number): number;
|
|
53
|
+
//# sourceMappingURL=utf8-string-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8-string-view.d.ts","sourceRoot":"","sources":["../../src/utils/utf8-string-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAE3C,oDAAoD;AACpD,MAAM,MAAM,cAAc,GAAG;IAC3B,2BAA2B;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAClD,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD,CAAC;AAEF,wEAAwE;AACxE,MAAM,MAAM,qBAAqB,GAAG;IAClC,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,iCAAiC;IACjC,QAAQ,CAAC,YAAY,EAAE,UAAU,GAAG,WAAW,CAAC;IAChD,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B,CAAC;AAKF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAGhE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GACnC,gBAAgB,GAAG,IAAI,CA6BzB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,GAClB,OAAO,CA4BT;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,cAAc,GAClB,OAAO,CAuBT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EACpC,KAAK,EAAE,cAAc,EACrB,QAAQ,SAAI,GACX,MAAM,CAcR"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
const textEncoder = new TextEncoder();
|
|
2
|
+
const textDecoder = new TextDecoder();
|
|
3
|
+
/**
|
|
4
|
+
* Encodes one JavaScript string into a reusable UTF-8 byte view.
|
|
5
|
+
*/
|
|
6
|
+
export function makeUtf8StringView(value) {
|
|
7
|
+
const data = textEncoder.encode(value);
|
|
8
|
+
return { data, start: 0, end: data.length };
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Builds a direct-buffer source from an Arrow Utf8 vector without copying UTF-8 bytes.
|
|
12
|
+
*/
|
|
13
|
+
export function getArrowUtf8ColumnSource(utf8Column) {
|
|
14
|
+
const chunks = getArrowUtf8DataChunks(utf8Column);
|
|
15
|
+
if (!chunks || chunks.length === 0) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const sourceChunks = [];
|
|
19
|
+
let rowOffset = 0;
|
|
20
|
+
for (const chunk of chunks) {
|
|
21
|
+
const valueOffsets = chunk.valueOffsets;
|
|
22
|
+
const values = chunk.values;
|
|
23
|
+
if (!valueOffsets || !values) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
sourceChunks.push({
|
|
27
|
+
rowOffset,
|
|
28
|
+
rowCount: chunk.length,
|
|
29
|
+
valueOffsetIndex: 0,
|
|
30
|
+
valueOffsets,
|
|
31
|
+
values
|
|
32
|
+
});
|
|
33
|
+
rowOffset += chunk.length;
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
rowCount: utf8Column.length,
|
|
37
|
+
chunks: sourceChunks,
|
|
38
|
+
isValid: rowIndex => utf8Column.isValid(rowIndex)
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Fills a reusable UTF-8 view for one Arrow Utf8 row without decoding the row to a string.
|
|
43
|
+
*/
|
|
44
|
+
export function getArrowUtf8RowView(utf8Column, rowIndex, out) {
|
|
45
|
+
if (!Number.isInteger(rowIndex) || rowIndex < 0 || rowIndex >= utf8Column.length) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
if (!utf8Column.isValid(rowIndex)) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const chunks = getArrowUtf8DataChunks(utf8Column);
|
|
52
|
+
if (!chunks || chunks.length === 0) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
let rowOffset = 0;
|
|
56
|
+
for (const chunk of chunks) {
|
|
57
|
+
const chunkEnd = rowOffset + chunk.length;
|
|
58
|
+
if (rowIndex >= rowOffset && rowIndex < chunkEnd) {
|
|
59
|
+
const valueOffsets = chunk.valueOffsets;
|
|
60
|
+
const values = chunk.values;
|
|
61
|
+
if (!valueOffsets || !values) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return fillUtf8StringView(valueOffsets, values, rowIndex - rowOffset, out);
|
|
65
|
+
}
|
|
66
|
+
rowOffset = chunkEnd;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fills a reusable UTF-8 view for one normalized Utf8 column row.
|
|
72
|
+
*/
|
|
73
|
+
export function getUtf8ColumnSourceRowView(source, rowIndex, out) {
|
|
74
|
+
if (!Number.isInteger(rowIndex) || rowIndex < 0 || rowIndex >= source.rowCount) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
if (!source.isValid(rowIndex)) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
for (const chunk of source.chunks) {
|
|
81
|
+
const chunkEnd = chunk.rowOffset + chunk.rowCount;
|
|
82
|
+
if (rowIndex < chunk.rowOffset || rowIndex >= chunkEnd) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
return fillUtf8StringView(chunk.valueOffsets, chunk.values, chunk.valueOffsetIndex + rowIndex - chunk.rowOffset, out);
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Finds the first row in an Arrow Utf8 column whose bytes equal the requested string view.
|
|
91
|
+
*/
|
|
92
|
+
export function arrowFindUtf8(utf8Column, value, startRow = 0) {
|
|
93
|
+
const normalizedStartRow = Math.max(0, startRow);
|
|
94
|
+
const fastResult = arrowFindUtf8InDataChunks(utf8Column, value, normalizedStartRow);
|
|
95
|
+
if (fastResult !== null) {
|
|
96
|
+
return fastResult;
|
|
97
|
+
}
|
|
98
|
+
const expected = decodeUtf8StringView(value);
|
|
99
|
+
for (let rowIndex = normalizedStartRow; rowIndex < utf8Column.length; rowIndex += 1) {
|
|
100
|
+
if (utf8Column.get(rowIndex) === expected) {
|
|
101
|
+
return rowIndex;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return -1;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Scans Arrow's contiguous Utf8 buffers directly when the vector exposes them.
|
|
108
|
+
*/
|
|
109
|
+
function arrowFindUtf8InDataChunks(utf8Column, value, startRow) {
|
|
110
|
+
const chunks = getArrowUtf8DataChunks(utf8Column);
|
|
111
|
+
if (!chunks || chunks.length === 0) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
let globalRowOffset = 0;
|
|
115
|
+
for (const chunk of chunks) {
|
|
116
|
+
const valueOffsets = chunk.valueOffsets;
|
|
117
|
+
const values = chunk.values;
|
|
118
|
+
if (!valueOffsets || !values) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
const chunkStartRow = Math.max(0, startRow - globalRowOffset);
|
|
122
|
+
for (let chunkRow = chunkStartRow; chunkRow < chunk.length; chunkRow += 1) {
|
|
123
|
+
const globalRow = globalRowOffset + chunkRow;
|
|
124
|
+
if (!utf8Column.isValid(globalRow)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const start = valueOffsets[chunkRow];
|
|
128
|
+
const end = valueOffsets[chunkRow + 1];
|
|
129
|
+
if (start !== undefined && end !== undefined && utf8BytesEqual(values, start, end, value)) {
|
|
130
|
+
return globalRow;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
globalRowOffset += chunk.length;
|
|
134
|
+
}
|
|
135
|
+
return -1;
|
|
136
|
+
}
|
|
137
|
+
function getArrowUtf8DataChunks(utf8Column) {
|
|
138
|
+
return utf8Column.data;
|
|
139
|
+
}
|
|
140
|
+
function fillUtf8StringView(valueOffsets, values, offsetIndex, out) {
|
|
141
|
+
const start = valueOffsets[offsetIndex];
|
|
142
|
+
const end = valueOffsets[offsetIndex + 1];
|
|
143
|
+
if (start === undefined || end === undefined) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
out.data = values;
|
|
147
|
+
out.start = start;
|
|
148
|
+
out.end = end;
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Returns whether a UTF-8 byte range equals one target UTF-8 view.
|
|
153
|
+
*/
|
|
154
|
+
function utf8BytesEqual(data, start, end, value) {
|
|
155
|
+
const valueLength = value.end - value.start;
|
|
156
|
+
if (end - start !== valueLength) {
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
for (let index = 0; index < valueLength; index += 1) {
|
|
160
|
+
if (data[start + index] !== value.data[value.start + index]) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
function decodeUtf8StringView(value) {
|
|
167
|
+
return textDecoder.decode(value.data.subarray(value.start, value.end));
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=utf8-string-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8-string-view.js","sourceRoot":"","sources":["../../src/utils/utf8-string-view.ts"],"names":[],"mappings":"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"}
|