@milaboratories/pl-model-common 1.46.4 → 1.47.0
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/columns/accessor_traversal.cjs +119 -0
- package/dist/columns/accessor_traversal.cjs.map +1 -0
- package/dist/columns/accessor_traversal.d.ts +52 -0
- package/dist/columns/accessor_traversal.d.ts.map +1 -0
- package/dist/columns/accessor_traversal.js +114 -0
- package/dist/columns/accessor_traversal.js.map +1 -0
- package/dist/columns/column_registry.cjs +40 -0
- package/dist/columns/column_registry.cjs.map +1 -0
- package/dist/columns/column_registry.d.ts +31 -0
- package/dist/columns/column_registry.d.ts.map +1 -0
- package/dist/columns/column_registry.js +40 -0
- package/dist/columns/column_registry.js.map +1 -0
- package/dist/columns/column_selector.cjs +49 -0
- package/dist/columns/column_selector.cjs.map +1 -0
- package/dist/columns/column_selector.d.ts +33 -0
- package/dist/columns/column_selector.d.ts.map +1 -0
- package/dist/columns/column_selector.js +47 -0
- package/dist/columns/column_selector.js.map +1 -0
- package/dist/columns/dedup.cjs +47 -0
- package/dist/columns/dedup.cjs.map +1 -0
- package/dist/columns/dedup.d.ts +27 -0
- package/dist/columns/dedup.d.ts.map +1 -0
- package/dist/columns/dedup.js +47 -0
- package/dist/columns/dedup.js.map +1 -0
- package/dist/columns/index.cjs +18 -0
- package/dist/columns/index.d.ts +8 -0
- package/dist/columns/index.js +6 -0
- package/dist/columns/providers.cjs +62 -0
- package/dist/columns/providers.cjs.map +1 -0
- package/dist/columns/providers.d.ts +39 -0
- package/dist/columns/providers.d.ts.map +1 -0
- package/dist/columns/providers.js +61 -0
- package/dist/columns/providers.js.map +1 -0
- package/dist/columns/types.d.ts +108 -0
- package/dist/columns/types.d.ts.map +1 -0
- package/dist/driver_kit.d.ts +1 -2
- package/dist/driver_kit.d.ts.map +1 -1
- package/dist/drivers/columns/columns_collection_driver.d.ts +124 -0
- package/dist/drivers/columns/columns_collection_driver.d.ts.map +1 -0
- package/dist/drivers/columns/discover_columns_options.cjs +28 -0
- package/dist/drivers/columns/discover_columns_options.cjs.map +1 -0
- package/dist/drivers/columns/discover_columns_options.d.ts +64 -0
- package/dist/drivers/columns/discover_columns_options.d.ts.map +1 -0
- package/dist/drivers/columns/discover_columns_options.js +28 -0
- package/dist/drivers/columns/discover_columns_options.js.map +1 -0
- package/dist/drivers/columns/index.d.ts +3 -0
- package/dist/drivers/index.cjs +32 -7
- package/dist/drivers/index.d.ts +12 -9
- package/dist/drivers/index.js +6 -4
- package/dist/drivers/pframe/driver.d.ts +1 -2
- package/dist/drivers/pframe/driver.d.ts.map +1 -1
- package/dist/drivers/pframe/index.cjs +30 -7
- package/dist/drivers/pframe/index.d.ts +9 -8
- package/dist/drivers/pframe/index.js +5 -4
- package/dist/drivers/pframe/query/index.d.ts +2 -2
- package/dist/drivers/pframe/query/query_common.d.ts +24 -1
- package/dist/drivers/pframe/query/query_common.d.ts.map +1 -1
- package/dist/drivers/pframe/query/query_spec.d.ts +25 -24
- package/dist/drivers/pframe/query/query_spec.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.cjs +18 -8
- package/dist/drivers/pframe/query/utils.cjs.map +1 -1
- package/dist/drivers/pframe/query/utils.d.ts +5 -1
- package/dist/drivers/pframe/query/utils.d.ts.map +1 -1
- package/dist/drivers/pframe/query/utils.js +18 -8
- package/dist/drivers/pframe/query/utils.js.map +1 -1
- package/dist/drivers/pframe/spec/anchored.d.ts +2 -2
- package/dist/drivers/pframe/spec/discovered_column.cjs +31 -15
- package/dist/drivers/pframe/spec/discovered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/discovered_column.d.ts +23 -13
- package/dist/drivers/pframe/spec/discovered_column.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/discovered_column.js +26 -12
- package/dist/drivers/pframe/spec/discovered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.cjs +46 -0
- package/dist/drivers/pframe/spec/filtered_column.cjs.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts +39 -1
- package/dist/drivers/pframe/spec/filtered_column.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/filtered_column.js +41 -1
- package/dist/drivers/pframe/spec/filtered_column.js.map +1 -1
- package/dist/drivers/pframe/spec/ids.cjs +62 -10
- package/dist/drivers/pframe/spec/ids.cjs.map +1 -1
- package/dist/drivers/pframe/spec/ids.d.ts +48 -15
- package/dist/drivers/pframe/spec/ids.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/ids.js +60 -9
- package/dist/drivers/pframe/spec/ids.js.map +1 -1
- package/dist/drivers/pframe/spec/index.cjs +30 -7
- package/dist/drivers/pframe/spec/index.d.ts +6 -5
- package/dist/drivers/pframe/spec/index.js +5 -4
- package/dist/drivers/pframe/spec/native_id.cjs +1 -0
- package/dist/drivers/pframe/spec/native_id.cjs.map +1 -1
- package/dist/drivers/pframe/spec/native_id.js +1 -0
- package/dist/drivers/pframe/spec/native_id.js.map +1 -1
- package/dist/drivers/pframe/spec/overridden.cjs +212 -0
- package/dist/drivers/pframe/spec/overridden.cjs.map +1 -0
- package/dist/drivers/pframe/spec/overridden.d.ts +67 -0
- package/dist/drivers/pframe/spec/overridden.d.ts.map +1 -0
- package/dist/drivers/pframe/spec/overridden.js +202 -0
- package/dist/drivers/pframe/spec/overridden.js.map +1 -0
- package/dist/drivers/pframe/spec/selectors.cjs +1 -0
- package/dist/drivers/pframe/spec/selectors.cjs.map +1 -1
- package/dist/drivers/pframe/spec/selectors.d.ts +3 -0
- package/dist/drivers/pframe/spec/selectors.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/selectors.js +1 -0
- package/dist/drivers/pframe/spec/selectors.js.map +1 -1
- package/dist/drivers/pframe/spec/spec.cjs.map +1 -1
- package/dist/drivers/pframe/spec/spec.d.ts +2 -3
- package/dist/drivers/pframe/spec/spec.d.ts.map +1 -1
- package/dist/drivers/pframe/spec/spec.js.map +1 -1
- package/dist/drivers/pframe/spec_driver.d.ts +2 -2
- package/dist/drivers/pframe/spec_driver.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.cjs +2 -2
- package/dist/drivers/pframe/table_calculate.cjs.map +1 -1
- package/dist/drivers/pframe/table_calculate.d.ts +6 -2
- package/dist/drivers/pframe/table_calculate.d.ts.map +1 -1
- package/dist/drivers/pframe/table_calculate.js +2 -2
- package/dist/drivers/pframe/table_calculate.js.map +1 -1
- package/dist/drivers/pframe/table_common.cjs.map +1 -1
- package/dist/drivers/pframe/table_common.d.ts +11 -4
- package/dist/drivers/pframe/table_common.d.ts.map +1 -1
- package/dist/drivers/pframe/table_common.js.map +1 -1
- package/dist/index.cjs +63 -10
- package/dist/index.d.ts +20 -11
- package/dist/index.js +15 -6
- package/dist/pool/index.cjs +18 -0
- package/dist/pool/index.d.ts +2 -2
- package/dist/pool/index.js +3 -0
- package/dist/pool/spec.cjs +59 -11
- package/dist/pool/spec.cjs.map +1 -1
- package/dist/pool/spec.d.ts +24 -9
- package/dist/pool/spec.d.ts.map +1 -1
- package/dist/pool/spec.js +50 -10
- package/dist/pool/spec.js.map +1 -1
- package/dist/services/index.d.ts +2 -2
- package/dist/services/service_declarations.cjs +22 -0
- package/dist/services/service_declarations.cjs.map +1 -1
- package/dist/services/service_declarations.d.ts +5 -3
- package/dist/services/service_declarations.d.ts.map +1 -1
- package/dist/services/service_declarations.js +22 -0
- package/dist/services/service_declarations.js.map +1 -1
- package/dist/services/service_registry.cjs.map +1 -1
- package/dist/services/service_registry.d.ts +3 -3
- package/dist/services/service_registry.d.ts.map +1 -1
- package/dist/services/service_registry.js.map +1 -1
- package/dist/services/service_types.cjs.map +1 -1
- package/dist/services/service_types.d.ts +25 -9
- package/dist/services/service_types.d.ts.map +1 -1
- package/dist/services/service_types.js.map +1 -1
- package/package.json +2 -1
- package/src/columns/accessor_traversal.ts +139 -0
- package/src/columns/column_registry.ts +41 -0
- package/src/columns/column_selector.ts +100 -0
- package/src/columns/dedup.ts +49 -0
- package/src/columns/index.ts +6 -0
- package/src/columns/providers.ts +74 -0
- package/src/columns/types.ts +116 -0
- package/src/drivers/columns/columns_collection_driver.ts +146 -0
- package/src/drivers/columns/discover_columns_options.ts +91 -0
- package/src/drivers/columns/index.ts +2 -0
- package/src/drivers/index.ts +1 -0
- package/src/drivers/pframe/index.ts +0 -1
- package/src/drivers/pframe/query/query_common.ts +24 -0
- package/src/drivers/pframe/query/query_spec.ts +38 -25
- package/src/drivers/pframe/query/utils.test.ts +6 -6
- package/src/drivers/pframe/query/utils.ts +27 -7
- package/src/drivers/pframe/spec/discovered_column.ts +43 -28
- package/src/drivers/pframe/spec/filtered_column.ts +66 -0
- package/src/drivers/pframe/spec/ids.ts +142 -17
- package/src/drivers/pframe/spec/index.ts +1 -0
- package/src/drivers/pframe/spec/overridden.ts +285 -0
- package/src/drivers/pframe/spec/selectors.ts +3 -0
- package/src/drivers/pframe/spec/spec.ts +7 -3
- package/src/drivers/pframe/spec_driver.ts +3 -3
- package/src/drivers/pframe/table_calculate.ts +13 -3
- package/src/drivers/pframe/table_common.ts +10 -3
- package/src/index.ts +1 -0
- package/src/pool/spec.ts +69 -23
- package/src/services/service_declarations.ts +31 -0
- package/src/services/service_registry.ts +8 -4
- package/src/services/service_types.ts +35 -9
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
const require_spec = require("./spec.cjs");
|
|
2
|
+
const require_filtered_column = require("./filtered_column.cjs");
|
|
3
|
+
const require_discovered_column = require("./discovered_column.cjs");
|
|
4
|
+
const require_overridden = require("./overridden.cjs");
|
|
2
5
|
const require_ids = require("./ids.cjs");
|
|
3
6
|
const require_anchored = require("./anchored.cjs");
|
|
4
|
-
const require_filtered_column = require("./filtered_column.cjs");
|
|
5
7
|
const require_selectors = require("./selectors.cjs");
|
|
6
8
|
const require_native_id = require("./native_id.cjs");
|
|
7
|
-
const require_discovered_column = require("./discovered_column.cjs");
|
|
8
9
|
exports.AnchoredIdDeriver = require_anchored.AnchoredIdDeriver;
|
|
9
10
|
exports.Annotation = require_spec.Annotation;
|
|
10
11
|
exports.AnnotationJson = require_spec.AnnotationJson;
|
|
@@ -13,11 +14,21 @@ exports.DomainJson = require_spec.DomainJson;
|
|
|
13
14
|
exports.PAxisName = require_spec.PAxisName;
|
|
14
15
|
exports.PColumnName = require_spec.PColumnName;
|
|
15
16
|
exports.ValueType = require_spec.ValueType;
|
|
17
|
+
exports.applyAxisFilters = require_filtered_column.applyAxisFilters;
|
|
18
|
+
exports.applySpecOverrides = require_overridden.applySpecOverrides;
|
|
16
19
|
exports.canonicalizeAxisId = require_spec.canonicalizeAxisId;
|
|
17
20
|
exports.canonicalizeAxisWithParents = require_spec.canonicalizeAxisWithParents;
|
|
18
|
-
exports.
|
|
21
|
+
exports.createColumnDiscoveredId = require_discovered_column.createColumnDiscoveredId;
|
|
22
|
+
exports.createColumnDiscoveredKey = require_discovered_column.createColumnDiscoveredKey;
|
|
23
|
+
exports.createColumnFilteredId = require_filtered_column.createColumnFilteredId;
|
|
24
|
+
exports.createColumnFilteredKey = require_filtered_column.createColumnFilteredKey;
|
|
25
|
+
exports.createColumnOverriddenId = require_overridden.createColumnOverriddenId;
|
|
26
|
+
exports.createColumnOverriddenKey = require_overridden.createColumnOverriddenKey;
|
|
19
27
|
exports.deriveNativeId = require_native_id.deriveNativeId;
|
|
20
|
-
exports.
|
|
28
|
+
exports.deriveSpecDelta = require_overridden.deriveSpecDelta;
|
|
29
|
+
exports.distillColumnDiscoveredKey = require_discovered_column.distillColumnDiscoveredKey;
|
|
30
|
+
exports.distillColumnOverriddenKey = require_overridden.distillColumnOverriddenKey;
|
|
31
|
+
exports.extractPObjectId = require_ids.extractPObjectId;
|
|
21
32
|
exports.getArrayFromAxisTree = require_spec.getArrayFromAxisTree;
|
|
22
33
|
exports.getAxesId = require_spec.getAxesId;
|
|
23
34
|
exports.getAxesTree = require_spec.getAxesTree;
|
|
@@ -30,7 +41,12 @@ exports.getSetFromAxisTree = require_spec.getSetFromAxisTree;
|
|
|
30
41
|
exports.getTypeFromPColumnOrAxisSpec = require_spec.getTypeFromPColumnOrAxisSpec;
|
|
31
42
|
exports.isAnchoredPColumnId = require_selectors.isAnchoredPColumnId;
|
|
32
43
|
exports.isAxisId = require_spec.isAxisId;
|
|
33
|
-
exports.
|
|
44
|
+
exports.isColumnDiscoveredId = require_discovered_column.isColumnDiscoveredId;
|
|
45
|
+
exports.isColumnDiscoveredKey = require_discovered_column.isColumnDiscoveredKey;
|
|
46
|
+
exports.isColumnFilteredId = require_filtered_column.isColumnFilteredId;
|
|
47
|
+
exports.isColumnFilteredKey = require_filtered_column.isColumnFilteredKey;
|
|
48
|
+
exports.isColumnOverriddenKey = require_overridden.isColumnOverriddenKey;
|
|
49
|
+
exports.isEmptySpecDelta = require_overridden.isEmptySpecDelta;
|
|
34
50
|
exports.isFilteredPColumn = require_filtered_column.isFilteredPColumn;
|
|
35
51
|
exports.isLabelColumn = require_spec.isLabelColumn;
|
|
36
52
|
exports.isLinkerColumn = require_spec.isLinkerColumn;
|
|
@@ -39,9 +55,12 @@ exports.matchAxis = require_selectors.matchAxis;
|
|
|
39
55
|
exports.matchAxisId = require_spec.matchAxisId;
|
|
40
56
|
exports.matchMultiColumnSelector = require_selectors.matchMultiColumnSelector;
|
|
41
57
|
exports.matchPColumn = require_selectors.matchPColumn;
|
|
58
|
+
exports.mergeSpecOverrides = require_overridden.mergeSpecOverrides;
|
|
42
59
|
exports.multiColumnSelectorsToPredicate = require_selectors.multiColumnSelectorsToPredicate;
|
|
60
|
+
exports.parseColumnDiscoveredId = require_discovered_column.parseColumnDiscoveredId;
|
|
43
61
|
exports.parseColumnId = require_ids.parseColumnId;
|
|
44
|
-
exports.
|
|
62
|
+
exports.parseColumnIdSafely = require_ids.parseColumnIdSafely;
|
|
63
|
+
exports.parseColumnOverriddenId = require_overridden.parseColumnOverriddenId;
|
|
45
64
|
exports.readAnnotation = require_spec.readAnnotation;
|
|
46
65
|
exports.readAnnotationJson = require_spec.readAnnotationJson;
|
|
47
66
|
exports.readAnnotationJsonOrThrow = require_spec.readAnnotationJsonOrThrow;
|
|
@@ -51,7 +70,11 @@ exports.readDomainJsonOrThrow = require_spec.readDomainJsonOrThrow;
|
|
|
51
70
|
exports.readMetadata = require_spec.readMetadata;
|
|
52
71
|
exports.readMetadataJson = require_spec.readMetadataJson;
|
|
53
72
|
exports.readMetadataJsonOrThrow = require_spec.readMetadataJsonOrThrow;
|
|
73
|
+
exports.reconstructSpecFromId = require_ids.reconstructSpecFromId;
|
|
54
74
|
exports.resolveAnchors = require_anchored.resolveAnchors;
|
|
55
75
|
exports.resolveAnnotationParents = require_spec.resolveAnnotationParents;
|
|
76
|
+
exports.stringifyColumnDiscoveredId = require_discovered_column.stringifyColumnDiscoveredId;
|
|
77
|
+
exports.stringifyColumnFilteredId = require_filtered_column.stringifyColumnFilteredId;
|
|
56
78
|
exports.stringifyColumnId = require_ids.stringifyColumnId;
|
|
57
|
-
exports.
|
|
79
|
+
exports.stringifyColumnOverriddenId = require_overridden.stringifyColumnOverriddenId;
|
|
80
|
+
exports.unwrapOverrides = require_overridden.unwrapOverrides;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { ColumnDiscoveredId, ColumnDiscoveredKey, createColumnDiscoveredId, createColumnDiscoveredKey, distillColumnDiscoveredKey, isColumnDiscoveredId, isColumnDiscoveredKey, parseColumnDiscoveredId, stringifyColumnDiscoveredId } from "./discovered_column.js";
|
|
2
|
+
import { Annotation, AnnotationDataStatus, AnnotationJson, AxesId, AxesSpec, AxisId, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, ColumnValueType, Domain, DomainJson, Metadata, MetadataJson, PAxisName, PColumn, PColumnIdAndSpec, PColumnName, PColumnSpec, PColumnSpecId, PDataColumnSpec, PUniversalColumnSpec, Trace, TraceEntry, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./spec.js";
|
|
3
|
+
import { ColumnOverriddenId, ColumnOverriddenKey, SpecOverrides, applySpecOverrides, createColumnOverriddenId, createColumnOverriddenKey, deriveSpecDelta, distillColumnOverriddenKey, isColumnOverriddenKey, isEmptySpecDelta, mergeSpecOverrides, parseColumnOverriddenId, stringifyColumnOverriddenId, unwrapOverrides } from "./overridden.js";
|
|
4
|
+
import { AxisPatches, ColumnUniversalId, ColumnUniversalKey, SUniversalPColumnId, UniversalPColumnId, extractPObjectId, parseColumnId, parseColumnIdSafely, reconstructSpecFromId, stringifyColumnId } from "./ids.js";
|
|
5
|
+
import { AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, ColumnFilteredId, ColumnFilteredKey, FilteredPColumn, FilteredPColumnId, applyAxisFilters, createColumnFilteredId, createColumnFilteredKey, isColumnFilteredId, isColumnFilteredKey, isFilteredPColumn, stringifyColumnFilteredId } from "./filtered_column.js";
|
|
5
6
|
import { AnchoredIdDeriver, ResolveAnchorsOptions, resolveAnchors } from "./anchored.js";
|
|
6
7
|
import { NativePObjectId, deriveNativeId } from "./native_id.js";
|
|
7
8
|
import { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredPColumnId, AnchoredPColumnSelector, AxisQualification, LegacyAxisSelector, PColumnSelector, SingleAxisSelector, isAnchoredPColumnId, legacyColumnSelectorsToPredicate, matchAxis, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate } from "./selectors.js";
|
|
8
|
-
export { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationDataStatus, AnnotationJson, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType,
|
|
9
|
+
export { AAxisSelector, ADomain, AnchorAxisIdOrRefBasic, AnchorAxisRef, AnchorAxisRefByIdx, AnchorAxisRefByMatcher, AnchorAxisRefByName, AnchorDomainRef, AnchoredColumnMatchStrategy, AnchoredIdDeriver, AnchoredPColumnId, AnchoredPColumnSelector, Annotation, AnnotationDataStatus, AnnotationJson, AxesId, AxesSpec, AxisFilter, AxisFilterByIdx, AxisFilterByName, AxisFilterValue, AxisId, AxisPatches, AxisQualification, AxisSpec, AxisSpecNormalized, AxisTree, AxisValueType, ColumnDiscoveredId, ColumnDiscoveredKey, ColumnFilteredId, ColumnFilteredKey, ColumnOverriddenId, ColumnOverriddenKey, ColumnUniversalId, ColumnUniversalKey, ColumnValueType, Domain, DomainJson, FilteredPColumn, FilteredPColumnId, LegacyAxisSelector, Metadata, MetadataJson, NativePObjectId, PAxisName, PColumn, PColumnIdAndSpec, PColumnName, PColumnSelector, PColumnSpec, PColumnSpecId, PDataColumnSpec, PUniversalColumnSpec, ResolveAnchorsOptions, SUniversalPColumnId, SingleAxisSelector, SpecOverrides, Trace, TraceEntry, UniversalPColumnId, ValueType, applyAxisFilters, applySpecOverrides, canonicalizeAxisId, canonicalizeAxisWithParents, createColumnDiscoveredId, createColumnDiscoveredKey, createColumnFilteredId, createColumnFilteredKey, createColumnOverriddenId, createColumnOverriddenKey, deriveNativeId, deriveSpecDelta, distillColumnDiscoveredKey, distillColumnOverriddenKey, extractPObjectId, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isColumnDiscoveredId, isColumnDiscoveredKey, isColumnFilteredId, isColumnFilteredKey, isColumnOverriddenKey, isEmptySpecDelta, isFilteredPColumn, isLabelColumn, isLinkerColumn, legacyColumnSelectorsToPredicate, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, mergeSpecOverrides, multiColumnSelectorsToPredicate, parseColumnDiscoveredId, parseColumnId, parseColumnIdSafely, parseColumnOverriddenId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, reconstructSpecFromId, resolveAnchors, resolveAnnotationParents, stringifyColumnDiscoveredId, stringifyColumnFilteredId, stringifyColumnId, stringifyColumnOverriddenId, unwrapOverrides };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAxisId, isLabelColumn, isLinkerColumn, matchAxisId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnnotationParents } from "./spec.js";
|
|
2
|
-
import {
|
|
2
|
+
import { applyAxisFilters, createColumnFilteredId, createColumnFilteredKey, isColumnFilteredId, isColumnFilteredKey, isFilteredPColumn, stringifyColumnFilteredId } from "./filtered_column.js";
|
|
3
|
+
import { createColumnDiscoveredId, createColumnDiscoveredKey, distillColumnDiscoveredKey, isColumnDiscoveredId, isColumnDiscoveredKey, parseColumnDiscoveredId, stringifyColumnDiscoveredId } from "./discovered_column.js";
|
|
4
|
+
import { applySpecOverrides, createColumnOverriddenId, createColumnOverriddenKey, deriveSpecDelta, distillColumnOverriddenKey, isColumnOverriddenKey, isEmptySpecDelta, mergeSpecOverrides, parseColumnOverriddenId, stringifyColumnOverriddenId, unwrapOverrides } from "./overridden.js";
|
|
5
|
+
import { extractPObjectId, parseColumnId, parseColumnIdSafely, reconstructSpecFromId, stringifyColumnId } from "./ids.js";
|
|
3
6
|
import { AnchoredIdDeriver, resolveAnchors } from "./anchored.js";
|
|
4
|
-
import { isFilteredPColumn } from "./filtered_column.js";
|
|
5
7
|
import { isAnchoredPColumnId, legacyColumnSelectorsToPredicate, matchAxis, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate } from "./selectors.js";
|
|
6
8
|
import { deriveNativeId } from "./native_id.js";
|
|
7
|
-
|
|
8
|
-
export { AnchoredIdDeriver, Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, canonicalizeAxisId, canonicalizeAxisWithParents, createDiscoveredPColumnId, deriveNativeId, distillDiscoveredPColumn, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isDiscoveredPColumn, isFilteredPColumn, isLabelColumn, isLinkerColumn, legacyColumnSelectorsToPredicate, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, multiColumnSelectorsToPredicate, parseColumnId, parseDiscoveredPColumnId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, resolveAnchors, resolveAnnotationParents, stringifyColumnId, stringifyDiscoveredPColumnId };
|
|
9
|
+
export { AnchoredIdDeriver, Annotation, AnnotationJson, Domain, DomainJson, PAxisName, PColumnName, ValueType, applyAxisFilters, applySpecOverrides, canonicalizeAxisId, canonicalizeAxisWithParents, createColumnDiscoveredId, createColumnDiscoveredKey, createColumnFilteredId, createColumnFilteredKey, createColumnOverriddenId, createColumnOverriddenKey, deriveNativeId, deriveSpecDelta, distillColumnDiscoveredKey, distillColumnOverriddenKey, extractPObjectId, getArrayFromAxisTree, getAxesId, getAxesTree, getAxisId, getColumnIdAndSpec, getDenormalizedAxesList, getNormalizedAxesList, getPColumnSpecId, getSetFromAxisTree, getTypeFromPColumnOrAxisSpec, isAnchoredPColumnId, isAxisId, isColumnDiscoveredId, isColumnDiscoveredKey, isColumnFilteredId, isColumnFilteredKey, isColumnOverriddenKey, isEmptySpecDelta, isFilteredPColumn, isLabelColumn, isLinkerColumn, legacyColumnSelectorsToPredicate, matchAxis, matchAxisId, matchMultiColumnSelector, matchPColumn, mergeSpecOverrides, multiColumnSelectorsToPredicate, parseColumnDiscoveredId, parseColumnId, parseColumnIdSafely, parseColumnOverriddenId, readAnnotation, readAnnotationJson, readAnnotationJsonOrThrow, readDomain, readDomainJson, readDomainJsonOrThrow, readMetadata, readMetadataJson, readMetadataJsonOrThrow, reconstructSpecFromId, resolveAnchors, resolveAnnotationParents, stringifyColumnDiscoveredId, stringifyColumnFilteredId, stringifyColumnId, stringifyColumnOverriddenId, unwrapOverrides };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
|
|
2
2
|
const require_spec = require("./spec.cjs");
|
|
3
3
|
const require_spec$1 = require("../../../pool/spec.cjs");
|
|
4
|
+
require("../../../pool/index.cjs");
|
|
4
5
|
let canonicalize = require("canonicalize");
|
|
5
6
|
canonicalize = require_runtime.__toESM(canonicalize, 1);
|
|
6
7
|
//#region src/drivers/pframe/spec/native_id.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native_id.cjs","names":["isPColumnSpec","getAxesId"],"sources":["../../../../src/drivers/pframe/spec/native_id.ts"],"sourcesContent":["import type { Branded } from \"../../../branding\";\nimport { isPColumnSpec, type PObjectSpec } from \"../../../pool\";\nimport { getAxesId } from \"./spec\";\nimport canonicalize from \"canonicalize\";\nexport type NativePObjectId = Branded<string, \"NativePObjectId\">;\n\nexport function deriveNativeId(spec: PObjectSpec): NativePObjectId {\n const result: Record<string, unknown> = {\n kind: spec.kind,\n name: spec.name,\n };\n if (spec.domain !== undefined) result.domain = spec.domain;\n if (spec.contextDomain !== undefined) result.contextDomain = spec.contextDomain;\n if (isPColumnSpec(spec)) result.axesSpec = getAxesId(spec.axesSpec);\n return canonicalize(result) as NativePObjectId;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"native_id.cjs","names":["isPColumnSpec","getAxesId"],"sources":["../../../../src/drivers/pframe/spec/native_id.ts"],"sourcesContent":["import type { Branded } from \"../../../branding\";\nimport { isPColumnSpec, type PObjectSpec } from \"../../../pool\";\nimport { getAxesId } from \"./spec\";\nimport canonicalize from \"canonicalize\";\nexport type NativePObjectId = Branded<string, \"NativePObjectId\">;\n\nexport function deriveNativeId(spec: PObjectSpec): NativePObjectId {\n const result: Record<string, unknown> = {\n kind: spec.kind,\n name: spec.name,\n };\n if (spec.domain !== undefined) result.domain = spec.domain;\n if (spec.contextDomain !== undefined) result.contextDomain = spec.contextDomain;\n if (isPColumnSpec(spec)) result.axesSpec = getAxesId(spec.axesSpec);\n return canonicalize(result) as NativePObjectId;\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,eAAe,MAAoC;CACjE,MAAM,SAAkC;EACtC,MAAM,KAAK;EACX,MAAM,KAAK;CACb;CACA,IAAI,KAAK,WAAW,KAAA,GAAW,OAAO,SAAS,KAAK;CACpD,IAAI,KAAK,kBAAkB,KAAA,GAAW,OAAO,gBAAgB,KAAK;CAClE,IAAIA,eAAAA,cAAc,IAAI,GAAG,OAAO,WAAWC,aAAAA,UAAU,KAAK,QAAQ;CAClE,QAAA,GAAA,aAAA,QAAA,CAAoB,MAAM;AAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native_id.js","names":[],"sources":["../../../../src/drivers/pframe/spec/native_id.ts"],"sourcesContent":["import type { Branded } from \"../../../branding\";\nimport { isPColumnSpec, type PObjectSpec } from \"../../../pool\";\nimport { getAxesId } from \"./spec\";\nimport canonicalize from \"canonicalize\";\nexport type NativePObjectId = Branded<string, \"NativePObjectId\">;\n\nexport function deriveNativeId(spec: PObjectSpec): NativePObjectId {\n const result: Record<string, unknown> = {\n kind: spec.kind,\n name: spec.name,\n };\n if (spec.domain !== undefined) result.domain = spec.domain;\n if (spec.contextDomain !== undefined) result.contextDomain = spec.contextDomain;\n if (isPColumnSpec(spec)) result.axesSpec = getAxesId(spec.axesSpec);\n return canonicalize(result) as NativePObjectId;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"native_id.js","names":[],"sources":["../../../../src/drivers/pframe/spec/native_id.ts"],"sourcesContent":["import type { Branded } from \"../../../branding\";\nimport { isPColumnSpec, type PObjectSpec } from \"../../../pool\";\nimport { getAxesId } from \"./spec\";\nimport canonicalize from \"canonicalize\";\nexport type NativePObjectId = Branded<string, \"NativePObjectId\">;\n\nexport function deriveNativeId(spec: PObjectSpec): NativePObjectId {\n const result: Record<string, unknown> = {\n kind: spec.kind,\n name: spec.name,\n };\n if (spec.domain !== undefined) result.domain = spec.domain;\n if (spec.contextDomain !== undefined) result.contextDomain = spec.contextDomain;\n if (isPColumnSpec(spec)) result.axesSpec = getAxesId(spec.axesSpec);\n return canonicalize(result) as NativePObjectId;\n}\n"],"mappings":";;;;;AAMA,SAAgB,eAAe,MAAoC;CACjE,MAAM,SAAkC;EACtC,MAAM,KAAK;EACX,MAAM,KAAK;CACb;CACA,IAAI,KAAK,WAAW,KAAA,GAAW,OAAO,SAAS,KAAK;CACpD,IAAI,KAAK,kBAAkB,KAAA,GAAW,OAAO,gBAAgB,KAAK;CAClE,IAAI,cAAc,IAAI,GAAG,OAAO,WAAW,UAAU,KAAK,QAAQ;CAClE,OAAO,aAAa,MAAM;AAC5B"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
const require_json = require("../../../json.cjs");
|
|
2
|
+
const require_ids = require("./ids.cjs");
|
|
3
|
+
let _milaboratories_helpers = require("@milaboratories/helpers");
|
|
4
|
+
let es_toolkit = require("es-toolkit");
|
|
5
|
+
//#region src/drivers/pframe/spec/overridden.ts
|
|
6
|
+
function isColumnOverriddenKey(obj) {
|
|
7
|
+
return typeof obj === "object" && obj !== null && "__isOverridden" in obj;
|
|
8
|
+
}
|
|
9
|
+
function distillColumnOverriddenKey(props) {
|
|
10
|
+
return {
|
|
11
|
+
__isOverridden: true,
|
|
12
|
+
source: props.source,
|
|
13
|
+
specOverrides: props.specOverrides
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function createColumnOverriddenId(props) {
|
|
17
|
+
return stringifyColumnOverriddenId(createColumnOverriddenKey(props));
|
|
18
|
+
}
|
|
19
|
+
function createColumnOverriddenKey(props) {
|
|
20
|
+
const { source, specOverrides } = props;
|
|
21
|
+
const unwrapped = unwrapOverrides(source);
|
|
22
|
+
return {
|
|
23
|
+
__isOverridden: true,
|
|
24
|
+
source: unwrapped ? unwrapped.source : source,
|
|
25
|
+
specOverrides: unwrapped ? mergeSpecOverrides(unwrapped.specOverrides, specOverrides) : specOverrides
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function parseColumnOverriddenId(id) {
|
|
29
|
+
try {
|
|
30
|
+
const parsed = JSON.parse(id);
|
|
31
|
+
return isColumnOverriddenKey(parsed) ? parsed : (0, _milaboratories_helpers.throwError)("Parsed object is not a valid OverriddenPColumn");
|
|
32
|
+
} catch {
|
|
33
|
+
throw new Error("Invalid ColumnOverriddenId: not a valid JSON or does not conform to OverriddenPColumn structure");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function stringifyColumnOverriddenId(id) {
|
|
37
|
+
return require_json.canonicalizeJson(distillColumnOverriddenKey(id));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Peel one override-wrap layer.
|
|
41
|
+
*
|
|
42
|
+
* Invariant: `{source, specOverrides}` can only appear at the top level —
|
|
43
|
+
* the inner `source` is never itself an override-wrap. Anything else throws.
|
|
44
|
+
*/
|
|
45
|
+
function unwrapOverrides(id) {
|
|
46
|
+
const parsed = require_ids.parseColumnIdSafely(id);
|
|
47
|
+
if (parsed === void 0 || !isColumnOverriddenKey(parsed)) return void 0;
|
|
48
|
+
const inner = require_ids.parseColumnIdSafely(parsed.source);
|
|
49
|
+
if (inner !== void 0 && isColumnOverriddenKey(inner)) throw new Error("nested override-wrap detected — invariant broken");
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Diff two specs into a {@link SpecOverrides} patch that, when applied on top
|
|
54
|
+
* of `base`, reconstructs `next`.
|
|
55
|
+
*
|
|
56
|
+
* - For top-level `annotations` / `domain` / `contextDomain`: include keys
|
|
57
|
+
* whose value in `next` differs from `base` (or is missing in `base`).
|
|
58
|
+
* Keys present in `base` but missing in `next` are not emitted — overrides
|
|
59
|
+
* merge, they cannot delete.
|
|
60
|
+
* - For `axesSpec`: matched by **positional index**. Each `next[i]` is diffed
|
|
61
|
+
* against `base[i]`; only changed fields are emitted as a patch under key
|
|
62
|
+
* `i`. Indices past `base.length` carry the full new axis (append).
|
|
63
|
+
*/
|
|
64
|
+
function deriveSpecDelta(base, next) {
|
|
65
|
+
const annotations = recordDelta(base.annotations, next.annotations);
|
|
66
|
+
const domain = recordDelta(base.domain, next.domain);
|
|
67
|
+
const contextDomain = recordDelta(base.contextDomain, next.contextDomain);
|
|
68
|
+
const axesSpec = deriveAxesDelta(base.axesSpec, next.axesSpec);
|
|
69
|
+
return {
|
|
70
|
+
...axesSpec && { axesSpec },
|
|
71
|
+
...annotations && { annotations },
|
|
72
|
+
...domain && { domain },
|
|
73
|
+
...contextDomain && { contextDomain }
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function isEmptySpecDelta(delta) {
|
|
77
|
+
return (!delta.annotations || Object.keys(delta.annotations).length === 0) && (!delta.domain || Object.keys(delta.domain).length === 0) && (!delta.contextDomain || Object.keys(delta.contextDomain).length === 0) && (!delta.axesSpec || Object.keys(delta.axesSpec).length === 0);
|
|
78
|
+
}
|
|
79
|
+
function deriveAxesDelta(base, next) {
|
|
80
|
+
const out = {};
|
|
81
|
+
let any = false;
|
|
82
|
+
for (let i = 0; i < next.length; i++) {
|
|
83
|
+
const a = next[i];
|
|
84
|
+
const b = base[i];
|
|
85
|
+
if (b === void 0) {
|
|
86
|
+
out[i] = a;
|
|
87
|
+
any = true;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const nameChanged = a.name !== b.name;
|
|
91
|
+
const typeChanged = a.type !== b.type;
|
|
92
|
+
const annotations = recordDelta(b.annotations, a.annotations);
|
|
93
|
+
const domain = recordDelta(b.domain, a.domain);
|
|
94
|
+
const contextDomain = recordDelta(b.contextDomain, a.contextDomain);
|
|
95
|
+
if (!nameChanged && !typeChanged && !annotations && !domain && !contextDomain) continue;
|
|
96
|
+
out[i] = {
|
|
97
|
+
...nameChanged && { name: a.name },
|
|
98
|
+
...typeChanged && { type: a.type },
|
|
99
|
+
...annotations && { annotations },
|
|
100
|
+
...domain && { domain },
|
|
101
|
+
...contextDomain && { contextDomain }
|
|
102
|
+
};
|
|
103
|
+
any = true;
|
|
104
|
+
}
|
|
105
|
+
return any ? out : void 0;
|
|
106
|
+
}
|
|
107
|
+
function recordDelta(base, next) {
|
|
108
|
+
if (!next) return void 0;
|
|
109
|
+
let any = false;
|
|
110
|
+
const diff = {};
|
|
111
|
+
for (const [k, v] of Object.entries(next)) if (!base || base[k] !== v) {
|
|
112
|
+
diff[k] = v;
|
|
113
|
+
any = true;
|
|
114
|
+
}
|
|
115
|
+
return any ? diff : void 0;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Apply `specOverrides` from a rich id (`SUniversalPColumnId`) on top of a
|
|
119
|
+
* resolved {@link PColumnSpec}. Returns `base` unchanged when the id carries
|
|
120
|
+
* no overrides.
|
|
121
|
+
*/
|
|
122
|
+
function applySpecOverrides(base, idOrOverride) {
|
|
123
|
+
if ((0, es_toolkit.isNil)(idOrOverride)) return base;
|
|
124
|
+
const overrides = (0, es_toolkit.isString)(idOrOverride) ? unwrapOverrides(idOrOverride)?.specOverrides : idOrOverride;
|
|
125
|
+
if ((0, es_toolkit.isNil)(overrides)) return base;
|
|
126
|
+
const result = { ...base };
|
|
127
|
+
if (overrides.annotations) result.annotations = mergeRecord(base.annotations, overrides.annotations);
|
|
128
|
+
if (overrides.domain) result.domain = mergeRecord(base.domain, overrides.domain);
|
|
129
|
+
if (overrides.contextDomain) result.contextDomain = mergeRecord(base.contextDomain, overrides.contextDomain);
|
|
130
|
+
if (overrides.axesSpec) result.axesSpec = applyAxesPatches(base.axesSpec, overrides.axesSpec);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Compose two override patches: applying `mergeSpecOverrides(prior, next)` on
|
|
135
|
+
* top of a base spec produces the same result as applying `prior` then `next`.
|
|
136
|
+
*/
|
|
137
|
+
function mergeSpecOverrides(prior, next) {
|
|
138
|
+
const result = {};
|
|
139
|
+
const axesSpec = mergeAxesPatches(prior.axesSpec, next.axesSpec);
|
|
140
|
+
if (axesSpec !== void 0) result.axesSpec = axesSpec;
|
|
141
|
+
const annotations = mergeRecord(prior.annotations, next.annotations);
|
|
142
|
+
if (annotations !== void 0) result.annotations = annotations;
|
|
143
|
+
const domain = mergeRecord(prior.domain, next.domain);
|
|
144
|
+
if (domain !== void 0) result.domain = domain;
|
|
145
|
+
const contextDomain = mergeRecord(prior.contextDomain, next.contextDomain);
|
|
146
|
+
if (contextDomain !== void 0) result.contextDomain = contextDomain;
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Apply positional `patches` onto `base.axesSpec`. Patches deep-merge
|
|
151
|
+
* `annotations` / `domain` / `contextDomain` and shallow-override `name` /
|
|
152
|
+
* `type` at their slot. Indices `>= base.length` append new axes; intermediate
|
|
153
|
+
* gaps (if any) are filled with the patch itself, so callers should not leave
|
|
154
|
+
* holes between base.length and the highest patched index.
|
|
155
|
+
*/
|
|
156
|
+
function applyAxesPatches(base, patches) {
|
|
157
|
+
const result = base.slice();
|
|
158
|
+
for (const [k, p] of Object.entries(patches)) {
|
|
159
|
+
const i = Number(k);
|
|
160
|
+
const existing = result[i];
|
|
161
|
+
result[i] = existing === void 0 ? p : mergeAxisPatch(existing, p);
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Compose two positional patch maps: `mergeAxesPatches(prior, next)` applied to
|
|
167
|
+
* a base spec must equal applying `prior` then `next`. Patches sharing an
|
|
168
|
+
* index deep-merge field-by-field.
|
|
169
|
+
*/
|
|
170
|
+
function mergeAxesPatches(prior, next) {
|
|
171
|
+
if (!prior || Object.keys(prior).length === 0) return next;
|
|
172
|
+
if (!next || Object.keys(next).length === 0) return prior;
|
|
173
|
+
const result = { ...prior };
|
|
174
|
+
for (const [k, p] of Object.entries(next)) {
|
|
175
|
+
const i = Number(k);
|
|
176
|
+
const existing = result[i];
|
|
177
|
+
result[i] = existing === void 0 ? p : mergeAxisPatch(existing, p);
|
|
178
|
+
}
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
function mergeAxisPatch(axis, patch) {
|
|
182
|
+
const result = {
|
|
183
|
+
...axis,
|
|
184
|
+
...patch
|
|
185
|
+
};
|
|
186
|
+
if (patch.annotations) result.annotations = mergeRecord(axis.annotations, patch.annotations);
|
|
187
|
+
if (patch.domain) result.domain = mergeRecord(axis.domain, patch.domain);
|
|
188
|
+
if (patch.contextDomain) result.contextDomain = mergeRecord(axis.contextDomain, patch.contextDomain);
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
function mergeRecord(a, b) {
|
|
192
|
+
if (!b) return a;
|
|
193
|
+
if (!a) return b;
|
|
194
|
+
return {
|
|
195
|
+
...a,
|
|
196
|
+
...b
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
//#endregion
|
|
200
|
+
exports.applySpecOverrides = applySpecOverrides;
|
|
201
|
+
exports.createColumnOverriddenId = createColumnOverriddenId;
|
|
202
|
+
exports.createColumnOverriddenKey = createColumnOverriddenKey;
|
|
203
|
+
exports.deriveSpecDelta = deriveSpecDelta;
|
|
204
|
+
exports.distillColumnOverriddenKey = distillColumnOverriddenKey;
|
|
205
|
+
exports.isColumnOverriddenKey = isColumnOverriddenKey;
|
|
206
|
+
exports.isEmptySpecDelta = isEmptySpecDelta;
|
|
207
|
+
exports.mergeSpecOverrides = mergeSpecOverrides;
|
|
208
|
+
exports.parseColumnOverriddenId = parseColumnOverriddenId;
|
|
209
|
+
exports.stringifyColumnOverriddenId = stringifyColumnOverriddenId;
|
|
210
|
+
exports.unwrapOverrides = unwrapOverrides;
|
|
211
|
+
|
|
212
|
+
//# sourceMappingURL=overridden.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overridden.cjs","names":["canonicalizeJson","parseColumnIdSafely"],"sources":["../../../../src/drivers/pframe/spec/overridden.ts"],"sourcesContent":["import { type Branded, throwError, type Mutable, Nil } from \"@milaboratories/helpers\";\nimport { type CanonicalizedJson, canonicalizeJson } from \"../../../json\";\nimport { AxisPatches, type ColumnUniversalId, parseColumnIdSafely } from \"./ids\";\nimport type { AxisSpec, PColumnSpec } from \"./spec\";\nimport { isNil, isString } from \"es-toolkit\";\n\nexport type SpecOverrides = Pick<PColumnSpec, \"domain\" | \"contextDomain\" | \"annotations\"> & {\n axesSpec?: AxisPatches;\n};\n\n/**\n * `source` can reference a leaf or a Filtered/Discovered id, but never another\n * Overridden id — there is no `Overridden<Overridden<...>>`. Repeated overrides\n * merge at the outer wrapper via {@link mergeSpecOverrides}.\n */\nexport interface ColumnOverriddenKey {\n __isOverridden: true;\n source: Exclude<ColumnUniversalId, ColumnOverriddenId>;\n specOverrides: SpecOverrides;\n}\n\nexport type ColumnOverriddenId = Branded<\n CanonicalizedJson<ColumnOverriddenKey>,\n \"ColumnOverriddenId\"\n>;\n\nexport function isColumnOverriddenKey(obj: unknown): obj is ColumnOverriddenKey {\n return typeof obj === \"object\" && obj !== null && \"__isOverridden\" in obj;\n}\n\nexport function distillColumnOverriddenKey(props: ColumnOverriddenKey): ColumnOverriddenKey {\n return {\n __isOverridden: true,\n source: props.source,\n specOverrides: props.specOverrides,\n };\n}\n\nexport function createColumnOverriddenId(props: {\n source: ColumnUniversalId;\n specOverrides: SpecOverrides;\n}): ColumnOverriddenId {\n return stringifyColumnOverriddenId(createColumnOverriddenKey(props));\n}\n\nexport function createColumnOverriddenKey(props: {\n source: ColumnUniversalId;\n specOverrides: SpecOverrides;\n}): ColumnOverriddenKey {\n const { source, specOverrides } = props;\n const unwrapped = unwrapOverrides(source);\n const baseSource = unwrapped\n ? unwrapped.source\n : (source as Exclude<ColumnUniversalId, ColumnOverriddenId>);\n const mergedOverrides = unwrapped\n ? mergeSpecOverrides(unwrapped.specOverrides, specOverrides)\n : specOverrides;\n\n return {\n __isOverridden: true,\n source: baseSource,\n specOverrides: mergedOverrides,\n };\n}\n\nexport function parseColumnOverriddenId(id: ColumnUniversalId): ColumnOverriddenKey {\n try {\n const parsed = JSON.parse(id);\n return isColumnOverriddenKey(parsed)\n ? parsed\n : throwError(\"Parsed object is not a valid OverriddenPColumn\");\n } catch {\n throw new Error(\n \"Invalid ColumnOverriddenId: not a valid JSON or does not conform to OverriddenPColumn structure\",\n );\n }\n}\n\nexport function stringifyColumnOverriddenId(id: ColumnOverriddenKey): ColumnOverriddenId {\n return canonicalizeJson<ColumnOverriddenKey>(\n distillColumnOverriddenKey(id),\n ) as ColumnOverriddenId;\n}\n\n/**\n * Peel one override-wrap layer.\n *\n * Invariant: `{source, specOverrides}` can only appear at the top level —\n * the inner `source` is never itself an override-wrap. Anything else throws.\n */\nexport function unwrapOverrides(id: ColumnUniversalId): ColumnOverriddenKey | undefined {\n const parsed = parseColumnIdSafely(id);\n if (parsed === undefined || !isColumnOverriddenKey(parsed)) return undefined;\n const inner = parseColumnIdSafely(parsed.source);\n if (inner !== undefined && isColumnOverriddenKey(inner)) {\n throw new Error(\"nested override-wrap detected — invariant broken\");\n }\n return parsed;\n}\n\n/**\n * Diff two specs into a {@link SpecOverrides} patch that, when applied on top\n * of `base`, reconstructs `next`.\n *\n * - For top-level `annotations` / `domain` / `contextDomain`: include keys\n * whose value in `next` differs from `base` (or is missing in `base`).\n * Keys present in `base` but missing in `next` are not emitted — overrides\n * merge, they cannot delete.\n * - For `axesSpec`: matched by **positional index**. Each `next[i]` is diffed\n * against `base[i]`; only changed fields are emitted as a patch under key\n * `i`. Indices past `base.length` carry the full new axis (append).\n */\nexport function deriveSpecDelta(base: PColumnSpec, next: PColumnSpec): SpecOverrides {\n const annotations = recordDelta(base.annotations, next.annotations);\n const domain = recordDelta(base.domain, next.domain);\n const contextDomain = recordDelta(base.contextDomain, next.contextDomain);\n const axesSpec = deriveAxesDelta(base.axesSpec, next.axesSpec);\n return {\n ...(axesSpec && { axesSpec }),\n ...(annotations && { annotations }),\n ...(domain && { domain }),\n ...(contextDomain && { contextDomain }),\n };\n}\n\nexport function isEmptySpecDelta(delta: SpecOverrides): boolean {\n return (\n (!delta.annotations || Object.keys(delta.annotations).length === 0) &&\n (!delta.domain || Object.keys(delta.domain).length === 0) &&\n (!delta.contextDomain || Object.keys(delta.contextDomain).length === 0) &&\n (!delta.axesSpec || Object.keys(delta.axesSpec).length === 0)\n );\n}\n\nfunction deriveAxesDelta(\n base: readonly AxisSpec[],\n next: readonly AxisSpec[],\n): AxisPatches | undefined {\n const out: AxisPatches = {};\n let any = false;\n for (let i = 0; i < next.length; i++) {\n const a = next[i];\n const b = base[i];\n if (b === undefined) {\n out[i] = a;\n any = true;\n continue;\n }\n const nameChanged = a.name !== b.name;\n const typeChanged = a.type !== b.type;\n const annotations = recordDelta(b.annotations, a.annotations);\n const domain = recordDelta(b.domain, a.domain);\n const contextDomain = recordDelta(b.contextDomain, a.contextDomain);\n if (!nameChanged && !typeChanged && !annotations && !domain && !contextDomain) continue;\n out[i] = {\n ...(nameChanged && { name: a.name }),\n ...(typeChanged && { type: a.type }),\n ...(annotations && { annotations }),\n ...(domain && { domain }),\n ...(contextDomain && { contextDomain }),\n };\n any = true;\n }\n return any ? out : undefined;\n}\n\nfunction recordDelta(\n base: Record<string, string> | undefined,\n next: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!next) return undefined;\n let any = false;\n const diff: Record<string, string> = {};\n for (const [k, v] of Object.entries(next)) {\n if (!base || base[k] !== v) {\n diff[k] = v;\n any = true;\n }\n }\n return any ? diff : undefined;\n}\n\n/**\n * Apply `specOverrides` from a rich id (`SUniversalPColumnId`) on top of a\n * resolved {@link PColumnSpec}. Returns `base` unchanged when the id carries\n * no overrides.\n */\nexport function applySpecOverrides(\n base: PColumnSpec,\n idOrOverride: Nil | SpecOverrides | ColumnUniversalId,\n): PColumnSpec {\n if (isNil(idOrOverride)) {\n return base;\n }\n\n const overrides = isString(idOrOverride)\n ? unwrapOverrides(idOrOverride)?.specOverrides\n : idOrOverride;\n\n if (isNil(overrides)) {\n return base;\n }\n\n const result = { ...base };\n if (overrides.annotations)\n result.annotations = mergeRecord(base.annotations, overrides.annotations);\n if (overrides.domain) result.domain = mergeRecord(base.domain, overrides.domain);\n if (overrides.contextDomain)\n result.contextDomain = mergeRecord(base.contextDomain, overrides.contextDomain);\n if (overrides.axesSpec) result.axesSpec = applyAxesPatches(base.axesSpec, overrides.axesSpec);\n return result;\n}\n\n/**\n * Compose two override patches: applying `mergeSpecOverrides(prior, next)` on\n * top of a base spec produces the same result as applying `prior` then `next`.\n */\nexport function mergeSpecOverrides(prior: SpecOverrides, next: SpecOverrides): SpecOverrides {\n const result: Mutable<SpecOverrides> = {};\n const axesSpec = mergeAxesPatches(prior.axesSpec, next.axesSpec);\n if (axesSpec !== undefined) result.axesSpec = axesSpec;\n const annotations = mergeRecord(prior.annotations, next.annotations);\n if (annotations !== undefined) result.annotations = annotations;\n const domain = mergeRecord(prior.domain, next.domain);\n if (domain !== undefined) result.domain = domain;\n const contextDomain = mergeRecord(prior.contextDomain, next.contextDomain);\n if (contextDomain !== undefined) result.contextDomain = contextDomain;\n return result;\n}\n\n/**\n * Apply positional `patches` onto `base.axesSpec`. Patches deep-merge\n * `annotations` / `domain` / `contextDomain` and shallow-override `name` /\n * `type` at their slot. Indices `>= base.length` append new axes; intermediate\n * gaps (if any) are filled with the patch itself, so callers should not leave\n * holes between base.length and the highest patched index.\n */\nfunction applyAxesPatches(base: readonly AxisSpec[], patches: AxisPatches): AxisSpec[] {\n const result: AxisSpec[] = base.slice();\n for (const [k, p] of Object.entries(patches)) {\n const i = Number(k);\n const existing = result[i];\n result[i] = (existing === undefined ? p : mergeAxisPatch(existing, p)) as AxisSpec;\n }\n return result;\n}\n\n/**\n * Compose two positional patch maps: `mergeAxesPatches(prior, next)` applied to\n * a base spec must equal applying `prior` then `next`. Patches sharing an\n * index deep-merge field-by-field.\n */\nfunction mergeAxesPatches(\n prior: AxisPatches | undefined,\n next: AxisPatches | undefined,\n): AxisPatches | undefined {\n if (!prior || Object.keys(prior).length === 0) return next;\n if (!next || Object.keys(next).length === 0) return prior;\n const result: AxisPatches = { ...prior };\n for (const [k, p] of Object.entries(next)) {\n const i = Number(k);\n const existing = result[i];\n result[i] = existing === undefined ? p : mergeAxisPatch(existing, p);\n }\n return result;\n}\n\nfunction mergeAxisPatch<A extends Partial<AxisSpec>>(axis: A, patch: Partial<AxisSpec>): A {\n const result: Mutable<A> = { ...axis, ...patch };\n if (patch.annotations) result.annotations = mergeRecord(axis.annotations, patch.annotations);\n if (patch.domain) result.domain = mergeRecord(axis.domain, patch.domain);\n if (patch.contextDomain) {\n result.contextDomain = mergeRecord(axis.contextDomain, patch.contextDomain);\n }\n return result;\n}\n\nfunction mergeRecord(\n a: Record<string, string> | undefined,\n b: Record<string, string> | undefined,\n): Record<string, string> | undefined {\n if (!b) return a;\n if (!a) return b;\n return { ...a, ...b };\n}\n"],"mappings":";;;;;AA0BA,SAAgB,sBAAsB,KAA0C;CAC9E,OAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,oBAAoB;AACxE;AAEA,SAAgB,2BAA2B,OAAiD;CAC1F,OAAO;EACL,gBAAgB;EAChB,QAAQ,MAAM;EACd,eAAe,MAAM;CACvB;AACF;AAEA,SAAgB,yBAAyB,OAGlB;CACrB,OAAO,4BAA4B,0BAA0B,KAAK,CAAC;AACrE;AAEA,SAAgB,0BAA0B,OAGlB;CACtB,MAAM,EAAE,QAAQ,kBAAkB;CAClC,MAAM,YAAY,gBAAgB,MAAM;CAQxC,OAAO;EACL,gBAAgB;EAChB,QATiB,YACf,UAAU,SACT;EAQH,eAPsB,YACpB,mBAAmB,UAAU,eAAe,aAAa,IACzD;CAMJ;AACF;AAEA,SAAgB,wBAAwB,IAA4C;CAClF,IAAI;EACF,MAAM,SAAS,KAAK,MAAM,EAAE;EAC5B,OAAO,sBAAsB,MAAM,IAC/B,UAAA,GAAA,wBAAA,WAAA,CACW,gDAAgD;CACjE,QAAQ;EACN,MAAM,IAAI,MACR,iGACF;CACF;AACF;AAEA,SAAgB,4BAA4B,IAA6C;CACvF,OAAOA,aAAAA,iBACL,2BAA2B,EAAE,CAC/B;AACF;;;;;;;AAQA,SAAgB,gBAAgB,IAAwD;CACtF,MAAM,SAASC,YAAAA,oBAAoB,EAAE;CACrC,IAAI,WAAW,KAAA,KAAa,CAAC,sBAAsB,MAAM,GAAG,OAAO,KAAA;CACnE,MAAM,QAAQA,YAAAA,oBAAoB,OAAO,MAAM;CAC/C,IAAI,UAAU,KAAA,KAAa,sBAAsB,KAAK,GACpD,MAAM,IAAI,MAAM,kDAAkD;CAEpE,OAAO;AACT;;;;;;;;;;;;;AAcA,SAAgB,gBAAgB,MAAmB,MAAkC;CACnF,MAAM,cAAc,YAAY,KAAK,aAAa,KAAK,WAAW;CAClE,MAAM,SAAS,YAAY,KAAK,QAAQ,KAAK,MAAM;CACnD,MAAM,gBAAgB,YAAY,KAAK,eAAe,KAAK,aAAa;CACxE,MAAM,WAAW,gBAAgB,KAAK,UAAU,KAAK,QAAQ;CAC7D,OAAO;EACL,GAAI,YAAY,EAAE,SAAS;EAC3B,GAAI,eAAe,EAAE,YAAY;EACjC,GAAI,UAAU,EAAE,OAAO;EACvB,GAAI,iBAAiB,EAAE,cAAc;CACvC;AACF;AAEA,SAAgB,iBAAiB,OAA+B;CAC9D,QACG,CAAC,MAAM,eAAe,OAAO,KAAK,MAAM,WAAW,CAAC,CAAC,WAAW,OAChE,CAAC,MAAM,UAAU,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,WAAW,OACtD,CAAC,MAAM,iBAAiB,OAAO,KAAK,MAAM,aAAa,CAAC,CAAC,WAAW,OACpE,CAAC,MAAM,YAAY,OAAO,KAAK,MAAM,QAAQ,CAAC,CAAC,WAAW;AAE/D;AAEA,SAAS,gBACP,MACA,MACyB;CACzB,MAAM,MAAmB,CAAC;CAC1B,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,IAAI,KAAK;EACf,MAAM,IAAI,KAAK;EACf,IAAI,MAAM,KAAA,GAAW;GACnB,IAAI,KAAK;GACT,MAAM;GACN;EACF;EACA,MAAM,cAAc,EAAE,SAAS,EAAE;EACjC,MAAM,cAAc,EAAE,SAAS,EAAE;EACjC,MAAM,cAAc,YAAY,EAAE,aAAa,EAAE,WAAW;EAC5D,MAAM,SAAS,YAAY,EAAE,QAAQ,EAAE,MAAM;EAC7C,MAAM,gBAAgB,YAAY,EAAE,eAAe,EAAE,aAAa;EAClE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,UAAU,CAAC,eAAe;EAC/E,IAAI,KAAK;GACP,GAAI,eAAe,EAAE,MAAM,EAAE,KAAK;GAClC,GAAI,eAAe,EAAE,MAAM,EAAE,KAAK;GAClC,GAAI,eAAe,EAAE,YAAY;GACjC,GAAI,UAAU,EAAE,OAAO;GACvB,GAAI,iBAAiB,EAAE,cAAc;EACvC;EACA,MAAM;CACR;CACA,OAAO,MAAM,MAAM,KAAA;AACrB;AAEA,SAAS,YACP,MACA,MACoC;CACpC,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,IAAI,MAAM;CACV,MAAM,OAA+B,CAAC;CACtC,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,GACtC,IAAI,CAAC,QAAQ,KAAK,OAAO,GAAG;EAC1B,KAAK,KAAK;EACV,MAAM;CACR;CAEF,OAAO,MAAM,OAAO,KAAA;AACtB;;;;;;AAOA,SAAgB,mBACd,MACA,cACa;CACb,KAAA,GAAA,WAAA,MAAA,CAAU,YAAY,GACpB,OAAO;CAGT,MAAM,aAAA,GAAA,WAAA,SAAA,CAAqB,YAAY,IACnC,gBAAgB,YAAY,CAAC,EAAE,gBAC/B;CAEJ,KAAA,GAAA,WAAA,MAAA,CAAU,SAAS,GACjB,OAAO;CAGT,MAAM,SAAS,EAAE,GAAG,KAAK;CACzB,IAAI,UAAU,aACZ,OAAO,cAAc,YAAY,KAAK,aAAa,UAAU,WAAW;CAC1E,IAAI,UAAU,QAAQ,OAAO,SAAS,YAAY,KAAK,QAAQ,UAAU,MAAM;CAC/E,IAAI,UAAU,eACZ,OAAO,gBAAgB,YAAY,KAAK,eAAe,UAAU,aAAa;CAChF,IAAI,UAAU,UAAU,OAAO,WAAW,iBAAiB,KAAK,UAAU,UAAU,QAAQ;CAC5F,OAAO;AACT;;;;;AAMA,SAAgB,mBAAmB,OAAsB,MAAoC;CAC3F,MAAM,SAAiC,CAAC;CACxC,MAAM,WAAW,iBAAiB,MAAM,UAAU,KAAK,QAAQ;CAC/D,IAAI,aAAa,KAAA,GAAW,OAAO,WAAW;CAC9C,MAAM,cAAc,YAAY,MAAM,aAAa,KAAK,WAAW;CACnE,IAAI,gBAAgB,KAAA,GAAW,OAAO,cAAc;CACpD,MAAM,SAAS,YAAY,MAAM,QAAQ,KAAK,MAAM;CACpD,IAAI,WAAW,KAAA,GAAW,OAAO,SAAS;CAC1C,MAAM,gBAAgB,YAAY,MAAM,eAAe,KAAK,aAAa;CACzE,IAAI,kBAAkB,KAAA,GAAW,OAAO,gBAAgB;CACxD,OAAO;AACT;;;;;;;;AASA,SAAS,iBAAiB,MAA2B,SAAkC;CACrF,MAAM,SAAqB,KAAK,MAAM;CACtC,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,GAAG;EAC5C,MAAM,IAAI,OAAO,CAAC;EAClB,MAAM,WAAW,OAAO;EACxB,OAAO,KAAM,aAAa,KAAA,IAAY,IAAI,eAAe,UAAU,CAAC;CACtE;CACA,OAAO;AACT;;;;;;AAOA,SAAS,iBACP,OACA,MACyB;CACzB,IAAI,CAAC,SAAS,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,GAAG,OAAO;CACtD,IAAI,CAAC,QAAQ,OAAO,KAAK,IAAI,CAAC,CAAC,WAAW,GAAG,OAAO;CACpD,MAAM,SAAsB,EAAE,GAAG,MAAM;CACvC,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,IAAI,GAAG;EACzC,MAAM,IAAI,OAAO,CAAC;EAClB,MAAM,WAAW,OAAO;EACxB,OAAO,KAAK,aAAa,KAAA,IAAY,IAAI,eAAe,UAAU,CAAC;CACrE;CACA,OAAO;AACT;AAEA,SAAS,eAA4C,MAAS,OAA6B;CACzF,MAAM,SAAqB;EAAE,GAAG;EAAM,GAAG;CAAM;CAC/C,IAAI,MAAM,aAAa,OAAO,cAAc,YAAY,KAAK,aAAa,MAAM,WAAW;CAC3F,IAAI,MAAM,QAAQ,OAAO,SAAS,YAAY,KAAK,QAAQ,MAAM,MAAM;CACvE,IAAI,MAAM,eACR,OAAO,gBAAgB,YAAY,KAAK,eAAe,MAAM,aAAa;CAE5E,OAAO;AACT;AAEA,SAAS,YACP,GACA,GACoC;CACpC,IAAI,CAAC,GAAG,OAAO;CACf,IAAI,CAAC,GAAG,OAAO;CACf,OAAO;EAAE,GAAG;EAAG,GAAG;CAAE;AACtB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { CanonicalizedJson } from "../../../json.js";
|
|
2
|
+
import { PColumnSpec } from "./spec.js";
|
|
3
|
+
import { AxisPatches, ColumnUniversalId } from "./ids.js";
|
|
4
|
+
import { Branded, Nil } from "@milaboratories/helpers";
|
|
5
|
+
|
|
6
|
+
//#region src/drivers/pframe/spec/overridden.d.ts
|
|
7
|
+
type SpecOverrides = Pick<PColumnSpec, "domain" | "contextDomain" | "annotations"> & {
|
|
8
|
+
axesSpec?: AxisPatches;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* `source` can reference a leaf or a Filtered/Discovered id, but never another
|
|
12
|
+
* Overridden id — there is no `Overridden<Overridden<...>>`. Repeated overrides
|
|
13
|
+
* merge at the outer wrapper via {@link mergeSpecOverrides}.
|
|
14
|
+
*/
|
|
15
|
+
interface ColumnOverriddenKey {
|
|
16
|
+
__isOverridden: true;
|
|
17
|
+
source: Exclude<ColumnUniversalId, ColumnOverriddenId>;
|
|
18
|
+
specOverrides: SpecOverrides;
|
|
19
|
+
}
|
|
20
|
+
type ColumnOverriddenId = Branded<CanonicalizedJson<ColumnOverriddenKey>, "ColumnOverriddenId">;
|
|
21
|
+
declare function isColumnOverriddenKey(obj: unknown): obj is ColumnOverriddenKey;
|
|
22
|
+
declare function distillColumnOverriddenKey(props: ColumnOverriddenKey): ColumnOverriddenKey;
|
|
23
|
+
declare function createColumnOverriddenId(props: {
|
|
24
|
+
source: ColumnUniversalId;
|
|
25
|
+
specOverrides: SpecOverrides;
|
|
26
|
+
}): ColumnOverriddenId;
|
|
27
|
+
declare function createColumnOverriddenKey(props: {
|
|
28
|
+
source: ColumnUniversalId;
|
|
29
|
+
specOverrides: SpecOverrides;
|
|
30
|
+
}): ColumnOverriddenKey;
|
|
31
|
+
declare function parseColumnOverriddenId(id: ColumnUniversalId): ColumnOverriddenKey;
|
|
32
|
+
declare function stringifyColumnOverriddenId(id: ColumnOverriddenKey): ColumnOverriddenId;
|
|
33
|
+
/**
|
|
34
|
+
* Peel one override-wrap layer.
|
|
35
|
+
*
|
|
36
|
+
* Invariant: `{source, specOverrides}` can only appear at the top level —
|
|
37
|
+
* the inner `source` is never itself an override-wrap. Anything else throws.
|
|
38
|
+
*/
|
|
39
|
+
declare function unwrapOverrides(id: ColumnUniversalId): ColumnOverriddenKey | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Diff two specs into a {@link SpecOverrides} patch that, when applied on top
|
|
42
|
+
* of `base`, reconstructs `next`.
|
|
43
|
+
*
|
|
44
|
+
* - For top-level `annotations` / `domain` / `contextDomain`: include keys
|
|
45
|
+
* whose value in `next` differs from `base` (or is missing in `base`).
|
|
46
|
+
* Keys present in `base` but missing in `next` are not emitted — overrides
|
|
47
|
+
* merge, they cannot delete.
|
|
48
|
+
* - For `axesSpec`: matched by **positional index**. Each `next[i]` is diffed
|
|
49
|
+
* against `base[i]`; only changed fields are emitted as a patch under key
|
|
50
|
+
* `i`. Indices past `base.length` carry the full new axis (append).
|
|
51
|
+
*/
|
|
52
|
+
declare function deriveSpecDelta(base: PColumnSpec, next: PColumnSpec): SpecOverrides;
|
|
53
|
+
declare function isEmptySpecDelta(delta: SpecOverrides): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Apply `specOverrides` from a rich id (`SUniversalPColumnId`) on top of a
|
|
56
|
+
* resolved {@link PColumnSpec}. Returns `base` unchanged when the id carries
|
|
57
|
+
* no overrides.
|
|
58
|
+
*/
|
|
59
|
+
declare function applySpecOverrides(base: PColumnSpec, idOrOverride: Nil | SpecOverrides | ColumnUniversalId): PColumnSpec;
|
|
60
|
+
/**
|
|
61
|
+
* Compose two override patches: applying `mergeSpecOverrides(prior, next)` on
|
|
62
|
+
* top of a base spec produces the same result as applying `prior` then `next`.
|
|
63
|
+
*/
|
|
64
|
+
declare function mergeSpecOverrides(prior: SpecOverrides, next: SpecOverrides): SpecOverrides;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { ColumnOverriddenId, ColumnOverriddenKey, SpecOverrides, applySpecOverrides, createColumnOverriddenId, createColumnOverriddenKey, deriveSpecDelta, distillColumnOverriddenKey, isColumnOverriddenKey, isEmptySpecDelta, mergeSpecOverrides, parseColumnOverriddenId, stringifyColumnOverriddenId, unwrapOverrides };
|
|
67
|
+
//# sourceMappingURL=overridden.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overridden.d.ts","names":[],"sources":["../../../../src/drivers/pframe/spec/overridden.ts"],"mappings":";;;;;;KAMY,aAAA,GAAgB,IAAA,CAAK,WAAA;EAC/B,QAAA,GAAW,WAAA;AAAA;;;;;;UAQI,mBAAA;EACf,cAAA;EACA,MAAA,EAAQ,OAAA,CAAQ,iBAAA,EAAmB,kBAAA;EACnC,aAAA,EAAe,aAAA;AAAA;AAAA,KAGL,kBAAA,GAAqB,OAAA,CAC/B,iBAAA,CAAkB,mBAAA;AAAA,iBAIJ,qBAAA,CAAsB,GAAA,YAAe,GAAA,IAAO,mBAAmB;AAAA,iBAI/D,0BAAA,CAA2B,KAAA,EAAO,mBAAA,GAAsB,mBAAmB;AAAA,iBAQ3E,wBAAA,CAAyB,KAAA;EACvC,MAAA,EAAQ,iBAAA;EACR,aAAA,EAAe,aAAA;AAAA,IACb,kBAAA;AAAA,iBAIY,yBAAA,CAA0B,KAAA;EACxC,MAAA,EAAQ,iBAAA;EACR,aAAA,EAAe,aAAA;AAAA,IACb,mBAAA;AAAA,iBAiBY,uBAAA,CAAwB,EAAA,EAAI,iBAAA,GAAoB,mBAAmB;AAAA,iBAanE,2BAAA,CAA4B,EAAA,EAAI,mBAAA,GAAsB,kBAAkB;;;;;;;iBAYxE,eAAA,CAAgB,EAAA,EAAI,iBAAA,GAAoB,mBAAmB;AAxE7C;AAG9B;;;;;;;;;;;AAH8B,iBA8Fd,eAAA,CAAgB,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,WAAA,GAAc,aAAA;AAAA,iBAavD,gBAAA,CAAiB,KAAoB,EAAb,aAAa;AAnGrD;;;;;AAAA,iBAiKgB,kBAAA,CACd,IAAA,EAAM,WAAA,EACN,YAAA,EAAc,GAAA,GAAM,aAAA,GAAgB,iBAAA,GACnC,WAAA;;;AApK4E;AAI/E;iBA2LgB,kBAAA,CAAmB,KAAA,EAAO,aAAA,EAAe,IAAA,EAAM,aAAA,GAAgB,aAAA"}
|