@webviz/well-log-viewer 2.4.3 → 2.4.5
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/package.json
CHANGED
|
@@ -1,43 +1,42 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
}
|
|
2
|
+
"name": "@webviz/well-log-viewer",
|
|
3
|
+
"version": "2.4.5",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"transpile": "tsc --project ./tsconfig.json",
|
|
12
|
+
"copy-files": "copyfiles --up 1 \"src/**/*.scss\" dist/",
|
|
13
|
+
"build": "git clean -xdff dist && npm run transpile && npm run copy-files",
|
|
14
|
+
"test_perf": "jest _performance",
|
|
15
|
+
"test_correctness": "jest --coverage --testPathIgnorePatterns='_performance'",
|
|
16
|
+
"test": "jest --coverage",
|
|
17
|
+
"test:update": "npm test -- --u",
|
|
18
|
+
"test:watch": "npm test -- --watch",
|
|
19
|
+
"doc": "git clean -xdff docs && typedoc src"
|
|
20
|
+
},
|
|
21
|
+
"author": "Equinor <opensource@equinor.com>",
|
|
22
|
+
"license": "MPL-2.0",
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@emerson-eps/color-tables": "^0.4.92",
|
|
25
|
+
"@equinor/videx-wellog": "^0.11.3",
|
|
26
|
+
"@webviz/wsc-common": "1.2.4",
|
|
27
|
+
"convert-units": "^2.3.4",
|
|
28
|
+
"d3": "^7.8.2"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"@mui/material": "^5.11",
|
|
32
|
+
"react": "^17 || ^18",
|
|
33
|
+
"react-dom": "^17 || ^18"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@reduxjs/toolkit": "^2.3.0",
|
|
37
|
+
"react-redux": "^9.1.2"
|
|
38
|
+
},
|
|
39
|
+
"volta": {
|
|
40
|
+
"node": "20.18.3"
|
|
41
|
+
}
|
|
43
42
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { findIndexByCurveName, findSetAndCurveIndex, getAllWellLogCurves, getAxisIndices, getCurveByName, getCurveFromVidexPlotId, getDiscreteMetaDataByName, getWellLogSetsFromProps, } from "./well-log";
|
|
2
|
-
// @ts-expect-error TS2741 Mock object kept simple for testing purposes
|
|
3
|
-
const MOCK_LOG_SET_1 = {
|
|
4
|
-
curves: [{ name: "Curve1" }, { name: "Curve2" }],
|
|
5
|
-
header: { well: "Well1" },
|
|
6
|
-
metadata_discrete: {
|
|
7
|
-
Curve1: {
|
|
8
|
-
attributes: "Attributes1",
|
|
9
|
-
objects: "Objects1",
|
|
10
|
-
},
|
|
11
|
-
},
|
|
12
|
-
// Data is not needed for any of these tests
|
|
13
|
-
data: [],
|
|
14
|
-
};
|
|
15
|
-
const MOCK_LOG_SET_2 = {
|
|
16
|
-
curves: [{ name: "Curve3" }, { name: "Curve4" }],
|
|
17
|
-
header: { well: "Well1" },
|
|
18
|
-
metadata_discrete: {},
|
|
19
|
-
// Data is not needed for any of these tests
|
|
20
|
-
data: [],
|
|
21
|
-
};
|
|
22
|
-
const MOCK_LOG_SET_3 = {
|
|
23
|
-
curves: [{ name: "C1" }, { name: "C2" }],
|
|
24
|
-
header: { well: "Well1" },
|
|
25
|
-
metadata_discrete: {},
|
|
26
|
-
// Data is not needed for any of these tests
|
|
27
|
-
data: [],
|
|
28
|
-
};
|
|
29
|
-
const MOCK_LOG_FROM_DIFFERENT_WELL = {
|
|
30
|
-
curves: [{ name: "Curve1" }, { name: "Curve1" }],
|
|
31
|
-
header: { well: "Some Other Well" },
|
|
32
|
-
metadata_discrete: {},
|
|
33
|
-
// Data is not needed for any of these tests
|
|
34
|
-
data: [],
|
|
35
|
-
};
|
|
36
|
-
// @ts-expect-error TS2741 Mock object kept simple for testing purposes
|
|
37
|
-
const MOCK_AXES_INFO = {
|
|
38
|
-
primaryAxis: "primary",
|
|
39
|
-
secondaryAxis: "secondary",
|
|
40
|
-
mnemos: {
|
|
41
|
-
primary: ["Curve1", "C1"],
|
|
42
|
-
secondary: ["Curve2"],
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
describe("getAllWellLogCurves", () => {
|
|
46
|
-
it("should return all curves from a single well log set", () => {
|
|
47
|
-
const wellLogSets = [MOCK_LOG_SET_1];
|
|
48
|
-
const result = getAllWellLogCurves(wellLogSets);
|
|
49
|
-
expect(result).toEqual([{ name: "Curve1" }, { name: "Curve2" }]);
|
|
50
|
-
});
|
|
51
|
-
it("should return all curves from multiple well log sets", () => {
|
|
52
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
53
|
-
const result = getAllWellLogCurves(wellLogSets);
|
|
54
|
-
expect(result).toEqual([
|
|
55
|
-
{ name: "Curve1" },
|
|
56
|
-
{ name: "Curve2" },
|
|
57
|
-
{ name: "Curve3" },
|
|
58
|
-
{ name: "Curve4" },
|
|
59
|
-
]);
|
|
60
|
-
});
|
|
61
|
-
it("should handle well log sets with no curves", () => {
|
|
62
|
-
const wellLogSets = [
|
|
63
|
-
Object.assign(Object.assign({}, MOCK_LOG_SET_1), { curves: [] }),
|
|
64
|
-
MOCK_LOG_SET_2,
|
|
65
|
-
];
|
|
66
|
-
const result = getAllWellLogCurves(wellLogSets);
|
|
67
|
-
expect(result).toEqual([{ name: "Curve3" }, { name: "Curve4" }]);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe("findSetAndCurveIndex", () => {
|
|
71
|
-
it("should return the correct indices for an existing curve", () => {
|
|
72
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
73
|
-
const result = findSetAndCurveIndex(wellLogSets, "Curve1");
|
|
74
|
-
expect(result).toEqual({ iSet: 0, iCurve: 0 });
|
|
75
|
-
});
|
|
76
|
-
it("should return -1 indices for a curve that does not exist", () => {
|
|
77
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
78
|
-
const result = findSetAndCurveIndex(wellLogSets, "Curve5");
|
|
79
|
-
expect(result).toEqual({ iSet: -1, iCurve: -1 });
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
describe("findIndexByCurveName", () => {
|
|
83
|
-
it("should return the correct index for an existing curve", () => {
|
|
84
|
-
const curves = MOCK_LOG_SET_1.curves;
|
|
85
|
-
const result = findIndexByCurveName(curves, "Curve1");
|
|
86
|
-
expect(result).toBe(0);
|
|
87
|
-
});
|
|
88
|
-
it("should return -1 for a curve that does not exist", () => {
|
|
89
|
-
const curves = MOCK_LOG_SET_1.curves;
|
|
90
|
-
const result = findIndexByCurveName(curves, "Curve5");
|
|
91
|
-
expect(result).toBe(-1);
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
describe("getCurveByName", () => {
|
|
95
|
-
it("should return the correct curve", () => {
|
|
96
|
-
const wellLogSet = MOCK_LOG_SET_1;
|
|
97
|
-
const result = getCurveByName(wellLogSet, "Curve1");
|
|
98
|
-
expect(result).toEqual({ name: "Curve1" });
|
|
99
|
-
});
|
|
100
|
-
it("should return undefined for a curve that does not exist", () => {
|
|
101
|
-
const wellLogSet = MOCK_LOG_SET_1;
|
|
102
|
-
const result = getCurveByName(wellLogSet, "Curve5");
|
|
103
|
-
expect(result).toBeUndefined();
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe("getDiscreteMetaDataByName", () => {
|
|
107
|
-
it("should return the correct metadata for an existing curve", () => {
|
|
108
|
-
const wellLogSet = MOCK_LOG_SET_1;
|
|
109
|
-
const result = getDiscreteMetaDataByName(wellLogSet, "Curve1");
|
|
110
|
-
expect(result).toEqual({
|
|
111
|
-
attributes: "Attributes1",
|
|
112
|
-
objects: "Objects1",
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
it("should return null for a curve that does not exist", () => {
|
|
116
|
-
const wellLogSet = MOCK_LOG_SET_1;
|
|
117
|
-
const result = getDiscreteMetaDataByName(wellLogSet, "Curve5");
|
|
118
|
-
expect(result).toBeNull();
|
|
119
|
-
});
|
|
120
|
-
it("should return null for a curve that does not have associated metadata", () => {
|
|
121
|
-
const wellLogSet = MOCK_LOG_SET_1;
|
|
122
|
-
const result = getDiscreteMetaDataByName(wellLogSet, "Curve5");
|
|
123
|
-
expect(result).toBeNull();
|
|
124
|
-
});
|
|
125
|
-
it("should return null for a well log set that does not have metadata", () => {
|
|
126
|
-
const wellLogSet = MOCK_LOG_SET_2;
|
|
127
|
-
const result = getDiscreteMetaDataByName(wellLogSet, "Curve3");
|
|
128
|
-
expect(result).toBeNull();
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
describe("getAxisIndices", () => {
|
|
132
|
-
it("should return the correct axis indices", () => {
|
|
133
|
-
const curves = MOCK_LOG_SET_1.curves;
|
|
134
|
-
const result = getAxisIndices(curves, MOCK_AXES_INFO);
|
|
135
|
-
expect(result).toEqual({ primary: 0, secondary: 1 });
|
|
136
|
-
});
|
|
137
|
-
it("should work with a different name mnemonic", () => {
|
|
138
|
-
const curves = MOCK_LOG_SET_3.curves;
|
|
139
|
-
const result = getAxisIndices(curves, MOCK_AXES_INFO);
|
|
140
|
-
expect(result).toEqual({ primary: 0, secondary: -1 });
|
|
141
|
-
});
|
|
142
|
-
it("should return -1 for both axes if they are not found", () => {
|
|
143
|
-
const curvesWithOutAxes = [{ name: "Curr_1" }, { name: "Curr_1" }];
|
|
144
|
-
const result = getAxisIndices(curvesWithOutAxes, MOCK_AXES_INFO);
|
|
145
|
-
expect(result).toEqual({ primary: -1, secondary: -1 });
|
|
146
|
-
});
|
|
147
|
-
it("should return -1 if mnemos are not provided", () => {
|
|
148
|
-
const curves = MOCK_LOG_SET_1.curves;
|
|
149
|
-
// @ts-expect-error TS2345 Intentionally passing a broken object
|
|
150
|
-
const result = getAxisIndices(curves, {});
|
|
151
|
-
expect(result).toEqual({ primary: -1, secondary: -1 });
|
|
152
|
-
});
|
|
153
|
-
it("should return -1 if mnemos for axis dont exist", () => {
|
|
154
|
-
const curves = MOCK_LOG_SET_1.curves;
|
|
155
|
-
// @ts-expect-error TS2741 Kept simple for testing purposes
|
|
156
|
-
const axesInfoWithWrongMnemos = {
|
|
157
|
-
primaryAxis: "foo",
|
|
158
|
-
secondaryAxis: "fee",
|
|
159
|
-
mnemos: {
|
|
160
|
-
bar: ["Curve1", "C1"],
|
|
161
|
-
fum: ["Curve2"],
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
const result = getAxisIndices(curves, axesInfoWithWrongMnemos);
|
|
165
|
-
expect(result).toEqual({ primary: -1, secondary: -1 });
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
describe("getWellLogSetsFromProps", () => {
|
|
169
|
-
it("should return an array for welllog prop", () => {
|
|
170
|
-
// @ts-expect-error TS2739 Prop kept simple for testing purposes
|
|
171
|
-
const propWithSingle = {
|
|
172
|
-
welllog: MOCK_LOG_SET_1,
|
|
173
|
-
};
|
|
174
|
-
const result1 = getWellLogSetsFromProps(propWithSingle);
|
|
175
|
-
expect(result1).toEqual([MOCK_LOG_SET_1]);
|
|
176
|
-
// @ts-expect-error TS2739 Prop kept simple for testing purposes
|
|
177
|
-
const propWithArray = {
|
|
178
|
-
welllog: [MOCK_LOG_SET_1, MOCK_LOG_SET_2],
|
|
179
|
-
};
|
|
180
|
-
const result2 = getWellLogSetsFromProps(propWithArray);
|
|
181
|
-
expect(result2).toEqual([MOCK_LOG_SET_1, MOCK_LOG_SET_2]);
|
|
182
|
-
});
|
|
183
|
-
it("should return an array for wellLogSets prop", () => {
|
|
184
|
-
// @ts-expect-error TS2739 Prop kept simple for testing purposes
|
|
185
|
-
const prop = {
|
|
186
|
-
wellLogSets: [MOCK_LOG_SET_1, MOCK_LOG_SET_2],
|
|
187
|
-
};
|
|
188
|
-
const result = getWellLogSetsFromProps(prop);
|
|
189
|
-
expect(result).toEqual([MOCK_LOG_SET_1, MOCK_LOG_SET_2]);
|
|
190
|
-
});
|
|
191
|
-
it("should prioritize wellLogSets prop over welllog prop", () => {
|
|
192
|
-
// @ts-expect-error TS2739 Prop kept simple for testing purposes
|
|
193
|
-
const prop = {
|
|
194
|
-
welllog: MOCK_LOG_SET_1,
|
|
195
|
-
wellLogSets: [MOCK_LOG_SET_2],
|
|
196
|
-
};
|
|
197
|
-
const result = getWellLogSetsFromProps(prop);
|
|
198
|
-
expect(result).toEqual([MOCK_LOG_SET_2]);
|
|
199
|
-
});
|
|
200
|
-
it("should return an empty array if none of the properties are provided", () => {
|
|
201
|
-
// @ts-expect-error TS2345 Prop kept simple
|
|
202
|
-
const result = getWellLogSetsFromProps({});
|
|
203
|
-
expect(result).toEqual([]);
|
|
204
|
-
});
|
|
205
|
-
it("should warn if logs for different wells are found", () => {
|
|
206
|
-
const warnSpy = jest.spyOn(console, "warn").mockImplementation();
|
|
207
|
-
// @ts-expect-error TS2739 Prop kept simple for testing purposes
|
|
208
|
-
const prop = {
|
|
209
|
-
welllog: [MOCK_LOG_SET_1, MOCK_LOG_FROM_DIFFERENT_WELL],
|
|
210
|
-
};
|
|
211
|
-
getWellLogSetsFromProps(prop);
|
|
212
|
-
expect(warnSpy).toHaveBeenCalled();
|
|
213
|
-
warnSpy.mockRestore();
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
describe("getCurveFromVidexPlotId", () => {
|
|
217
|
-
it("should return the first curve in the second set", () => {
|
|
218
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
219
|
-
const result = getCurveFromVidexPlotId(wellLogSets, "1-0");
|
|
220
|
-
expect(result).toEqual({ name: "Curve3" });
|
|
221
|
-
});
|
|
222
|
-
it("should return undefined if the id gives out-of-bounds indices", () => {
|
|
223
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
224
|
-
const result = getCurveFromVidexPlotId(wellLogSets, "2-0");
|
|
225
|
-
expect(result).toBeUndefined();
|
|
226
|
-
});
|
|
227
|
-
it("should throw if the id is not in the correct format", () => {
|
|
228
|
-
const wellLogSets = [MOCK_LOG_SET_1, MOCK_LOG_SET_2];
|
|
229
|
-
expect(() => getCurveFromVidexPlotId(wellLogSets, "1")).toThrow("Wrong pattern");
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
//# sourceMappingURL=well-log.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"well-log.test.js","sourceRoot":"","sources":["../../src/utils/well-log.test.ts"],"names":[],"mappings":"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"}
|