@fibery/schema 8.1.14 → 8.3.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/lib/index.js +63 -7
- package/package.json +7 -7
- package/types.d.ts +4 -0
package/lib/index.js
CHANGED
|
@@ -306,7 +306,8 @@ class FieldObject {
|
|
|
306
306
|
rawFieldObject,
|
|
307
307
|
holderType,
|
|
308
308
|
resolveTypeObject,
|
|
309
|
-
version
|
|
309
|
+
version,
|
|
310
|
+
resolveMultiRelatedFieldObjects
|
|
310
311
|
} = _ref;
|
|
311
312
|
if (!external_lodash_default().isPlainObject(rawFieldObject)) {
|
|
312
313
|
throw new Error("rawFieldObject arg must be plain object");
|
|
@@ -317,6 +318,9 @@ class FieldObject {
|
|
|
317
318
|
if (!external_lodash_default().isFunction(resolveTypeObject)) {
|
|
318
319
|
throw new Error("resolveTypeObject arg must be function");
|
|
319
320
|
}
|
|
321
|
+
if (!external_lodash_default().isFunction(resolveMultiRelatedFieldObjects)) {
|
|
322
|
+
throw new Error("resolveMultiRelationFieldObjects arg must be function");
|
|
323
|
+
}
|
|
320
324
|
this.name = rawFieldObject["fibery/name"];
|
|
321
325
|
this.description = rawFieldObject["fibery/description"] || null;
|
|
322
326
|
this.id = rawFieldObject["fibery/id"];
|
|
@@ -346,6 +350,7 @@ class FieldObject {
|
|
|
346
350
|
this.isDeleted = rawFieldObject["fibery/deleted?"] || false;
|
|
347
351
|
this.disableLinkExistingItems = rawMeta["ui/disable-link-existing-items"] || false;
|
|
348
352
|
this.version = version;
|
|
353
|
+
this.multiRelation = rawMeta["fibery/multi-relation"] || null;
|
|
349
354
|
Object.defineProperties(this, {
|
|
350
355
|
typeObject: {
|
|
351
356
|
configurable: false,
|
|
@@ -375,21 +380,49 @@ class FieldObject {
|
|
|
375
380
|
configurable: false,
|
|
376
381
|
enumerable: true,
|
|
377
382
|
get: external_lodash_default().once(() => toNonEnumTitle(rawFieldObject["fibery/name"]))
|
|
383
|
+
},
|
|
384
|
+
multiRelatedFieldObjects: {
|
|
385
|
+
configurable: false,
|
|
386
|
+
enumerable: true,
|
|
387
|
+
get: external_lodash_default().once(() => {
|
|
388
|
+
const {
|
|
389
|
+
multiRelation,
|
|
390
|
+
typeObject
|
|
391
|
+
} = this;
|
|
392
|
+
if (!multiRelation || !typeObject.isEntityRef) {
|
|
393
|
+
return [];
|
|
394
|
+
}
|
|
395
|
+
return resolveMultiRelatedFieldObjects(multiRelation);
|
|
396
|
+
})
|
|
378
397
|
}
|
|
379
398
|
});
|
|
380
399
|
}
|
|
381
400
|
get relatedFieldObject() {
|
|
382
401
|
const {
|
|
383
402
|
name,
|
|
384
|
-
relation
|
|
403
|
+
relation,
|
|
404
|
+
multiRelation,
|
|
405
|
+
typeObject
|
|
385
406
|
} = this;
|
|
386
|
-
if (!relation) {
|
|
407
|
+
if (!relation && !multiRelation) {
|
|
387
408
|
return null;
|
|
388
409
|
}
|
|
389
|
-
|
|
410
|
+
if (!relation && multiRelation && typeObject.isEntityRef) {
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
let relationKey;
|
|
414
|
+
let relationId;
|
|
415
|
+
if (relation) {
|
|
416
|
+
relationKey = "relation";
|
|
417
|
+
relationId = relation;
|
|
418
|
+
} else {
|
|
419
|
+
relationId = multiRelation;
|
|
420
|
+
relationKey = "multiRelation";
|
|
421
|
+
}
|
|
422
|
+
const selector = this.type !== this.holderType ? fieldObject => fieldObject[relationKey] === relationId : fieldObject => fieldObject[relationKey] === relationId && fieldObject.name !== name;
|
|
390
423
|
const fieldObject = this.typeObject.fieldObjects.find(selector);
|
|
391
424
|
if (!fieldObject) {
|
|
392
|
-
throw new Error(`there no other end for
|
|
425
|
+
throw new Error(`there no other end for ${relationKey} ${relationId}`);
|
|
393
426
|
}
|
|
394
427
|
return fieldObject;
|
|
395
428
|
}
|
|
@@ -476,10 +509,29 @@ class Schema {
|
|
|
476
509
|
});
|
|
477
510
|
return typeComponentTypeToFieldObject;
|
|
478
511
|
});
|
|
512
|
+
let multiRelatedFieldsObjectsMap = null;
|
|
513
|
+
const initMultiRelatedFieldsObjectsMap = () => {
|
|
514
|
+
multiRelatedFieldsObjectsMap = new Map();
|
|
515
|
+
this.typeObjects.forEach(typeObject => {
|
|
516
|
+
typeObject.fieldObjects.forEach(fieldObject => {
|
|
517
|
+
if (fieldObject.multiRelation && !fieldObject.typeObject.isEntityRef) {
|
|
518
|
+
const store = multiRelatedFieldsObjectsMap.get(fieldObject.multiRelation) || [];
|
|
519
|
+
store.push(fieldObject);
|
|
520
|
+
multiRelatedFieldsObjectsMap.set(fieldObject.multiRelation, store);
|
|
521
|
+
}
|
|
522
|
+
});
|
|
523
|
+
});
|
|
524
|
+
};
|
|
479
525
|
this.typeObjects = rawTypeObjects.map(rawTypeObject => factory.makeTypeObject({
|
|
480
526
|
rawTypeObject,
|
|
481
527
|
resolveTypeObject: type => this.typeObjectsByName[type] || null,
|
|
482
528
|
getTypeComponentTypeToFieldObject: type => getTypeComponentTypeToFieldObject().get(type),
|
|
529
|
+
resolveMultiRelatedFieldObjects: multiRelation => {
|
|
530
|
+
if (!multiRelatedFieldsObjectsMap) {
|
|
531
|
+
initMultiRelatedFieldsObjectsMap();
|
|
532
|
+
}
|
|
533
|
+
return multiRelatedFieldsObjectsMap.get(multiRelation) || [];
|
|
534
|
+
},
|
|
483
535
|
version
|
|
484
536
|
}));
|
|
485
537
|
this.typeObjectsById = factory.makeTypeObjectsById(this.typeObjects);
|
|
@@ -505,7 +557,8 @@ class TypeObject {
|
|
|
505
557
|
resolveTypeObject,
|
|
506
558
|
getTypeComponentTypeToFieldObject,
|
|
507
559
|
version,
|
|
508
|
-
factory
|
|
560
|
+
factory,
|
|
561
|
+
resolveMultiRelatedFieldObjects
|
|
509
562
|
} = _ref;
|
|
510
563
|
_defineProperty(this, "_getFieldObjectShortcuts", external_lodash_default().once(() => {
|
|
511
564
|
const hasRank = this.installedMixins.has("fibery/rank-mixin");
|
|
@@ -547,6 +600,7 @@ class TypeObject {
|
|
|
547
600
|
const rawMeta = rawTypeObject["fibery/meta"] || {};
|
|
548
601
|
this.rawMeta = rawMeta;
|
|
549
602
|
this.isDomain = rawMeta["fibery/domain?"] || false;
|
|
603
|
+
this.isHighlight = rawMeta["fibery/highlight?"] || false;
|
|
550
604
|
this.isMixin = rawMeta["app/mixin?"] || false;
|
|
551
605
|
this.mixinIcon = rawMeta["ui/mixin-icon"] || null;
|
|
552
606
|
this.isEnum = rawMeta["fibery/enum?"] || false;
|
|
@@ -559,6 +613,7 @@ class TypeObject {
|
|
|
559
613
|
this.installedMixins = new Set(Object.keys(rawMeta["app/mixins"] || {}));
|
|
560
614
|
this.syncSource = rawMeta["sync/source"] || null;
|
|
561
615
|
this.version = version;
|
|
616
|
+
this.isEntityRef = rawTypeObject["fibery/name"] === "fibery/entity-ref";
|
|
562
617
|
const fieldObjectsByNameOnceGetter = external_lodash_default().once(() => {
|
|
563
618
|
return factory.makeFieldObjectsByName({
|
|
564
619
|
type: this.name,
|
|
@@ -570,7 +625,8 @@ class TypeObject {
|
|
|
570
625
|
rawFieldObject,
|
|
571
626
|
holderType: this.name,
|
|
572
627
|
resolveTypeObject,
|
|
573
|
-
version
|
|
628
|
+
version,
|
|
629
|
+
resolveMultiRelatedFieldObjects
|
|
574
630
|
});
|
|
575
631
|
}));
|
|
576
632
|
Object.defineProperties(this, {
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fibery/schema",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.3.0",
|
|
4
4
|
"description": "utils for working with fibery schema",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"browser": "./index.js",
|
|
7
7
|
"types": "./types.d.ts",
|
|
8
8
|
"files": [
|
|
9
|
-
"
|
|
9
|
+
"./lib",
|
|
10
10
|
"types.d.ts"
|
|
11
11
|
],
|
|
12
12
|
"private": false,
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"lodash": "^4.17.21",
|
|
15
15
|
"memoize-one": "^6.0.0",
|
|
16
16
|
"pluralize": "^8.0.0",
|
|
17
|
-
"@fibery/helpers": "1.
|
|
17
|
+
"@fibery/helpers": "1.2.0"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@babel/core": "7.20.5",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"jest-junit": "13.0.0",
|
|
26
26
|
"webpack": "5.87.0",
|
|
27
27
|
"webpack-cli": "4.10.0",
|
|
28
|
-
"@fibery/babel-preset": "7.
|
|
29
|
-
"@fibery/eslint-config": "8.
|
|
28
|
+
"@fibery/babel-preset": "7.3.0",
|
|
29
|
+
"@fibery/eslint-config": "8.5.0"
|
|
30
30
|
},
|
|
31
31
|
"jest": {
|
|
32
32
|
"testEnvironment": "node",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "BABEL_ENV=production webpack",
|
|
54
54
|
"test": "node scripts/test.js",
|
|
55
|
-
"test:ci": "
|
|
56
|
-
"test:coverage": "
|
|
55
|
+
"test:ci": "pnpm run test --reporters=default --reporters=jest-junit",
|
|
56
|
+
"test:coverage": "pnpm run test --coverage --coverageDirectory=${JEST_COVERAGE_RESULT_DIR:-$(pwd)}/coverage/schema --reporters=default --reporters=jest-junit",
|
|
57
57
|
"lint": "eslint ."
|
|
58
58
|
}
|
|
59
59
|
}
|
package/types.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export type FieldObject = {
|
|
|
21
21
|
hasLinkRule: boolean;
|
|
22
22
|
linkRule: unknown | null;
|
|
23
23
|
relation: string | null;
|
|
24
|
+
multiRelation: string | null;
|
|
24
25
|
defaultValue: unknown | null;
|
|
25
26
|
objectEditorOrder: number;
|
|
26
27
|
isRequired: boolean;
|
|
@@ -40,6 +41,7 @@ export type FieldObject = {
|
|
|
40
41
|
relatedFieldObject: FieldObject | null;
|
|
41
42
|
cardinality: Cardinality;
|
|
42
43
|
kind: ":field/reference" | ":field/reference-collection" | ":field/basic";
|
|
44
|
+
multiRelatedFieldObjects: Array<FieldObject>;
|
|
43
45
|
};
|
|
44
46
|
|
|
45
47
|
export type TypeObject = {
|
|
@@ -55,6 +57,7 @@ export type TypeObject = {
|
|
|
55
57
|
rankField: string | null;
|
|
56
58
|
rawMeta: Record<string, unknown>;
|
|
57
59
|
isDomain: boolean;
|
|
60
|
+
isHighlight: boolean;
|
|
58
61
|
isMixin: boolean;
|
|
59
62
|
mixinIcon: string | null;
|
|
60
63
|
isEnum: boolean;
|
|
@@ -78,6 +81,7 @@ export type TypeObject = {
|
|
|
78
81
|
fieldObjectsByName: Record<string, FieldObject>;
|
|
79
82
|
typeComponentFieldObject: FieldObject | undefined;
|
|
80
83
|
isDeleted: boolean;
|
|
84
|
+
isEntityRef: boolean;
|
|
81
85
|
};
|
|
82
86
|
|
|
83
87
|
export type Schema = {
|