@fibery/schema 8.2.0 → 8.4.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 +67 -10
- package/package.json +3 -3
- package/types.d.ts +5 -1
package/lib/index.js
CHANGED
|
@@ -102,12 +102,12 @@ let traceErrorSubscribers = [console.error.bind(console)];
|
|
|
102
102
|
const overridden = false;
|
|
103
103
|
function subscribeOnTraceError(fn) {
|
|
104
104
|
if (overridden) {
|
|
105
|
-
throw new Error("
|
|
105
|
+
throw new Error("can't subscribe while overridden");
|
|
106
106
|
}
|
|
107
107
|
traceErrorSubscribers.push(fn);
|
|
108
108
|
let unsubscribed = false;
|
|
109
109
|
return function unsubscribe() {
|
|
110
|
-
assert(!unsubscribed, "
|
|
110
|
+
assert(!unsubscribed, "Can't unsubscribe more than once");
|
|
111
111
|
unsubscribed = true;
|
|
112
112
|
traceErrorSubscribers = traceErrorSubscribers.filter(x => x !== fn);
|
|
113
113
|
};
|
|
@@ -127,7 +127,7 @@ function subscribeOnCaptureMessage(fn) {
|
|
|
127
127
|
captureMessageSubscribers.push(fn);
|
|
128
128
|
let unsubscribed = false;
|
|
129
129
|
return function unsubscribe() {
|
|
130
|
-
assert(!unsubscribed, "
|
|
130
|
+
assert(!unsubscribed, "Can't unsubscribe more than once");
|
|
131
131
|
unsubscribed = true;
|
|
132
132
|
captureMessageSubscribers = captureMessageSubscribers.filter(x => x !== fn);
|
|
133
133
|
};
|
|
@@ -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,8 @@ class TypeObject {
|
|
|
547
600
|
const rawMeta = rawTypeObject["fibery/meta"] || {};
|
|
548
601
|
this.rawMeta = rawMeta;
|
|
549
602
|
this.isDomain = rawMeta["fibery/domain?"] || false;
|
|
603
|
+
this.isPlatform = rawMeta["fibery/platform?"] || false;
|
|
604
|
+
this.isHighlight = rawMeta["fibery/highlight?"] || false;
|
|
550
605
|
this.isMixin = rawMeta["app/mixin?"] || false;
|
|
551
606
|
this.mixinIcon = rawMeta["ui/mixin-icon"] || null;
|
|
552
607
|
this.isEnum = rawMeta["fibery/enum?"] || false;
|
|
@@ -559,6 +614,7 @@ class TypeObject {
|
|
|
559
614
|
this.installedMixins = new Set(Object.keys(rawMeta["app/mixins"] || {}));
|
|
560
615
|
this.syncSource = rawMeta["sync/source"] || null;
|
|
561
616
|
this.version = version;
|
|
617
|
+
this.isEntityRef = rawTypeObject["fibery/name"] === "fibery/entity-ref";
|
|
562
618
|
const fieldObjectsByNameOnceGetter = external_lodash_default().once(() => {
|
|
563
619
|
return factory.makeFieldObjectsByName({
|
|
564
620
|
type: this.name,
|
|
@@ -570,7 +626,8 @@ class TypeObject {
|
|
|
570
626
|
rawFieldObject,
|
|
571
627
|
holderType: this.name,
|
|
572
628
|
resolveTypeObject,
|
|
573
|
-
version
|
|
629
|
+
version,
|
|
630
|
+
resolveMultiRelatedFieldObjects
|
|
574
631
|
});
|
|
575
632
|
}));
|
|
576
633
|
Object.defineProperties(this, {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fibery/schema",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"description": "utils for working with fibery schema",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"browser": "./index.js",
|
|
@@ -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/
|
|
29
|
-
"@fibery/
|
|
28
|
+
"@fibery/eslint-config": "8.5.0",
|
|
29
|
+
"@fibery/babel-preset": "7.3.0"
|
|
30
30
|
},
|
|
31
31
|
"jest": {
|
|
32
32
|
"testEnvironment": "node",
|
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;
|
|
@@ -68,7 +71,7 @@ export type TypeObject = {
|
|
|
68
71
|
color: string;
|
|
69
72
|
units: unknown | null;
|
|
70
73
|
installedMixins: Set<string>;
|
|
71
|
-
syncSource: {appId: string} | null;
|
|
74
|
+
syncSource: {appId: string; appName: string; id: string; state: string; type: string} | null;
|
|
72
75
|
version: string;
|
|
73
76
|
installedMixinTypeObjects: unknown;
|
|
74
77
|
title: string;
|
|
@@ -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 = {
|