@pie-element/complex-rubric 3.8.4-next.0 → 3.8.4-next.12

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.
Files changed (121) hide show
  1. package/configure/node_modules/@pie-element/multi-trait-rubric/CHANGELOG.json +1 -0
  2. package/configure/node_modules/@pie-element/multi-trait-rubric/CHANGELOG.md +2430 -0
  3. package/configure/node_modules/@pie-element/multi-trait-rubric/LICENSE.md +5 -0
  4. package/configure/node_modules/@pie-element/multi-trait-rubric/README.md +55 -0
  5. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/CHANGELOG.json +1 -0
  6. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/CHANGELOG.md +2298 -0
  7. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/common.js +584 -0
  8. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/common.js.map +1 -0
  9. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/defaults.js +152 -0
  10. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/defaults.js.map +1 -0
  11. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/index.js +223 -0
  12. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/index.js.map +1 -0
  13. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/main.js +546 -0
  14. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/main.js.map +1 -0
  15. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/modals.js +361 -0
  16. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/modals.js.map +1 -0
  17. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/scale.js +556 -0
  18. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/scale.js.map +1 -0
  19. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/trait.js +380 -0
  20. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/trait.js.map +1 -0
  21. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/traitsHeader.js +296 -0
  22. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/traitsHeader.js.map +1 -0
  23. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/utils.js +118 -0
  24. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/lib/utils.js.map +1 -0
  25. package/configure/node_modules/@pie-element/multi-trait-rubric/configure/package.json +18 -0
  26. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/CHANGELOG.json +1 -0
  27. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/CHANGELOG.md +1539 -0
  28. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/defaults.js +19 -0
  29. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/defaults.js.map +1 -0
  30. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/index.js +215 -0
  31. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/index.js.map +1 -0
  32. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/utils.js +13 -0
  33. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/lib/utils.js.map +1 -0
  34. package/configure/node_modules/@pie-element/multi-trait-rubric/controller/package.json +15 -0
  35. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/config-schema.json +1628 -0
  36. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/config-schema.json.md +1202 -0
  37. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/demo/config.js +8 -0
  38. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/demo/generate.js +117 -0
  39. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/demo/index.html +1 -0
  40. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/demo/session.js +6 -0
  41. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/pie-schema.json +861 -0
  42. package/configure/node_modules/@pie-element/multi-trait-rubric/docs/pie-schema.json.md +614 -0
  43. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/index.js +91 -0
  44. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/index.js.map +1 -0
  45. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/main.js +164 -0
  46. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/main.js.map +1 -0
  47. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/scale.js +330 -0
  48. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/scale.js.map +1 -0
  49. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/trait.js +103 -0
  50. package/configure/node_modules/@pie-element/multi-trait-rubric/lib/trait.js.map +1 -0
  51. package/configure/node_modules/@pie-element/multi-trait-rubric/package.json +24 -0
  52. package/configure/node_modules/@pie-element/rubric/CHANGELOG.json +257 -0
  53. package/configure/node_modules/@pie-element/rubric/CHANGELOG.md +2713 -0
  54. package/configure/node_modules/@pie-element/rubric/LICENSE.md +5 -0
  55. package/configure/node_modules/@pie-element/rubric/README.md +3 -0
  56. package/configure/node_modules/@pie-element/rubric/configure/CHANGELOG.json +197 -0
  57. package/configure/node_modules/@pie-element/rubric/configure/CHANGELOG.md +2506 -0
  58. package/configure/node_modules/@pie-element/rubric/configure/lib/defaults.js +68 -0
  59. package/configure/node_modules/@pie-element/rubric/configure/lib/defaults.js.map +1 -0
  60. package/configure/node_modules/@pie-element/rubric/configure/lib/index.js +197 -0
  61. package/configure/node_modules/@pie-element/rubric/configure/lib/index.js.map +1 -0
  62. package/configure/node_modules/@pie-element/rubric/configure/lib/main.js +162 -0
  63. package/configure/node_modules/@pie-element/rubric/configure/lib/main.js.map +1 -0
  64. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/authoring.js +573 -0
  65. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/authoring.js.map +1 -0
  66. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/index.js +24 -0
  67. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/index.js.map +1 -0
  68. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/point-menu.js +172 -0
  69. package/configure/node_modules/@pie-element/rubric/configure/lib/pie-toolbox-rubric/point-menu.js.map +1 -0
  70. package/configure/node_modules/@pie-element/rubric/configure/package.json +18 -0
  71. package/configure/node_modules/@pie-element/rubric/configure/src/__tests__/index.test.jsx +167 -0
  72. package/configure/node_modules/@pie-element/rubric/configure/src/defaults.js +42 -0
  73. package/configure/node_modules/@pie-element/rubric/configure/src/index.js +129 -0
  74. package/configure/node_modules/@pie-element/rubric/configure/src/main.jsx +89 -0
  75. package/configure/node_modules/@pie-element/rubric/configure/src/pie-toolbox-rubric/authoring.jsx +449 -0
  76. package/configure/node_modules/@pie-element/rubric/configure/src/pie-toolbox-rubric/index.js +9 -0
  77. package/configure/node_modules/@pie-element/rubric/configure/src/pie-toolbox-rubric/point-menu.jsx +94 -0
  78. package/configure/node_modules/@pie-element/rubric/controller/CHANGELOG.json +17 -0
  79. package/configure/node_modules/@pie-element/rubric/controller/CHANGELOG.md +1532 -0
  80. package/configure/node_modules/@pie-element/rubric/controller/lib/defaults.js +16 -0
  81. package/configure/node_modules/@pie-element/rubric/controller/lib/defaults.js.map +1 -0
  82. package/configure/node_modules/@pie-element/rubric/controller/lib/index.js +59 -0
  83. package/configure/node_modules/@pie-element/rubric/controller/lib/index.js.map +1 -0
  84. package/configure/node_modules/@pie-element/rubric/controller/package.json +13 -0
  85. package/configure/node_modules/@pie-element/rubric/controller/src/__tests__/index.test.js +33 -0
  86. package/configure/node_modules/@pie-element/rubric/controller/src/defaults.js +8 -0
  87. package/configure/node_modules/@pie-element/rubric/controller/src/index.js +41 -0
  88. package/configure/node_modules/@pie-element/rubric/docs/config-schema.json +712 -0
  89. package/configure/node_modules/@pie-element/rubric/docs/config-schema.json.md +532 -0
  90. package/configure/node_modules/@pie-element/rubric/docs/demo/config.js +8 -0
  91. package/configure/node_modules/@pie-element/rubric/docs/demo/generate.js +8 -0
  92. package/configure/node_modules/@pie-element/rubric/docs/demo/index.html +2 -0
  93. package/configure/node_modules/@pie-element/rubric/docs/pie-schema.json +391 -0
  94. package/configure/node_modules/@pie-element/rubric/docs/pie-schema.json.md +281 -0
  95. package/configure/node_modules/@pie-element/rubric/lib/index.js +94 -0
  96. package/configure/node_modules/@pie-element/rubric/lib/index.js.map +1 -0
  97. package/configure/node_modules/@pie-element/rubric/lib/main.js +270 -0
  98. package/configure/node_modules/@pie-element/rubric/lib/main.js.map +1 -0
  99. package/configure/node_modules/@pie-element/rubric/lib/print.js +114 -0
  100. package/configure/node_modules/@pie-element/rubric/lib/print.js.map +1 -0
  101. package/configure/node_modules/@pie-element/rubric/module/configure.js +1 -0
  102. package/configure/node_modules/@pie-element/rubric/module/controller.js +113 -0
  103. package/configure/node_modules/@pie-element/rubric/module/demo.js +33 -0
  104. package/configure/node_modules/@pie-element/rubric/module/element.js +1 -0
  105. package/configure/node_modules/@pie-element/rubric/module/index.html +21 -0
  106. package/configure/node_modules/@pie-element/rubric/module/manifest.json +10 -0
  107. package/configure/node_modules/@pie-element/rubric/module/print-demo.js +71 -0
  108. package/configure/node_modules/@pie-element/rubric/module/print.html +18 -0
  109. package/configure/node_modules/@pie-element/rubric/module/print.js +1 -0
  110. package/configure/node_modules/@pie-element/rubric/package.json +26 -0
  111. package/configure/node_modules/@pie-element/rubric/src/__tests__/__snapshots__/rubric-view.test.jsx.snap +1815 -0
  112. package/configure/node_modules/@pie-element/rubric/src/__tests__/rubric-view.test.jsx +49 -0
  113. package/configure/node_modules/@pie-element/rubric/src/index.js +37 -0
  114. package/configure/node_modules/@pie-element/rubric/src/main.jsx +219 -0
  115. package/configure/node_modules/@pie-element/rubric/src/print.js +63 -0
  116. package/module/element.js +1 -1
  117. package/module/index.html +1 -1
  118. package/module/manifest.json +5 -1
  119. package/module/print.html +1 -1
  120. package/module/print.js +1 -1
  121. package/package.json +4 -4
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _default = {
8
+ points: ['', '', '', ''],
9
+ sampleAnswers: [null, null, null, null],
10
+ maxPoints: 3,
11
+ maxPointsEnabled: true,
12
+ excludeZero: false,
13
+ excludeZeroEnabled: true
14
+ };
15
+ exports["default"] = _default;
16
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["points","sampleAnswers","maxPoints","maxPointsEnabled","excludeZero","excludeZeroEnabled"],"mappings":";;;;;;eAAe;AACbA,EAAAA,MAAM,EAAE,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,CADK;AAEbC,EAAAA,aAAa,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,CAFF;AAGbC,EAAAA,SAAS,EAAE,CAHE;AAIbC,EAAAA,gBAAgB,EAAE,IAJL;AAKbC,EAAAA,WAAW,EAAE,KALA;AAMbC,EAAAA,kBAAkB,EAAE;AANP,C","sourcesContent":["export default {\n points: ['', '', '', ''],\n sampleAnswers: [null, null, null, null],\n maxPoints: 3,\n maxPointsEnabled: true,\n excludeZero: false,\n excludeZeroEnabled: true,\n};\n"],"file":"defaults.js"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.model = model;
9
+ exports.validate = validate;
10
+
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
+
13
+ var _defaults = _interopRequireDefault(require("./defaults"));
14
+
15
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
+
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+
19
+ var normalize = function normalize(model) {
20
+ return _objectSpread(_objectSpread({}, _defaults["default"]), model);
21
+ };
22
+
23
+ function model(model, session, env) {
24
+ return new Promise(function (resolve) {
25
+ var modelResult = normalize(model || {});
26
+ resolve(env && env.role && env.role === 'instructor' ? modelResult : {});
27
+ });
28
+ }
29
+
30
+ function markupToText(s) {
31
+ return (s || '').replace(/(<([^>]+)>)/gi, '');
32
+ } // IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateSimpleRubric function!“.
33
+
34
+
35
+ function validate(model) {
36
+ var points = model.points;
37
+ var errors = {};
38
+ var pointsDescriptorsErrors = {};
39
+ (points || []).forEach(function (point, index) {
40
+ if (!point || point === '<div></div>') {
41
+ pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';
42
+ } else {
43
+ var identicalPointDescr = points.slice(index + 1).some(function (p) {
44
+ return markupToText(p) === markupToText(point);
45
+ });
46
+
47
+ if (identicalPointDescr) {
48
+ pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';
49
+ }
50
+ }
51
+ });
52
+
53
+ if (Object.keys(pointsDescriptorsErrors).length > 0) {
54
+ errors.pointsDescriptorsErrors = pointsDescriptorsErrors;
55
+ }
56
+
57
+ return errors;
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.js"],"names":["normalize","model","defaults","session","env","Promise","resolve","modelResult","role","markupToText","s","replace","validate","points","errors","pointsDescriptorsErrors","forEach","point","index","identicalPointDescr","slice","some","p","Object","keys","length"],"mappings":";;;;;;;;;;;;AAAA;;;;;;AAEA,IAAMA,SAAS,GAAG,SAAZA,SAAY,CAACC,KAAD;AAAA,yCAAiBC,oBAAjB,GAA8BD,KAA9B;AAAA,CAAlB;;AAEO,SAASA,KAAT,CAAeA,KAAf,EAAsBE,OAAtB,EAA+BC,GAA/B,EAAoC;AACzC,SAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9B,QAAMC,WAAW,GAAGP,SAAS,CAACC,KAAK,IAAI,EAAV,CAA7B;AAEAK,IAAAA,OAAO,CAACF,GAAG,IAAIA,GAAG,CAACI,IAAX,IAAmBJ,GAAG,CAACI,IAAJ,KAAa,YAAhC,GAA+CD,WAA/C,GAA6D,EAA9D,CAAP;AACD,GAJM,CAAP;AAKD;;AAED,SAASE,YAAT,CAAsBC,CAAtB,EAAyB;AACvB,SAAO,CAACA,CAAC,IAAI,EAAN,EAAUC,OAAV,CAAkB,eAAlB,EAAmC,EAAnC,CAAP;AACD,C,CAED;;;AACO,SAASC,QAAT,CAAkBX,KAAlB,EAAyB;AAC9B,MAAQY,MAAR,GAAmBZ,KAAnB,CAAQY,MAAR;AACA,MAAMC,MAAM,GAAG,EAAf;AACA,MAAMC,uBAAuB,GAAG,EAAhC;AAEA,GAACF,MAAM,IAAI,EAAX,EAAeG,OAAf,CAAuB,UAACC,KAAD,EAAQC,KAAR,EAAkB;AAEvC,QAAI,CAACD,KAAD,IAAUA,KAAK,KAAK,aAAxB,EAAuC;AACrCF,MAAAA,uBAAuB,CAACG,KAAD,CAAvB,GAAiC,qCAAjC;AACD,KAFD,MAEO;AACL,UAAMC,mBAAmB,GAAGN,MAAM,CAACO,KAAP,CAAaF,KAAK,GAAG,CAArB,EAAwBG,IAAxB,CAA6B,UAACC,CAAD;AAAA,eAAOb,YAAY,CAACa,CAAD,CAAZ,KAAoBb,YAAY,CAACQ,KAAD,CAAvC;AAAA,OAA7B,CAA5B;;AAEA,UAAIE,mBAAJ,EAAyB;AACvBJ,QAAAA,uBAAuB,CAACG,KAAD,CAAvB,GAAiC,sCAAjC;AACD;AACF;AACF,GAXD;;AAaA,MAAIK,MAAM,CAACC,IAAP,CAAYT,uBAAZ,EAAqCU,MAArC,GAA8C,CAAlD,EAAqD;AACnDX,IAAAA,MAAM,CAACC,uBAAP,GAAiCA,uBAAjC;AACD;;AAED,SAAOD,MAAP;AACD","sourcesContent":["import defaults from './defaults';\n\nconst normalize = (model) => ({ ...defaults, ...model });\n\nexport function model(model, session, env) {\n return new Promise((resolve) => {\n const modelResult = normalize(model || {});\n\n resolve(env && env.role && env.role === 'instructor' ? modelResult : {});\n });\n}\n\nfunction markupToText(s) {\n return (s || '').replace(/(<([^>]+)>)/gi, '');\n}\n\n// IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateSimpleRubric function!“.\nexport function validate(model) {\n const { points } = model;\n const errors = {};\n const pointsDescriptorsErrors = {};\n\n (points || []).forEach((point, index) => {\n\n if (!point || point === '<div></div>') {\n pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';\n } else {\n const identicalPointDescr = points.slice(index + 1).some((p) => markupToText(p) === markupToText(point));\n\n if (identicalPointDescr) {\n pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';\n }\n }\n });\n\n if (Object.keys(pointsDescriptorsErrors).length > 0) {\n errors.pointsDescriptorsErrors = pointsDescriptorsErrors;\n }\n\n return errors;\n}\n"],"file":"index.js"}
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "@pie-element/rubric-controller",
3
+ "private": true,
4
+ "version": "3.3.2",
5
+ "main": "lib/index.js",
6
+ "scripts": {
7
+ "test": "./node_modules/.bin/jest"
8
+ },
9
+ "dependencies": {
10
+ "@pie-lib/pie-toolbox": "2.25.2",
11
+ "lodash": "^4.17.15"
12
+ }
13
+ }
@@ -0,0 +1,33 @@
1
+ import { model } from '../index';
2
+
3
+ describe('rubric model', () => {
4
+ let state = {
5
+ points: ['nothing right', 'a teeny bit right', 'mostly right', 'bingo'],
6
+ sampleAnswers: [null, 'just right', 'not left', null],
7
+ maxPoints: 4,
8
+ maxPointsEnabled: true,
9
+ excludeZero: false,
10
+ excludeZeroEnabled: true,
11
+ };
12
+
13
+ let session = {};
14
+ let env, result;
15
+
16
+ it('returns no model for gather', async () => {
17
+ env = { mode: 'gather' };
18
+ result = await model(state, session, env);
19
+ expect(result).toEqual({});
20
+ });
21
+
22
+ it('returns no model for student role', async () => {
23
+ env = { mode: 'gather', role: 'student' };
24
+ result = await model(state, session, env);
25
+ expect(result).toEqual({});
26
+ });
27
+
28
+ it('returns model for instructor role', async () => {
29
+ env = { mode: 'gather', role: 'instructor' };
30
+ result = await model(state, session, env);
31
+ expect(result).toEqual(state);
32
+ });
33
+ });
@@ -0,0 +1,8 @@
1
+ export default {
2
+ points: ['', '', '', ''],
3
+ sampleAnswers: [null, null, null, null],
4
+ maxPoints: 3,
5
+ maxPointsEnabled: true,
6
+ excludeZero: false,
7
+ excludeZeroEnabled: true,
8
+ };
@@ -0,0 +1,41 @@
1
+ import defaults from './defaults';
2
+
3
+ const normalize = (model) => ({ ...defaults, ...model });
4
+
5
+ export function model(model, session, env) {
6
+ return new Promise((resolve) => {
7
+ const modelResult = normalize(model || {});
8
+
9
+ resolve(env && env.role && env.role === 'instructor' ? modelResult : {});
10
+ });
11
+ }
12
+
13
+ function markupToText(s) {
14
+ return (s || '').replace(/(<([^>]+)>)/gi, '');
15
+ }
16
+
17
+ // IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateSimpleRubric function!“.
18
+ export function validate(model) {
19
+ const { points } = model;
20
+ const errors = {};
21
+ const pointsDescriptorsErrors = {};
22
+
23
+ (points || []).forEach((point, index) => {
24
+
25
+ if (!point || point === '<div></div>') {
26
+ pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';
27
+ } else {
28
+ const identicalPointDescr = points.slice(index + 1).some((p) => markupToText(p) === markupToText(point));
29
+
30
+ if (identicalPointDescr) {
31
+ pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';
32
+ }
33
+ }
34
+ });
35
+
36
+ if (Object.keys(pointsDescriptorsErrors).length > 0) {
37
+ errors.pointsDescriptorsErrors = pointsDescriptorsErrors;
38
+ }
39
+
40
+ return errors;
41
+ }