@sis-cc/dotstatsuite-components 17.30.3 → 17.32.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.
@@ -58,7 +58,7 @@ var parseAttributesValues = function parseAttributesValues(obs, attributes, inde
58
58
  return dim.id + '=' + valueId;
59
59
  }), R.ifElse(R.isEmpty, R.always(null), R.join(':')))(indexedDimensions);
60
60
 
61
- return R.assoc(attribute.id, (0, _extends3.default)({}, R.pick(['id', 'name', 'relationship', 'display'], attribute), { value: value, serieKey: serieKey, coordinates: coordinates, isObs: R.isEmpty(relationship) }), acc);
61
+ return R.assoc(attribute.id, (0, _extends3.default)({}, R.pick(['id', 'name', 'relationship', 'display', 'combined'], attribute), { value: value, serieKey: serieKey, coordinates: coordinates, isObs: R.isEmpty(relationship) }), acc);
62
62
  }, {}, attrValuesIndexes);
63
63
  };
64
64
 
@@ -33,7 +33,7 @@ var getDisplayableValues = function getDisplayableValues(values) {
33
33
  // - empty/null/undefined/!array values (so far)
34
34
  var hasInvalidValues = R.pipe(R.prop('values'), R.anyPass([R.isNil, R.complement(R.is(Array)), R.isEmpty]));
35
35
  var isConceptInvalid = R.anyPass([hasInvalidValues /* add more... */]);
36
- var filterInvalidConcepts = R.filter(isConceptInvalid);
36
+ var filterValidConcepts = R.reject(isConceptInvalid);
37
37
  // concepts is an array of ids... (misnamed!)
38
38
  var conceptIdsLens = R.lensProp('concepts');
39
39
  var rejectInvalidConceptIds = function rejectInvalidConceptIds() {
@@ -41,8 +41,14 @@ var rejectInvalidConceptIds = function rejectInvalidConceptIds() {
41
41
  return function () {
42
42
  var combinations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
43
43
 
44
- var invalidConceptIds = R.pluck('id', filterInvalidConcepts(concepts));
45
- return R.map(R.over(conceptIdsLens, R.without(invalidConceptIds)), combinations);
44
+ var validConceptIds = R.pluck('id', filterValidConcepts(concepts));
45
+ return R.reduce(function (acc, comb) {
46
+ var refinedConcepts = R.intersection(validConceptIds, comb.concepts);
47
+ if (R.length(refinedConcepts) < 2) {
48
+ return acc;
49
+ }
50
+ return R.append((0, _extends4.default)({}, comb, { concepts: refinedConcepts }), acc);
51
+ }, [], combinations);
46
52
  };
47
53
  };
48
54
 
@@ -33,7 +33,7 @@ var getValueData = function getValueData(index, dimension, parentsIndexes) {
33
33
  var missingParents = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
34
34
  return {
35
35
  dimension: R.pick(['id', 'name', '__index'], dimension),
36
- value: (0, _extends3.default)({}, R.pipe(R.pathOr({}, ['values', index]), R.pick(['id', 'name', 'isNonCoded', 'flags']))(dimension), {
36
+ value: (0, _extends3.default)({}, R.pipe(R.pathOr({}, ['values', index]), R.pick(['id', 'name', 'isNonCoded', 'flags', 'hasAdvancedAttributes']))(dimension), {
37
37
  parents: parentsIndexes,
38
38
  missingParents: missingParents
39
39
  })
@@ -91,6 +91,9 @@ var getCoordinates = function getCoordinates(indexes, topCoordinates, definition
91
91
  var getAttributesSeries = function getAttributesSeries(validator, attributesSeries) {
92
92
  return R.reduce(function (acc, attrs) {
93
93
  var attr = R.head(R.values(attrs));
94
+ if (R.length(attr.relationship || []) === 1 && !attr.combined) {
95
+ return acc;
96
+ }
94
97
  var coordinates = R.propOr({}, 'coordinates', attr);
95
98
  var isValid = validator(coordinates);
96
99
  if (!isValid && !R.prop('isObs', attr)) {
@@ -120,13 +123,16 @@ var combineConcepts = function combineConcepts(combDimValues, definition, attrVa
120
123
  }));
121
124
  };
122
125
 
123
- var getSerieFlagsAndSideProps = function getSerieFlagsAndSideProps(coordinates, validator, attributesValues, customAttributes, metadataCoordinates) {
126
+ var getSerieFlagsAndSideProps = function getSerieFlagsAndSideProps(coordinates, validator, attributesValues, customAttributes, metadataCoordinates, data) {
124
127
  var layoutAttrValues = R.reject(function (attr) {
125
128
  return R.prop('isObs', attr) && !validator(attr.coordinates);
126
129
  }, attributesValues);
127
130
  var flags = (0, _getFlagsAndNotes.getFlagsAndNotes)(layoutAttrValues, customAttributes);
128
131
  var hasMetadata = !R.isNil(R.find(validator, metadataCoordinates));
129
- var hasAdvancedAttributes = getHasAdvancedAttributes(layoutAttrValues, customAttributes);
132
+ var hasDataAdvancedAttributes = R.any(function (d) {
133
+ return R.has('value', d) ? d.hasAdvancedAttributes : R.any(R.prop('hasAdvancedAttributes'), d.values);
134
+ }, data);
135
+ var hasAdvancedAttributes = hasDataAdvancedAttributes || getHasAdvancedAttributes(layoutAttrValues, customAttributes);
130
136
  var sideProps = hasMetadata || hasAdvancedAttributes ? { hasMetadata: hasMetadata, hasAdvancedAttributes: hasAdvancedAttributes, coordinates: coordinates } : null;
131
137
  return { flags: flags, sideProps: sideProps };
132
138
  };
@@ -195,7 +201,7 @@ var getSerieDataWithMissingLines = function getSerieDataWithMissingLines(serie,
195
201
  return coordinatesValidator(coordinates) && !topCoordinatesValidator(coordinates);
196
202
  };
197
203
 
198
- var _getSerieFlagsAndSide = getSerieFlagsAndSideProps(serieCoordinates, flagsValidator, attributes, customAttributes, metadataCoordinates),
204
+ var _getSerieFlagsAndSide = getSerieFlagsAndSideProps(serieCoordinates, flagsValidator, attributes, customAttributes, metadataCoordinates, serieData.data),
199
205
  flags = _getSerieFlagsAndSide.flags,
200
206
  sideProps = _getSerieFlagsAndSide.sideProps;
201
207
 
@@ -223,7 +229,7 @@ var getSerieDataWithoutMissingLines = function getSerieDataWithoutMissingLines(s
223
229
  attributes = _getSerieDimensionsDa2.attributes,
224
230
  serieData = (0, _objectWithoutProperties3.default)(_getSerieDimensionsDa2, ['attributes']);
225
231
 
226
- var _getSerieFlagsAndSide2 = getSerieFlagsAndSideProps(serieCoordinates, coordinatesValidator, attributes, customAttributes, metadataCoordinates),
232
+ var _getSerieFlagsAndSide2 = getSerieFlagsAndSideProps(serieCoordinates, coordinatesValidator, attributes, customAttributes, metadataCoordinates, serieData.data),
227
233
  flags = _getSerieFlagsAndSide2.flags,
228
234
  sideProps = _getSerieFlagsAndSide2.sideProps;
229
235
 
@@ -50,7 +50,9 @@ var parseSerieIndexesHierarchies = function parseSerieIndexesHierarchies(serieIn
50
50
  }
51
51
  var valueIndex = Math.abs(_valueIndex);
52
52
  var parents = R.pathOr([], [dimensionIndex, 'values', valueIndex, 'parents'], dimensions);
53
- var previousIndex = acc.isSameSerie ? R.pathOr(-1, ['indexes', dimensionIndex], previousSerie) : -1;
53
+ var previousIndex = acc.isSameSerie ? R.pipe(R.path(['indexes', dimensionIndex]), function (i) {
54
+ return R.isNil(i) ? -1 : Math.abs(i);
55
+ })(previousSerie) : -1;
54
56
  var previousRegisteredIndexes = acc.isSameSerie ? R.pathOr(new _set2.default(), ['registeredIndexes', dimensionIndex], previousSerie) : new _set2.default();
55
57
  var registeredIndexes = new _set2.default(previousRegisteredIndexes);
56
58
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sis-cc/dotstatsuite-components",
3
3
  "description": "Set components based on React.",
4
- "version": "17.30.3",
4
+ "version": "17.32.0",
5
5
  "main": "lib/index.js",
6
6
  "author": "OECD",
7
7
  "license": "MIT",
@@ -39,7 +39,11 @@ const parseAttributesValues = (obs, attributes, indexedDimensions) => {
39
39
  R.ifElse(R.isEmpty, R.always(null), R.join(':'))
40
40
  )(indexedDimensions);
41
41
 
42
- return R.assoc(attribute.id, { ...R.pick(['id', 'name', 'relationship', 'display'], attribute), value, serieKey, coordinates, isObs: R.isEmpty(relationship) }, acc);
42
+ return R.assoc(
43
+ attribute.id,
44
+ { ...R.pick(['id', 'name', 'relationship', 'display', 'combined'], attribute), value, serieKey, coordinates, isObs: R.isEmpty(relationship) },
45
+ acc
46
+ );
43
47
  },
44
48
  {},
45
49
  attrValuesIndexes
@@ -16,17 +16,20 @@ const hasInvalidValues = R.pipe(
16
16
  R.anyPass([R.isNil, R.complement(R.is(Array)), R.isEmpty]),
17
17
  );
18
18
  const isConceptInvalid = R.anyPass([hasInvalidValues /* add more... */]);
19
- const filterInvalidConcepts = R.filter(isConceptInvalid);
19
+ const filterValidConcepts = R.reject(isConceptInvalid);
20
20
  // concepts is an array of ids... (misnamed!)
21
21
  const conceptIdsLens = R.lensProp('concepts');
22
22
  const rejectInvalidConceptIds =
23
23
  (concepts = []) =>
24
24
  (combinations = []) => {
25
- const invalidConceptIds = R.pluck('id', filterInvalidConcepts(concepts));
26
- return R.map(
27
- R.over(conceptIdsLens, R.without(invalidConceptIds)),
28
- combinations,
29
- );
25
+ const validConceptIds = R.pluck('id', filterValidConcepts(concepts));
26
+ return R.reduce((acc, comb) => {
27
+ const refinedConcepts = R.intersection(validConceptIds, comb.concepts);
28
+ if (R.length(refinedConcepts) < 2) {
29
+ return acc;
30
+ }
31
+ return R.append({ ...comb, concepts: refinedConcepts }, acc);
32
+ }, [], combinations);
30
33
  };
31
34
 
32
35
  export const parseCombinations = (
@@ -5,7 +5,7 @@ import { getLayoutCoordinatesValidator } from '../utils';
5
5
  const getValueData = (index, dimension, parentsIndexes, missingParents = []) => ({
6
6
  dimension: R.pick(['id', 'name', '__index'], dimension),
7
7
  value: {
8
- ...R.pipe(R.pathOr({}, ['values', index]), R.pick(['id', 'name', 'isNonCoded', 'flags']))(dimension),
8
+ ...R.pipe(R.pathOr({}, ['values', index]), R.pick(['id', 'name', 'isNonCoded', 'flags', 'hasAdvancedAttributes']))(dimension),
9
9
  parents: parentsIndexes,
10
10
  missingParents
11
11
  }
@@ -52,6 +52,9 @@ const getCoordinates = (indexes, topCoordinates, definition) => R.addIndex(R.red
52
52
 
53
53
  const getAttributesSeries = (validator, attributesSeries) => R.reduce((acc, attrs) => {
54
54
  const attr = R.head(R.values(attrs));
55
+ if (R.length(attr.relationship || []) === 1 && !attr.combined) {
56
+ return acc;
57
+ }
55
58
  const coordinates = R.propOr({}, 'coordinates', attr);
56
59
  const isValid = validator(coordinates);
57
60
  if (!isValid && !R.prop('isObs', attr)) {
@@ -79,11 +82,14 @@ const combineConcepts = (combDimValues, definition, attrValues) => R.over(
79
82
  }, [], definition.concepts)
80
83
  })));
81
84
 
82
- const getSerieFlagsAndSideProps = (coordinates, validator, attributesValues, customAttributes, metadataCoordinates) => {
85
+ const getSerieFlagsAndSideProps = (coordinates, validator, attributesValues, customAttributes, metadataCoordinates, data) => {
83
86
  const layoutAttrValues = R.reject(attr => R.prop('isObs', attr) && !validator(attr.coordinates), attributesValues);
84
87
  const flags = getFlagsAndNotes(layoutAttrValues, customAttributes);
85
88
  const hasMetadata = !R.isNil(R.find(validator, metadataCoordinates));
86
- const hasAdvancedAttributes = getHasAdvancedAttributes(layoutAttrValues, customAttributes);
89
+ const hasDataAdvancedAttributes = R.any(
90
+ d => R.has('value', d) ? d.hasAdvancedAttributes : R.any(R.prop('hasAdvancedAttributes'), d.values)
91
+ , data);
92
+ const hasAdvancedAttributes = hasDataAdvancedAttributes || getHasAdvancedAttributes(layoutAttrValues, customAttributes);
87
93
  const sideProps = hasMetadata || hasAdvancedAttributes
88
94
  ? { hasMetadata, hasAdvancedAttributes, coordinates } : null;
89
95
  return { flags, sideProps };
@@ -140,11 +146,10 @@ export const getSerieDataWithMissingLines = (serie, definition, topCoordinates,
140
146
  return R.over(R.lensProp('parentsIndexes'), R.append(index), acc);
141
147
  },
142
148
  { parentsIndexes: _parentsIndexes, missingParents: [] }, missingParentsIndexes);
143
-
144
149
  const { attributes, ...serieData } = getSerieDimensionsData(serie, definition, attributesValues, getMissingParents);
145
150
  const topCoordinatesValidator = getLayoutCoordinatesValidator(topCoordinates);
146
151
  const flagsValidator = coordinates => coordinatesValidator(coordinates) && !topCoordinatesValidator(coordinates);
147
- const { flags, sideProps } = getSerieFlagsAndSideProps(serieCoordinates, flagsValidator, attributes, customAttributes, metadataCoordinates);
152
+ const { flags, sideProps } = getSerieFlagsAndSideProps(serieCoordinates, flagsValidator, attributes, customAttributes, metadataCoordinates, serieData.data);
148
153
  return R.append({ ...serieData, flags, sideProps, coordinates: serieCoordinates }, lines);
149
154
  };
150
155
 
@@ -161,7 +166,7 @@ export const getSerieDataWithoutMissingLines = (serie, definition, topCoordinate
161
166
  { parentsIndexes: _parentsIndexes, missingParents: [] }, missingParentsIndexes);
162
167
 
163
168
  const { attributes, ...serieData } = getSerieDimensionsData(serie, definition, attributesValues, getMissingParents);
164
- const { flags, sideProps } = getSerieFlagsAndSideProps(serieCoordinates, coordinatesValidator, attributes, customAttributes, metadataCoordinates);
169
+ const { flags, sideProps } = getSerieFlagsAndSideProps(serieCoordinates, coordinatesValidator, attributes, customAttributes, metadataCoordinates, serieData.data);
165
170
  return ({ ...serieData, flags, sideProps, coordinates: serieCoordinates });
166
171
  };
167
172
 
@@ -14,8 +14,10 @@ const parseSerieIndexesHierarchies = (serieIndexes, previousSerie, dimensions, d
14
14
  }
15
15
  const valueIndex = Math.abs(_valueIndex);
16
16
  const parents = R.pathOr([], [dimensionIndex, 'values', valueIndex, 'parents'], dimensions);
17
- const previousIndex = acc.isSameSerie ? R.pathOr(-1, ['indexes', dimensionIndex], previousSerie) : -1;
18
- const previousRegisteredIndexes = acc.isSameSerie ? R.pathOr(new Set(), ['registeredIndexes', dimensionIndex], previousSerie) : new Set();
17
+ const previousIndex = acc.isSameSerie
18
+ ? R.pipe(R.path(['indexes', dimensionIndex]), i => R.isNil(i) ? -1 : Math.abs(i))(previousSerie)
19
+ : -1;
20
+ const previousRegisteredIndexes = acc.isSameSerie? R.pathOr(new Set(), ['registeredIndexes', dimensionIndex], previousSerie) : new Set();
19
21
  const registeredIndexes = new Set(previousRegisteredIndexes);
20
22
  const { presentParentsIndexes, missingParentsIndexes } = R.reduce((_acc, i) => {
21
23
  if (previousRegisteredIndexes.has(i)) {
@@ -245,9 +245,9 @@ describe('enhanceObservations tests', () => {
245
245
  A1: { id: 'A1', display: false, value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
246
246
  A2: { id: 'A2', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
247
247
  A3: { id: 'A3', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
248
- A4: { id: 'A4', display: false, value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
249
- A5: { id: 'A5', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
250
- A6: { id: 'A6', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true },
248
+ A4: { id: 'A4', display: false, value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true, combined: true },
249
+ A5: { id: 'A5', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true, combined: true },
250
+ A6: { id: 'A6', value: null, relationship: [], serieKey: null, coordinates: {}, isObs: true, combined: true },
251
251
  },
252
252
  indexedDimValIds: {}
253
253
  }
@@ -253,7 +253,7 @@ describe('getLayoutData 2 tests', () => {
253
253
  }
254
254
  ]);
255
255
  });
256
- it('getSerieDataWithMissingLines test 2', () => {
256
+ it('getSerieDataWithoutMissingLines test 1', () => {
257
257
  const dimensions = [
258
258
  {
259
259
  id: 'D0',
@@ -362,4 +362,81 @@ describe('getLayoutData 2 tests', () => {
362
362
  }
363
363
  });
364
364
  });
365
+ it('getSerieDataWithoutMissingLines, sideProps and flags non dupplication', () => {
366
+ const dimensions = [
367
+ {
368
+ id: 'D0',
369
+ values: [
370
+ { id: 'D0V0', flags: [{ id: 'A0', value: { id: 'A0V' }}] },
371
+ { id: 'D1V1' }
372
+ ]
373
+ }, {
374
+ id: 'COMB',
375
+ concepts: ['D1', 'A1'],
376
+ dimensions: [
377
+ {
378
+ id: 'D1',
379
+ values: [
380
+ { id: 'D1V0', hasAdvancedAttributes: true },
381
+ { id: 'D1V1' },
382
+ ]
383
+ }
384
+ ]
385
+ }
386
+ ];
387
+
388
+ const attributesSeries = {
389
+ 'D0=D0V0': {
390
+ A0: { id: 'A0', value: { id: 'A0V' }, coordinates: { D0: 'D0V0' }, relationship: ['D0'] },
391
+ },
392
+ 'D1=D1V0': {
393
+ A1: { id: 'A1', value: { id: 'A1V' }, coordinates: { D1: 'D1V0' }, relationship: ['D1'], combined: true },
394
+ },
395
+ 'D0=D0V0:D1=D1V0': {
396
+ A2: { id: 'A2', value: { id: 'A2V' }, coordinates: { D0: 'D0V0', D1: 'D1V0' }, relationship: ['D0', 'D1'] },
397
+ },
398
+ };
399
+
400
+ const topCoordinates = {};
401
+
402
+ const serie = {
403
+ indexes: [0, [0]],
404
+ parentsIndexes: [[], [[]]],
405
+ missingIndexes: [[], [[]]],
406
+ };
407
+
408
+ const customAttributes = {
409
+ flags: [],
410
+ notes: ['A0', 'A2']
411
+ }
412
+
413
+ expect(getSerieDataWithoutMissingLines(serie, dimensions, topCoordinates, attributesSeries, customAttributes, {})).to.deep.equal({
414
+ data: [
415
+ {
416
+ dimension: { id: 'D0' },
417
+ value: { id: 'D0V0', missingParents: [], parents: [], flags: [{ id: 'A0', value: { id: 'A0V' } }] }
418
+ },
419
+ {
420
+ dimension: { id: 'COMB' },
421
+ values: [
422
+ { id: 'D1V0', missingParents: [], parents: [], hasAdvancedAttributes: true },
423
+ { id: 'A1V' },
424
+ ]
425
+ }
426
+ ],
427
+ coordinates: { D0: 'D0V0', D1: 'D1V0' },
428
+ key: 'D0=D0V0:D1=D1V0',
429
+ flags: [
430
+ { id: 'A2', value: { id: 'A2V' } }
431
+ ],
432
+ sideProps: {
433
+ coordinates: {
434
+ D0: 'D0V0',
435
+ D1: 'D1V0',
436
+ },
437
+ hasAdvancedAttributes: true,
438
+ hasMetadata: false
439
+ }
440
+ });
441
+ });
365
442
  });
@@ -17,7 +17,7 @@ describe('parseCombinations tests', () => {
17
17
  { id: 'COMB11', concepts: ['DIM4', 'DIM7'] },
18
18
  { id: 'COMB12', concepts: ['DIM4', 'ATTR7'] },
19
19
  { id: 'COMB13', concepts: ['DIM7', 'ATTR7'] },
20
- { id: 'COMB14', concepts: ['DIM3', 'ATTR5', 'ATTR8'] }
20
+ { id: 'COMB14', concepts: ['DIM3', 'ATTR5', 'ATTR8'] },
21
21
  ];
22
22
 
23
23
  const dimensions = [
@@ -146,26 +146,6 @@ describe('parseCombinations tests', () => {
146
146
  relationship: ['DIM4'],
147
147
  display: true,
148
148
  },
149
- {
150
- id: 'COMB11',
151
- concepts: ['DIM4'],
152
- series: true,
153
- relationship: ['DIM4'],
154
- display: true,
155
- },
156
- {
157
- id: 'COMB12',
158
- concepts: ['DIM4'],
159
- series: true,
160
- relationship: ['DIM4'],
161
- display: true,
162
- },
163
- {
164
- id: 'COMB13',
165
- concepts: [],
166
- display: false,
167
- header: true,
168
- },
169
149
  {
170
150
  id: 'COMB14',
171
151
  concepts: ['DIM3', 'ATTR5', 'ATTR8'],
@@ -102,4 +102,56 @@ describe('parseSeriesIndexesHierarchies tests', () => {
102
102
  { indexes: [[0, 1]], parentsIndexes: [[[], [0]]], missingIndexes: [[[], []]], registeredIndexes: [[new Set([0]), new Set([0, 1])]] },
103
103
  ])
104
104
  });
105
+ it('combinations and inversed dimension', () => {
106
+ const dimensions = [
107
+ {
108
+ id: 'D',
109
+ values: [
110
+ { id: 'A' },
111
+ { id: 'B' },
112
+ { id: 'C' }
113
+ ]
114
+ },
115
+ {
116
+ id: 'COMB',
117
+ dimensions: [{
118
+ values: [
119
+ { id: 'v0' },
120
+ { id: 'v1' },
121
+ { id: 'v2' },
122
+ { id: 'v3' },
123
+ { id: 'v4' },
124
+ ]
125
+ },
126
+ {
127
+ values: [
128
+ { id: 'W', isSelected: true },
129
+ { id: 'NA', parents: [0], isSelected: false },
130
+ { id: 'A', parents: [0, 1], isSelected: true },
131
+ { id: 'USA', parents: [0, 1, 2], isSelected: true },
132
+ { id: 'CAN', parents: [0, 1, 2], isSelected: true },
133
+ { id: 'MEX', parents: [0, 1, 2], isSelected: true }
134
+ ]
135
+ }]
136
+ },
137
+ ];
138
+
139
+ const seriesIndexes = [
140
+ [-2, [0, 2]],
141
+ [-2, [0, 3]],
142
+ [-1, [0, 2]],
143
+ [-1, [0, 3]],
144
+ [0, [0, 2]],
145
+ [0, [0, 3]],
146
+ ];
147
+
148
+ expect(parseSeriesIndexesHierarchies(seriesIndexes, dimensions)).to.deep.equal([
149
+ { indexes: [-2, [0, 2]], parentsIndexes: [[], [[], []]], missingIndexes: [[], [[], [0]]], registeredIndexes: [new Set([2]), [new Set([0]), new Set([0, 2])]] },
150
+ { indexes: [-2, [0, 3]], parentsIndexes: [[], [[], [0, 2]]], missingIndexes: [[], [[], []]], registeredIndexes: [new Set([2]), [new Set([0]), new Set([0, 2, 3])]] },
151
+ { indexes: [-1, [0, 2]], parentsIndexes: [[], [[], []]], missingIndexes: [[], [[], [0]]], registeredIndexes: [new Set([1, 2]), [new Set([0]), new Set([0, 2])]] },
152
+ { indexes: [-1, [0, 3]], parentsIndexes: [[], [[], [0, 2]]], missingIndexes: [[], [[], []]], registeredIndexes: [new Set([1, 2]), [new Set([0]), new Set([0, 2, 3])]] },
153
+ { indexes: [0, [0, 2]], parentsIndexes: [[], [[], []]], missingIndexes: [[], [[], [0]]], registeredIndexes: [new Set([0, 1, 2]), [new Set([0]), new Set([0, 2])]] },
154
+ { indexes: [0, [0, 3]], parentsIndexes: [[], [[], [0, 2]]], missingIndexes: [[], [[], []]], registeredIndexes: [new Set([0, 1, 2]), [new Set([0]), new Set([0, 2, 3])]] },
155
+ ])
156
+ })
105
157
  });