@natlibfi/marc-record-validators-melinda 9.0.6 → 9.0.7

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 (139) hide show
  1. package/.github/CODEOWNERS +10 -0
  2. package/.github/dependabot.yml +40 -0
  3. package/.github/workflows/melinda-node-tests.yml +61 -0
  4. package/LICENSE.txt +21 -165
  5. package/README.md +1 -1
  6. package/dist/access-rights.js +0 -27
  7. package/dist/access-rights.js.map +1 -1
  8. package/dist/access-rights.spec.js +0 -27
  9. package/dist/access-rights.spec.js.map +1 -1
  10. package/dist/double-commas.js +0 -27
  11. package/dist/double-commas.js.map +1 -1
  12. package/dist/double-commas.spec.js +0 -27
  13. package/dist/double-commas.spec.js.map +1 -1
  14. package/dist/duplicates-ind1.js +0 -27
  15. package/dist/duplicates-ind1.js.map +1 -1
  16. package/dist/duplicates-ind1.spec.js +0 -27
  17. package/dist/duplicates-ind1.spec.js.map +1 -1
  18. package/dist/empty-fields.js +0 -28
  19. package/dist/empty-fields.js.map +1 -1
  20. package/dist/empty-fields.spec.js +0 -27
  21. package/dist/empty-fields.spec.js.map +1 -1
  22. package/dist/ending-punctuation-conf.js +0 -28
  23. package/dist/ending-punctuation-conf.js.map +1 -1
  24. package/dist/ending-punctuation.js.map +1 -1
  25. package/dist/ending-punctuation.spec.js +0 -27
  26. package/dist/ending-punctuation.spec.js.map +1 -1
  27. package/dist/field-exclusion.js +0 -28
  28. package/dist/field-exclusion.js.map +1 -1
  29. package/dist/field-exclusion.spec.js +0 -27
  30. package/dist/field-exclusion.spec.js.map +1 -1
  31. package/dist/field-structure.js +0 -28
  32. package/dist/field-structure.js.map +1 -1
  33. package/dist/field-structure.spec.js +0 -27
  34. package/dist/field-structure.spec.js.map +1 -1
  35. package/dist/fields-present.js +0 -27
  36. package/dist/fields-present.js.map +1 -1
  37. package/dist/fields-present.spec.js +0 -27
  38. package/dist/fields-present.spec.js.map +1 -1
  39. package/dist/fixed-fields.js +0 -27
  40. package/dist/fixed-fields.js.map +1 -1
  41. package/dist/fixed-fields.spec.js +0 -27
  42. package/dist/fixed-fields.spec.js.map +1 -1
  43. package/dist/identical-fields.js +0 -28
  44. package/dist/identical-fields.js.map +1 -1
  45. package/dist/identical-fields.spec.js +0 -27
  46. package/dist/identical-fields.spec.js.map +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/isbn-issn.js +0 -27
  49. package/dist/isbn-issn.js.map +1 -1
  50. package/dist/isbn-issn.spec.js +0 -27
  51. package/dist/isbn-issn.spec.js.map +1 -1
  52. package/dist/item-language.js +0 -27
  53. package/dist/item-language.js.map +1 -1
  54. package/dist/item-language.spec.js +0 -27
  55. package/dist/item-language.spec.js.map +1 -1
  56. package/dist/punctuation/index.js +21 -1
  57. package/dist/punctuation/index.js.map +1 -1
  58. package/dist/punctuation/rules/aut.js.map +1 -1
  59. package/dist/punctuation/rules/bib.js +8 -1
  60. package/dist/punctuation/rules/bib.js.map +1 -1
  61. package/dist/punctuation/rules/index.js.map +1 -1
  62. package/dist/punctuation.spec.js +49 -140
  63. package/dist/punctuation.spec.js.map +1 -1
  64. package/dist/resolvable-ext-references-melinda.js +0 -27
  65. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  66. package/dist/resolvable-ext-references-melinda.spec.js +3 -29
  67. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  68. package/dist/sort-tags.js +0 -27
  69. package/dist/sort-tags.js.map +1 -1
  70. package/dist/sort-tags.spec.js +0 -27
  71. package/dist/sort-tags.spec.js.map +1 -1
  72. package/dist/subfield-exclusion.js +0 -28
  73. package/dist/subfield-exclusion.js.map +1 -1
  74. package/dist/subfield-exclusion.spec.js +0 -27
  75. package/dist/subfield-exclusion.spec.js.map +1 -1
  76. package/dist/unicode-decomposition.js +0 -28
  77. package/dist/unicode-decomposition.js.map +1 -1
  78. package/dist/unicode-decomposition.spec.js +0 -27
  79. package/dist/unicode-decomposition.spec.js.map +1 -1
  80. package/dist/urn.js +0 -27
  81. package/dist/urn.js.map +1 -1
  82. package/dist/urn.spec.js +0 -27
  83. package/dist/urn.spec.js.map +1 -1
  84. package/package.json +5 -3
  85. package/src/access-rights.js +0 -29
  86. package/src/access-rights.spec.js +0 -29
  87. package/src/double-commas.js +0 -29
  88. package/src/double-commas.spec.js +0 -29
  89. package/src/duplicates-ind1.js +0 -29
  90. package/src/duplicates-ind1.spec.js +0 -29
  91. package/src/empty-fields.js +0 -28
  92. package/src/empty-fields.spec.js +0 -29
  93. package/src/ending-punctuation-conf.js +0 -29
  94. package/src/ending-punctuation.spec.js +0 -29
  95. package/src/field-exclusion.js +0 -29
  96. package/src/field-exclusion.spec.js +0 -29
  97. package/src/field-structure.js +0 -29
  98. package/src/field-structure.spec.js +0 -29
  99. package/src/fields-present.js +0 -29
  100. package/src/fields-present.spec.js +0 -29
  101. package/src/fixed-fields.js +0 -29
  102. package/src/fixed-fields.spec.js +0 -29
  103. package/src/identical-fields.js +0 -28
  104. package/src/identical-fields.spec.js +0 -29
  105. package/src/index.js +0 -29
  106. package/src/isbn-issn.js +0 -28
  107. package/src/isbn-issn.spec.js +0 -29
  108. package/src/item-language.js +0 -29
  109. package/src/item-language.spec.js +0 -29
  110. package/src/punctuation/index.js +19 -1
  111. package/src/punctuation/rules/bib.js +9 -1
  112. package/src/punctuation.spec.js +48 -147
  113. package/src/resolvable-ext-references-melinda.js +0 -28
  114. package/src/resolvable-ext-references-melinda.spec.js +2 -30
  115. package/src/sort-tags.js +0 -29
  116. package/src/sort-tags.spec.js +0 -29
  117. package/src/subfield-exclusion.js +0 -29
  118. package/src/subfield-exclusion.spec.js +0 -29
  119. package/src/unicode-decomposition.js +0 -28
  120. package/src/unicode-decomposition.spec.js +0 -29
  121. package/src/urn.js +0 -29
  122. package/src/urn.spec.js +0 -29
  123. package/test-fixtures/punctuation/01/expectedResult.json +3 -0
  124. package/test-fixtures/punctuation/01/metadata.json +4 -0
  125. package/test-fixtures/punctuation/01/record.json +18 -0
  126. package/test-fixtures/punctuation/02/expectedResult.json +3 -0
  127. package/test-fixtures/punctuation/02/metadata.json +4 -0
  128. package/test-fixtures/punctuation/02/record.json +18 -0
  129. package/test-fixtures/punctuation/03/expectedResult.json +21 -0
  130. package/test-fixtures/punctuation/03/metadata.json +5 -0
  131. package/test-fixtures/punctuation/03/record.json +19 -0
  132. package/test-fixtures/punctuation/04/expectedResult.json +21 -0
  133. package/test-fixtures/punctuation/04/metadata.json +5 -0
  134. package/test-fixtures/punctuation/04/record.json +19 -0
  135. package/test-fixtures/punctuation/05/expectedResult.json +44 -0
  136. package/test-fixtures/punctuation/05/metadata.json +5 -0
  137. package/test-fixtures/punctuation/05/record.json +42 -0
  138. package/test-fixtures/resolvable-ext-references-melinda.js +0 -27
  139. package/.drone.yml +0 -93
@@ -4,34 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
- /**
9
- *
10
- * @licstart The following is the entire license notice for the JavaScript code in this file.
11
- *
12
- * MARC record validators used in Melinda
13
- *
14
- * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
15
- *
16
- * This file is part of marc-record-validators-melinda
17
- *
18
- * marc-record-validators-melinda program is free software: you can redistribute it and/or modify
19
- * it under the terms of the GNU Lesser General Public License as
20
- * published by the Free Software Foundation, either version 3 of the
21
- * License, or (at your option) any later version.
22
- *
23
- * marc-record-validators-melinda is distributed in the hope that it will be useful,
24
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
25
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
- * GNU Lesser General Public License for more details.
27
- *
28
- * You should have received a copy of the GNU Lesser General Public License
29
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
30
- *
31
- * @licend The above is the entire license notice
32
- * for the JavaScript code in this file.
33
- *
34
- */
35
7
  // Configuration specification
36
8
  const confSpec = {
37
9
  tag: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/field-exclusion.js"],"names":["confSpec","tag","type","mandatory","value","excl","ind1","ind2","subfields","code","dependencies","leader","forEach","obj","fun","Object","entries","isRegExp","re","result","RegExp","config","Array","isArray","TypeError","objOnlyConfigs","map","e","configValid","description","validate","record","excludeFields","fix","excluded","checkMandatory","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","keys","length","subFieldCheck","confField","element","values","some","subField","elemSub","test","conf","res","message","valid","confObj","found","get","every","confKey","dependency","field","removeField"],"mappings":"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","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* MARC record validators used in Melinda\n*\n* Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-validators-melinda\n*\n* marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-validators-melinda is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\n\n// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) { // eslint-disable-line functional/no-conditional-statement\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n\n if (key === 'dependencies') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(element); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statement\n res.message.push(`Field $${element.tag} should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field));\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // eslint-disable-line functional/no-conditional-statement\n res.valid = false; // eslint-disable-line functional/immutable-data\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n /// /////////////////////////////////////////\n}\n"],"file":"field-exclusion.js"}
1
+ {"version":3,"file":"field-exclusion.js","names":["confSpec","tag","type","mandatory","value","excl","ind1","ind2","subfields","code","dependencies","leader","forEach","obj","fun","Object","entries","isRegExp","re","result","RegExp","config","Array","isArray","TypeError","objOnlyConfigs","map","e","configValid","description","validate","record","excludeFields","fix","excluded","checkMandatory","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","keys","length","subFieldCheck","confField","element","values","some","subField","elemSub","test","conf","res","message","valid","confObj","found","get","every","confKey","dependency","field","removeField"],"sources":["../src/field-exclusion.js"],"sourcesContent":["// Configuration specification\nconst confSpec = {\n tag: { // Pattern to match the field's tags\n type: 'RegExp',\n mandatory: true\n },\n value: { // Regular expression object for matching a controlfields value. Mutual exclusive with\n type: 'RegExp',\n excl: ['subfields', 'ind1', 'ind2']\n },\n ind1: { // Pattern to match the field's ind1 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n ind2: { // Pattern to match the field's ind2 property.\n type: 'RegExp', // Array<Indicator>\n excl: ['value']\n },\n subfields: { // An array of objects with the following properties\n code: {\n type: 'RegExp',\n mandatory: true\n },\n value: {\n type: 'RegExp',\n mandatory: true\n }\n },\n dependencies: {\n leader: {\n type: 'RegExp'\n }\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nfunction isRegExp(re) {\n const result = re instanceof RegExp;\n return result;\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n // Transform RegExp-only elements to objects\n const objOnlyConfigs = config.map(e => isRegExp(e) ? {tag: e} : e);\n configValid(objOnlyConfigs);\n\n return {\n description:\n 'Checks that the record does not contain the configured fields',\n validate: record => excludeFields(record, objOnlyConfigs, false),\n fix: record => excludeFields(record, objOnlyConfigs, true)\n };\n\n /// /////////////////////////////////////////\n // These check that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n checkMandatory(confSpec, obj);\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !isRegExp(data))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields recursively\n if (key === 'subfields') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n // Console.log(\"subObj: \", subObj, \" type: \", typeof subObj, !(Array.isArray(subObj)))\n if (typeof subObj === 'object' && !Array.isArray(subObj)) { // eslint-disable-line functional/no-conditional-statement\n checkMandatory(spec[key], subObj);\n\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, spec[key]);\n });\n } else {\n throw new TypeError(`Configuration not valid - subfield: ${subObj} not object`);\n }\n });\n }\n\n if (key === 'dependencies') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n if (!(typeof subObj === 'object' && !Array.isArray(subObj) && Object.keys(subObj).length === 1 && isRegExp(subObj.leader))) {\n throw new TypeError('Configuration not valid - Invalid dependencies config');\n }\n });\n }\n }\n\n function checkMandatory(spec, obj) {\n // Check if all mandatory fields are present\n forEach(spec, ([key, val]) => {\n if (val.mandatory && typeof obj[key] === 'undefined') {\n throw new Error(`Configuration not valid - missing mandatory element: ${key}`);\n }\n });\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // These check that record is valid\n function subFieldCheck(confField, element) {\n // Parse trough every configuration subfield, check if one matches some subobjects fields\n return Object.values(confField).some(subField => Object.values(element.subfields)\n // Check if subfield matches configuration spec\n .some(elemSub => subField.code && elemSub.code && subField.code.test(elemSub.code) &&\n subField.value && elemSub.value && subField.value.test(elemSub.value)));\n }\n\n function excludeFields(record, conf, fix) {\n const res = {message: [], valid: true};\n\n // Parse trough every element of config array\n forEach(conf, ([, confObj]) => {\n const found = record.get(confObj.tag); // Find matching record fields based on mandatory tag\n const excluded = [];\n\n // Check if some of found record fields matches all configuration fields\n found.forEach(element => {\n // Compare each found element against each configuration object\n if (Object.entries(confObj).every(([confKey, confField]) => {\n // This is already checked on .get()\n if (confKey === 'tag') {\n return true;\n }\n\n if (confKey === 'dependencies') {\n return confObj.dependencies.every(dependency => dependency.leader.test(record.leader));\n }\n\n // Check subfield configurations\n if (confKey === 'subfields') {\n return subFieldCheck(confField, element);\n }\n\n // Configuration object is RegExp and record value matches it\n if (element[confKey] && isRegExp(confField) && confField.test(element[confKey])) {\n return true;\n\n // Configuration object not found from found element\n }\n\n return false;\n })) {\n // All configuration fields match, element should be excluded.\n if (fix) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(element); // eslint-disable-line functional/immutable-data\n } else { // eslint-disable-line functional/no-conditional-statement\n res.message.push(`Field $${element.tag} should be excluded`); // eslint-disable-line functional/immutable-data\n }\n }\n });\n\n excluded.forEach(field => record.removeField(field));\n });\n\n // Fix does not send response\n if (!fix) {\n if (res.message.length > 0) { // eslint-disable-line functional/no-conditional-statement\n res.valid = false; // eslint-disable-line functional/immutable-data\n }\n\n return res;\n }\n // Res.fix.push('Field $' + element.tag + ' excluded');\n }\n /// /////////////////////////////////////////\n}\n"],"mappings":";;;;;;AAAA;AACA,MAAMA,QAAQ,GAAG;EACfC,GAAG,EAAE;IAAE;IACLC,IAAI,EAAE,QADH;IAEHC,SAAS,EAAE;EAFR,CADU;EAKfC,KAAK,EAAE;IAAE;IACPF,IAAI,EAAE,QADD;IAELG,IAAI,EAAE,CAAC,WAAD,EAAc,MAAd,EAAsB,MAAtB;EAFD,CALQ;EASfC,IAAI,EAAE;IAAE;IACNJ,IAAI,EAAE,QADF;IACY;IAChBG,IAAI,EAAE,CAAC,OAAD;EAFF,CATS;EAafE,IAAI,EAAE;IAAE;IACNL,IAAI,EAAE,QADF;IACY;IAChBG,IAAI,EAAE,CAAC,OAAD;EAFF,CAbS;EAiBfG,SAAS,EAAE;IAAE;IACXC,IAAI,EAAE;MACJP,IAAI,EAAE,QADF;MAEJC,SAAS,EAAE;IAFP,CADG;IAKTC,KAAK,EAAE;MACLF,IAAI,EAAE,QADD;MAELC,SAAS,EAAE;IAFN;EALE,CAjBI;EA2BfO,YAAY,EAAE;IACZC,MAAM,EAAE;MACNT,IAAI,EAAE;IADA;EADI;AA3BC,CAAjB;;AAkCA,SAASU,OAAT,CAAiBC,GAAjB,EAAsBC,GAAtB,EAA2B;EACzBC,MAAM,CAACC,OAAP,CAAeH,GAAf,EAAoBD,OAApB,CAA4BE,GAA5B;AACD;;AAED,SAASG,QAAT,CAAkBC,EAAlB,EAAsB;EACpB,MAAMC,MAAM,GAAGD,EAAE,YAAYE,MAA7B;EACA,OAAOD,MAAP;AACD;;AAEc,kBAAUE,MAAV,EAAkB;EAC/B,IAAI,CAACC,KAAK,CAACC,OAAN,CAAcF,MAAd,CAAL,EAA4B;IAC1B,MAAM,IAAIG,SAAJ,CAAc,kCAAd,CAAN;EACD,CAH8B,CAK/B;;;EACA,MAAMC,cAAc,GAAGJ,MAAM,CAACK,GAAP,CAAWC,CAAC,IAAIV,QAAQ,CAACU,CAAD,CAAR,GAAc;IAAC1B,GAAG,EAAE0B;EAAN,CAAd,GAAyBA,CAAzC,CAAvB;EACAC,WAAW,CAACH,cAAD,CAAX;EAEA,OAAO;IACLI,WAAW,EACT,+DAFG;IAGLC,QAAQ,EAAEC,MAAM,IAAIC,aAAa,CAACD,MAAD,EAASN,cAAT,EAAyB,KAAzB,CAH5B;IAILQ,GAAG,EAAEF,MAAM,IAAIC,aAAa,CAACD,MAAD,EAASN,cAAT,EAAyB,IAAzB;EAJvB,CAAP,CAT+B,CAgB/B;EACA;;EACA,SAASG,WAAT,CAAqBP,MAArB,EAA6B;IAC3BA,MAAM,CAACT,OAAP,CAAeC,GAAG,IAAI;MACpB,MAAMqB,QAAQ,GAAG,EAAjB,CADoB,CACC;;MAErBC,cAAc,CAACnC,QAAD,EAAWa,GAAX,CAAd;MAEAD,OAAO,CAACC,GAAD,EAAM,CAAC,CAACuB,GAAD,EAAMC,GAAN,CAAD,KAAgB;QAC3BC,iBAAiB,CAACD,GAAD,EAAMD,GAAN,EAAWpC,QAAX,CAAjB,CAD2B,CAE3B;;QACA,IAAIA,QAAQ,CAACoC,GAAD,CAAR,CAAc/B,IAAlB,EAAwB;UAAE;UACxB6B,QAAQ,CAACK,IAAT,CAAc,GAAGvC,QAAQ,CAACoC,GAAD,CAAR,CAAc/B,IAA/B,EADsB,CACgB;QACvC;MACF,CANM,CAAP,CALoB,CAapB;;MACAO,OAAO,CAACC,GAAD,EAAM,CAAC,CAACuB,GAAD,CAAD,KAAW;QACtB,IAAIF,QAAQ,CAACM,QAAT,CAAkBJ,GAAlB,CAAJ,EAA4B;UAC1B,MAAM,IAAIK,KAAJ,CAAU,4CAAV,CAAN;QACD;MACF,CAJM,CAAP;IAKD,CAnBD;EAoBD,CAvC8B,CAyC/B;;;EACA,SAASH,iBAAT,CAA2BI,IAA3B,EAAiCN,GAAjC,EAAsCO,IAAtC,EAA4C;IAC1C;IACA,IAAI,CAACA,IAAI,CAACP,GAAD,CAAT,EAAgB;MACd,MAAM,IAAIK,KAAJ,CAAW,iDAAgDL,GAAI,EAA/D,CAAN;IACD,CAJyC,CAM1C;;;IACA,IAAI,OAAOM,IAAP,KAAgBC,IAAI,CAACP,GAAD,CAAJ,CAAUlC,IAA1B,IACDyC,IAAI,CAACP,GAAD,CAAJ,CAAUlC,IAAV,KAAmB,QAAnB,IAA+B,CAACe,QAAQ,CAACyB,IAAD,CAD3C,EACoD;MAClD,MAAM,IAAID,KAAJ,CAAW,oDAAmDL,GAAI,EAAlE,CAAN;IACD,CAVyC,CAY1C;;;IACA,IAAIA,GAAG,KAAK,WAAZ,EAAyB;MAAE;MACzBxB,OAAO,CAAC8B,IAAD,EAAO,CAAC,GAAGE,MAAH,CAAD,KAAgB;QAC5B;QACA,IAAI,OAAOA,MAAP,KAAkB,QAAlB,IAA8B,CAACtB,KAAK,CAACC,OAAN,CAAcqB,MAAd,CAAnC,EAA0D;UAAE;UAC1DT,cAAc,CAACQ,IAAI,CAACP,GAAD,CAAL,EAAYQ,MAAZ,CAAd;UAEAhC,OAAO,CAACgC,MAAD,EAAS,CAAC,CAACC,MAAD,EAASC,MAAT,CAAD,KAAsB;YACpCR,iBAAiB,CAACQ,MAAD,EAASD,MAAT,EAAiBF,IAAI,CAACP,GAAD,CAArB,CAAjB;UACD,CAFM,CAAP;QAGD,CAND,MAMO;UACL,MAAM,IAAIZ,SAAJ,CAAe,uCAAsCoB,MAAO,aAA5D,CAAN;QACD;MACF,CAXM,CAAP;IAYD;;IAED,IAAIR,GAAG,KAAK,cAAZ,EAA4B;MAAE;MAC5BxB,OAAO,CAAC8B,IAAD,EAAO,CAAC,GAAGE,MAAH,CAAD,KAAgB;QAC5B,IAAI,EAAE,OAAOA,MAAP,KAAkB,QAAlB,IAA8B,CAACtB,KAAK,CAACC,OAAN,CAAcqB,MAAd,CAA/B,IAAwD7B,MAAM,CAACgC,IAAP,CAAYH,MAAZ,EAAoBI,MAApB,KAA+B,CAAvF,IAA4F/B,QAAQ,CAAC2B,MAAM,CAACjC,MAAR,CAAtG,CAAJ,EAA4H;UAC1H,MAAM,IAAIa,SAAJ,CAAc,uDAAd,CAAN;QACD;MACF,CAJM,CAAP;IAKD;EACF;;EAED,SAASW,cAAT,CAAwBQ,IAAxB,EAA8B9B,GAA9B,EAAmC;IACjC;IACAD,OAAO,CAAC+B,IAAD,EAAO,CAAC,CAACP,GAAD,EAAMC,GAAN,CAAD,KAAgB;MAC5B,IAAIA,GAAG,CAAClC,SAAJ,IAAiB,OAAOU,GAAG,CAACuB,GAAD,CAAV,KAAoB,WAAzC,EAAsD;QACpD,MAAM,IAAIK,KAAJ,CAAW,wDAAuDL,GAAI,EAAtE,CAAN;MACD;IACF,CAJM,CAAP;EAKD,CAtF8B,CAuF/B;EAEA;EACA;;;EACA,SAASa,aAAT,CAAuBC,SAAvB,EAAkCC,OAAlC,EAA2C;IACzC;IACA,OAAOpC,MAAM,CAACqC,MAAP,CAAcF,SAAd,EAAyBG,IAAzB,CAA8BC,QAAQ,IAAIvC,MAAM,CAACqC,MAAP,CAAcD,OAAO,CAAC3C,SAAtB,EAC/C;IAD+C,CAE9C6C,IAF8C,CAEzCE,OAAO,IAAID,QAAQ,CAAC7C,IAAT,IAAiB8C,OAAO,CAAC9C,IAAzB,IAAiC6C,QAAQ,CAAC7C,IAAT,CAAc+C,IAAd,CAAmBD,OAAO,CAAC9C,IAA3B,CAAjC,IACf6C,QAAQ,CAAClD,KADM,IACGmD,OAAO,CAACnD,KADX,IACoBkD,QAAQ,CAAClD,KAAT,CAAeoD,IAAf,CAAoBD,OAAO,CAACnD,KAA5B,CAHU,CAA1C,CAAP;EAID;;EAED,SAAS4B,aAAT,CAAuBD,MAAvB,EAA+B0B,IAA/B,EAAqCxB,GAArC,EAA0C;IACxC,MAAMyB,GAAG,GAAG;MAACC,OAAO,EAAE,EAAV;MAAcC,KAAK,EAAE;IAArB,CAAZ,CADwC,CAGxC;;IACAhD,OAAO,CAAC6C,IAAD,EAAO,CAAC,GAAGI,OAAH,CAAD,KAAiB;MAC7B,MAAMC,KAAK,GAAG/B,MAAM,CAACgC,GAAP,CAAWF,OAAO,CAAC5D,GAAnB,CAAd,CAD6B,CACU;;MACvC,MAAMiC,QAAQ,GAAG,EAAjB,CAF6B,CAI7B;;MACA4B,KAAK,CAAClD,OAAN,CAAcuC,OAAO,IAAI;QACvB;QACA,IAAIpC,MAAM,CAACC,OAAP,CAAe6C,OAAf,EAAwBG,KAAxB,CAA8B,CAAC,CAACC,OAAD,EAAUf,SAAV,CAAD,KAA0B;UAC1D;UACA,IAAIe,OAAO,KAAK,KAAhB,EAAuB;YACrB,OAAO,IAAP;UACD;;UAED,IAAIA,OAAO,KAAK,cAAhB,EAAgC;YAC9B,OAAOJ,OAAO,CAACnD,YAAR,CAAqBsD,KAArB,CAA2BE,UAAU,IAAIA,UAAU,CAACvD,MAAX,CAAkB6C,IAAlB,CAAuBzB,MAAM,CAACpB,MAA9B,CAAzC,CAAP;UACD,CARyD,CAU1D;;;UACA,IAAIsD,OAAO,KAAK,WAAhB,EAA6B;YAC3B,OAAOhB,aAAa,CAACC,SAAD,EAAYC,OAAZ,CAApB;UACD,CAbyD,CAe1D;;;UACA,IAAIA,OAAO,CAACc,OAAD,CAAP,IAAoBhD,QAAQ,CAACiC,SAAD,CAA5B,IAA2CA,SAAS,CAACM,IAAV,CAAeL,OAAO,CAACc,OAAD,CAAtB,CAA/C,EAAiF;YAC/E,OAAO,IAAP,CAD+E,CAG/E;UACD;;UAED,OAAO,KAAP;QACD,CAvBG,CAAJ,EAuBI;UACF;UACA,IAAIhC,GAAJ,EAAS;YAAE;YACTC,QAAQ,CAACK,IAAT,CAAcY,OAAd,EADO,CACiB;UACzB,CAFD,MAEO;YAAE;YACPO,GAAG,CAACC,OAAJ,CAAYpB,IAAZ,CAAkB,UAASY,OAAO,CAAClD,GAAI,qBAAvC,EADK,CACyD;UAC/D;QACF;MACF,CAjCD;MAmCAiC,QAAQ,CAACtB,OAAT,CAAiBuD,KAAK,IAAIpC,MAAM,CAACqC,WAAP,CAAmBD,KAAnB,CAA1B;IACD,CAzCM,CAAP,CAJwC,CA+CxC;;IACA,IAAI,CAAClC,GAAL,EAAU;MACR,IAAIyB,GAAG,CAACC,OAAJ,CAAYX,MAAZ,GAAqB,CAAzB,EAA4B;QAAE;QAC5BU,GAAG,CAACE,KAAJ,GAAY,KAAZ,CAD0B,CACP;MACpB;;MAED,OAAOF,GAAP;IACD,CAtDuC,CAuDxC;;EACD,CA3J8B,CA4J/B;;AACD"}
@@ -10,33 +10,6 @@ var _fieldExclusion = _interopRequireDefault(require("../src/field-exclusion"));
10
10
 
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
 
13
- /**
14
- *
15
- * @licstart The following is the entire license notice for the JavaScript code in this file.
16
- *
17
- * MARC record validators used in Melinda
18
- *
19
- * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
20
- *
21
- * This file is part of marc-record-validators-melinda
22
- *
23
- * marc-record-validators-melinda program is free software: you can redistribute it and/or modify
24
- * it under the terms of the GNU Lesser General Public License as
25
- * published by the Free Software Foundation, either version 3 of the
26
- * License, or (at your option) any later version.
27
- *
28
- * marc-record-validators-melinda is distributed in the hope that it will be useful,
29
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
30
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31
- * GNU Lesser General Public License for more details.
32
- *
33
- * You should have received a copy of the GNU Lesser General Public License
34
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
35
- *
36
- * @licend The above is the entire license notice
37
- * for the JavaScript code in this file.
38
- *
39
- */
40
13
  const {
41
14
  expect
42
15
  } = _chai.default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/field-exclusion.spec.js"],"names":["expect","chai","use","chaiAsPromised","describe","it","config","validator","to","be","an","that","has","any","keys","description","a","validate","tag","subfields","code","value","error","with","property","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","valid","message","eql","fix","equalsTo","recordInvalidMulti","configInd","configValue","recordIndInvalid","recordValueInvalid","dependencies","record"],"mappings":";;AA6BA;;AACA;;AACA;;AACA;;;;AAhCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAQA,MAAM;AAACA,EAAAA;AAAD,IAAWC,aAAjB;;AACAA,cAAKC,GAAL,CAASC,uBAAT,E,CAEA;;;AACAC,QAAQ,CAAC,iBAAD,EAAoB,MAAM;AAChCA,EAAAA,QAAQ,CAAC,2CAAD,EAA8C,MAAM;AAC1DC,IAAAA,EAAE,CAAC,wCAAD,EAA2C,YAAY;AACvD,YAAMC,MAAM,GAAG,CAAC,QAAD,CAAf;AAEA,YAAMC,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACAN,MAAAA,MAAM,CAACO,SAAD,CAAN,CACGC,EADH,CACMC,EADN,CACSC,EADT,CACY,QADZ,EAEGC,IAFH,CAEQC,GAFR,CAEYC,GAFZ,CAEgBC,IAFhB,CAEqB,aAFrB,EAEoC,UAFpC;AAIAd,MAAAA,MAAM,CAACO,SAAS,CAACQ,WAAX,CAAN,CAA8BP,EAA9B,CAAiCC,EAAjC,CAAoCO,CAApC,CAAsC,QAAtC;AACAhB,MAAAA,MAAM,CAACO,SAAS,CAACU,QAAX,CAAN,CAA2BT,EAA3B,CAA8BC,EAA9B,CAAiCO,CAAjC,CAAmC,UAAnC;AACD,KAVC,CAAF;AAYAX,IAAAA,EAAE,CAAC,yCAAD,EAA4C,YAAY;AACxD,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAFb,OADa,CAAf;AAOA,YAAMd,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACAN,MAAAA,MAAM,CAACO,SAAD,CAAN,CACGC,EADH,CACMC,EADN,CACSC,EADT,CACY,QADZ,EAEGC,IAFH,CAEQC,GAFR,CAEYC,GAFZ,CAEgBC,IAFhB,CAEqB,aAFrB,EAEoC,UAFpC;AAIAd,MAAAA,MAAM,CAACO,SAAS,CAACQ,WAAX,CAAN,CAA8BP,EAA9B,CAAiCC,EAAjC,CAAoCO,CAApC,CAAsC,QAAtC;AACAhB,MAAAA,MAAM,CAACO,SAAS,CAACU,QAAX,CAAN,CAA2BT,EAA3B,CAA8BC,EAA9B,CAAiCO,CAAjC,CAAmC,UAAnC;AACD,KAfC,CAAF;AAiBAX,IAAAA,EAAE,CAAC,uDAAD,EAA0D,YAAY;AACtE,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,KADP;AAEEC,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAFb,OADa,CAAf;;AAOA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,sDAAzD;AACD;AACF,KAbC,CAAF;AAeAnB,IAAAA,EAAE,CAAC,iEAAD,EAAoE,YAAY;AAChF,YAAMC,MAAM,GAAG;AACbY,QAAAA,GAAG,EAAE,KADQ;AAEbC,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAFE,OAAf;;AAKA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,kCAAzD;AACD;AACF,KAXC,CAAF;AAaAnB,IAAAA,EAAE,CAAC,wDAAD,EAA2D,YAAY;AACvE,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,CAAP;AAAUC,UAAAA,KAAK,EAAE;AAAjB,SAAD;AAFb,OADa,CAAf;;AAOA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,uDAAzD;AACD;AACF,KAbC,CAAF;AAeAnB,IAAAA,EAAE,CAAC,yDAAD,EAA4D,YAAY;AACxE,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAFb,OADa,CAAf;;AAOA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,wDAAzD;AACD;AACF,KAbC,CAAF;AAeAnB,IAAAA,EAAE,CAAC,0EAAD,EAA6E,YAAY;AACzF,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEG,QAAAA,KAAK,EAAE,QAFT;AAGEI,QAAAA,IAAI,EAAE,QAHR;AAIEN,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAJb,OADa,CAAf;;AASA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,4CAAzD;AACD;AACF,KAfC,CAAF;AAiBAnB,IAAAA,EAAE,CAAC,0EAAD,EAA6E,YAAY;AACzF,YAAMC,MAAM,GAAG,CACb;AACEe,QAAAA,KAAK,EAAE,QADT;AAEEF,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SAAD;AAFb,OADa,CAAf;;AAOA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,0DAAzD;AACD;AACF,KAbC,CAAF;AAeAnB,IAAAA,EAAE,CAAC,8EAAD,EAAiF,YAAY;AAC7F,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CACT,CAAC,KAAD,EAAQ,uBAAR,CADS,EAET;AAACE,UAAAA,KAAK,EAAE;AAAR,SAFS;AAFb,OADa,CAAf;;AAUA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,0EAAzD;AACD;AACF,KAhBC,CAAF;AAkBAnB,IAAAA,EAAE,CAAC,+EAAD,EAAkF,YAAY;AAC9F,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CACT,KADS,EAET,uBAFS,EAGT;AAACE,UAAAA,KAAK,EAAE;AAAR,SAHS;AAFb,OADa,CAAf;;AAWA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,oDAAzD;AACD;AACF,KAjBC,CAAF;AAmBAnB,IAAAA,EAAE,CAAC,oFAAD,EAAuF,YAAY;AACnG,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEC,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SADS,EAET;AAACA,UAAAA,KAAK,EAAE;AAAR,SAFS;AAFb,OADa,CAAf;;AAUA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,2DAAzD;AACD;AACF,KAhBC,CAAF;AAkBAnB,IAAAA,EAAE,CAAC,oFAAD,EAAuF,YAAY;AACnG,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEEQ,QAAAA,YAAY,EAAE,QAFhB;AAGEP,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,IAAP;AAAaC,UAAAA,KAAK,EAAE;AAApB,SADS,EAET;AAACA,UAAAA,KAAK,EAAE;AAAR,SAFS;AAHb,OADa,CAAf;;AAWA,UAAI;AACF,cAAM,6BAAiBf,MAAjB,CAAN;AACD,OAFD,CAEE,OAAOgB,KAAP,EAAc;AACdtB,QAAAA,MAAM,CAACsB,KAAD,CAAN,CAAcd,EAAd,CAAiBC,EAAjB,CAAoBC,EAApB,CAAuB,OAAvB,EAAgCa,IAAhC,CAAqCC,QAArC,CAA8C,SAA9C,EAAyD,4DAAzD;AACD;AACF,KAjBC,CAAF;AAkBD,GAjMO,CAAR,CADgC,CAoMhC;;AACApB,EAAAA,QAAQ,CAAC,wCAAD,EAA2C,MAAM;AACvD,UAAME,MAAM,GAAG,CACb;AACEY,MAAAA,GAAG,EAAE;AADP,KADa,CAAf;AAMA,UAAMS,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFyB,KAAf,CAApB;AAYA,UAAMW,aAAa,GAAG,IAAIJ,sBAAJ,CAAe;AACnCC,MAAAA,MAAM,EAAE,KAD2B;AAEnCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF2B,KAAf,CAAtB;AAoBA,UAAMY,mBAAmB,GAAG,IAAIL,sBAAJ,CAAe;AACzCC,MAAAA,MAAM,EAAE,KADiC;AAEzCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG,EAcH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OAdG;AAFiC,KAAf,CAA5B;AA4BA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAY;AAC9C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBe,aAAnB,CAA/B;AACAhC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,mCAAD,EAAsC,YAAY;AAClD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBgB,mBAAnB,CAA/B;AACAjC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD,EAAkC,+BAAlC;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,wBAAD,EAA2B,YAAY;AACvC,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcN,aAAd,CAAN;AACAhC,MAAAA,MAAM,CAACgC,aAAa,CAACO,QAAd,CAAuBL,kBAAvB,CAAD,CAAN,CAAmD1B,EAAnD,CAAsD6B,GAAtD,CAA0D,IAA1D;AACD,KAJC,CAAF;AAMAhC,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcL,mBAAd,CAAN;AACAjC,MAAAA,MAAM,CAACiC,mBAAmB,CAACM,QAApB,CAA6BL,kBAA7B,CAAD,CAAN,CAAyD1B,EAAzD,CAA4D6B,GAA5D,CAAgE,IAAhE;AACD,KAJC,CAAF;AAKD,GA5GO,CAAR,CArMgC,CAmThC;;AACAjC,EAAAA,QAAQ,CAAC,kDAAD,EAAqD,MAAM;AACjE,UAAME,MAAM,GAAG,CACb;AACEY,MAAAA,GAAG,EAAE,sBADP,CAC8B;;AAD9B,KADa,CAAf;AAMA,UAAMS,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFyB,KAAf,CAApB;AAYA,UAAMW,aAAa,GAAG,IAAIJ,sBAAJ,CAAe;AACnCC,MAAAA,MAAM,EAAE,KAD2B;AAEnCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF2B,KAAf,CAAtB;AAoBA,UAAMY,mBAAmB,GAAG,IAAIL,sBAAJ,CAAe;AACzCC,MAAAA,MAAM,EAAE,KADiC;AAEzCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG,EAcH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OAdG;AAFiC,KAAf,CAA5B;AA4BA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAY;AAC9C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBe,aAAnB,CAA/B;AACAhC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,mCAAD,EAAsC,YAAY;AAClD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBgB,mBAAnB,CAA/B;AACAjC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD,EAAkC,+BAAlC;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,wBAAD,EAA2B,YAAY;AACvC,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcN,aAAd,CAAN;AACAhC,MAAAA,MAAM,CAACgC,aAAa,CAACO,QAAd,CAAuBL,kBAAvB,CAAD,CAAN,CAAmD1B,EAAnD,CAAsD6B,GAAtD,CAA0D,IAA1D;AACD,KAJC,CAAF;AAMAhC,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcL,mBAAd,CAAN;AACAjC,MAAAA,MAAM,CAACiC,mBAAmB,CAACM,QAApB,CAA6BL,kBAA7B,CAAD,CAAN,CAAyD1B,EAAzD,CAA4D6B,GAA5D,CAAgE,IAAhE;AACD,KAJC,CAAF;AAKD,GA5GO,CAAR,CApTgC,CAkahC;;AACAjC,EAAAA,QAAQ,CAAC,8DAAD,EAAiE,MAAM;AAC7E,UAAME,MAAM,GAAG,CAAC,sBAAD,CAAf,CAD6E,CACpC;;AAEzC,UAAMqB,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFyB,KAAf,CAApB;AAYA,UAAMW,aAAa,GAAG,IAAIJ,sBAAJ,CAAe;AACnCC,MAAAA,MAAM,EAAE,KAD2B;AAEnCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF2B,KAAf,CAAtB;AAoBA,UAAMY,mBAAmB,GAAG,IAAIL,sBAAJ,CAAe;AACzCC,MAAAA,MAAM,EAAE,KADiC;AAEzCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG,EAcH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OAdG;AAFiC,KAAf,CAA5B;AA4BA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAY;AAC9C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBe,aAAnB,CAA/B;AACAhC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,mCAAD,EAAsC,YAAY;AAClD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBgB,mBAAnB,CAA/B;AACAjC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD,EAAkC,+BAAlC;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,wBAAD,EAA2B,YAAY;AACvC,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcN,aAAd,CAAN;AACAhC,MAAAA,MAAM,CAACgC,aAAa,CAACO,QAAd,CAAuBL,kBAAvB,CAAD,CAAN,CAAmD1B,EAAnD,CAAsD6B,GAAtD,CAA0D,IAA1D;AACD,KAJC,CAAF;AAMAhC,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcL,mBAAd,CAAN;AACAjC,MAAAA,MAAM,CAACiC,mBAAmB,CAACM,QAApB,CAA6BL,kBAA7B,CAAD,CAAN,CAAyD1B,EAAzD,CAA4D6B,GAA5D,CAAgE,IAAhE;AACD,KAJC,CAAF;AAKD,GAxGO,CAAR,CAnagC,CA8gBhC;;AACAjC,EAAAA,QAAQ,CAAC,yCAAD,EAA4C,MAAM;AACxD,UAAME,MAAM,GAAG,CACb;AACEY,MAAAA,GAAG,EAAE,QADP;AAEEC,MAAAA,SAAS,EAAE,CAAC;AAACC,QAAAA,IAAI,EAAE,IAAP;AAAaC,QAAAA,KAAK,EAAE;AAApB,OAAD;AAFb,KADa,CAAf;AAOA,UAAMM,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAFyB,KAAf,CAApB;AAoBA,UAAMW,aAAa,GAAG,IAAIJ,sBAAJ,CAAe;AACnCC,MAAAA,MAAM,EAAE,KAD2B;AAEnCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF2B,KAAf,CAAtB;AAoBA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAY;AAC9C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBe,aAAnB,CAA/B;AACAhC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,wBAAD,EAA2B,YAAY;AACvC,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcN,aAAd,CAAN;AACAhC,MAAAA,MAAM,CAACgC,aAAa,CAACO,QAAd,CAAuBL,kBAAvB,CAAD,CAAN,CAAmD1B,EAAnD,CAAsD6B,GAAtD,CAA0D,IAA1D;AACD,KAJC,CAAF;AAKD,GA7EO,CAAR,CA/gBgC,CA8lBhC;;AACAjC,EAAAA,QAAQ,CAAC,mDAAD,EAAsD,MAAM;AAClE,UAAME,MAAM,GAAG,CACb;AACEY,MAAAA,GAAG,EAAE,sBADP;AAC+B;AAC7BC,MAAAA,SAAS,EAAE,CAAC;AAACC,QAAAA,IAAI,EAAE,MAAP;AAAeC,QAAAA,KAAK,EAAE;AAAtB,OAAD,CAFb,CAEmE;;AAFnE,KADa,CAAf;AAOA,UAAMM,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAFyB,KAAf,CAApB;AAoBA,UAAMW,aAAa,GAAG,IAAIJ,sBAAJ,CAAe;AACnCC,MAAAA,MAAM,EAAE,KAD2B;AAEnCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF2B,KAAf,CAAtB;AAoBA,UAAMmB,kBAAkB,GAAG,IAAIZ,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJV,OANG,EAWH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJV,OAXG,EAgBH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJV,OAhBG,EAqBH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJV,OArBG,EA0BH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJV,OA1BG;AAFgC,KAAf,CAA3B;AAqCA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,+BAAD,EAAkC,YAAY;AAC9C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBe,aAAnB,CAA/B;AACAhC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,iCAAD,EAAoC,YAAY;AAChD,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBuB,kBAAnB,CAA/B;AACAxC,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CACtD,+BADsD,EAEtD,+BAFsD,EAGtD,+BAHsD,EAItD,+BAJsD,EAKtD,+BALsD;AAAxB,OAAhC;AAOD,KAVC,CAAF;AAYA/B,IAAAA,EAAE,CAAC,8BAAD,EAAiC,YAAY;AAC7C,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcE,kBAAd,CAAN;AACAxC,MAAAA,MAAM,CAACwC,kBAAkB,CAACD,QAAnB,CAA4BL,kBAA5B,CAAD,CAAN,CAAwD1B,EAAxD,CAA2D6B,GAA3D,CAA+D,IAA/D;AACD,KAJC,CAAF;AAMAhC,IAAAA,EAAE,CAAC,wBAAD,EAA2B,YAAY;AACvC,YAAME,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAMC,SAAS,CAAC+B,GAAV,CAAcN,aAAd,CAAN;AACAhC,MAAAA,MAAM,CAACgC,aAAa,CAACO,QAAd,CAAuBL,kBAAvB,CAAD,CAAN,CAAmD1B,EAAnD,CAAsD6B,GAAtD,CAA0D,IAA1D;AACD,KAJC,CAAF;AAKD,GApIO,CAAR,CA/lBgC,CAquBhC;;AACAjC,EAAAA,QAAQ,CAAC,iCAAD,EAAoC,MAAM;AAChD,UAAMqC,SAAS,GAAG,CAChB;AACEvB,MAAAA,GAAG,EAAE,QADP;AAEEO,MAAAA,IAAI,EAAE,MAFR;AAGEM,MAAAA,IAAI,EAAE;AAHR,KADgB,CAAlB;AAQA,UAAMW,WAAW,GAAG,CAClB;AACExB,MAAAA,GAAG,EAAE,QADP;AAEEG,MAAAA,KAAK,EAAE;AAFT,KADkB,CAApB;AAOA,UAAMM,WAAW,GAAG,IAAIC,sBAAJ,CAAe;AACjCC,MAAAA,MAAM,EAAE,KADyB;AAEjCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJb,OADM;AAFyB,KAAf,CAApB;AAeA,UAAMsB,gBAAgB,GAAG,IAAIf,sBAAJ,CAAe;AACtCC,MAAAA,MAAM,EAAE,KAD8B;AAEtCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDO,QAAAA,IAAI,EAAE,GAFL;AAGDM,QAAAA,IAAI,EAAE,GAHL;AAIDZ,QAAAA,SAAS,EAAE,CACT;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SADS,EAET;AAACD,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAFS;AAJV,OANG;AAF8B,KAAf,CAAzB;AAoBA,UAAMuB,kBAAkB,GAAG,IAAIhB,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM,EAMH;AACDH,QAAAA,GAAG,EAAE,KADJ;AAEDG,QAAAA,KAAK,EAAE;AAFN,OANG;AAFgC,KAAf,CAA3B;AAeA,UAAMa,kBAAkB,GAAG,IAAIN,sBAAJ,CAAe;AACxCC,MAAAA,MAAM,EAAE,KADgC;AAExCC,MAAAA,MAAM,EAAE,CACN;AACEZ,QAAAA,GAAG,EAAE,KADP;AAEEO,QAAAA,IAAI,EAAE,GAFR;AAGEM,QAAAA,IAAI,EAAE,GAHR;AAIEZ,QAAAA,SAAS,EAAE,CAAC;AAACC,UAAAA,IAAI,EAAE,GAAP;AAAYC,UAAAA,KAAK,EAAE;AAAnB,SAAD;AAJb,OADM;AAFgC,KAAf,CAA3B;AAYAhB,IAAAA,EAAE,CAAC,oCAAD,EAAuC,YAAY;AACnD,YAAME,SAAS,GAAG,MAAM,6BAAiBkC,SAAjB,CAAxB;AACA,YAAM;AAACN,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,gCAAD,EAAmC,YAAY;AAC/C,YAAME,SAAS,GAAG,MAAM,6BAAiBmC,WAAjB,CAAxB;AACA,YAAM;AAACP,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmBU,WAAnB,CAA/B;AACA3B,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,IAAR;AAAcC,QAAAA,OAAO,EAAE;AAAvB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,gCAAD,EAAmC,YAAY;AAC/C,YAAME,SAAS,GAAG,MAAM,6BAAiBkC,SAAjB,CAAxB;AACA,YAAM;AAACN,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmB0B,gBAAnB,CAA/B;AACA3C,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,kCAAD,EAAqC,YAAY;AACjD,YAAME,SAAS,GAAG,MAAM,6BAAiBmC,WAAjB,CAAxB;AACA,YAAM;AAACP,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmB2B,kBAAnB,CAA/B;AACA5C,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAJC,CAAF;AAMA/B,IAAAA,EAAE,CAAC,8BAAD,EAAiC,YAAY;AAC7C,YAAME,SAAS,GAAG,MAAM,6BAAiBkC,SAAjB,CAAxB;AACA,YAAMlC,SAAS,CAAC+B,GAAV,CAAcK,gBAAd,CAAN;AACA3C,MAAAA,MAAM,CAAC2C,gBAAgB,CAACJ,QAAjB,CAA0BL,kBAA1B,CAAD,CAAN,CAAsD1B,EAAtD,CAAyD6B,GAAzD,CAA6D,IAA7D;AACD,KAJC,CAAF;AAMAhC,IAAAA,EAAE,CAAC,gCAAD,EAAmC,YAAY;AAC/C,YAAME,SAAS,GAAG,MAAM,6BAAiBmC,WAAjB,CAAxB;AACA,YAAMnC,SAAS,CAAC+B,GAAV,CAAcM,kBAAd,CAAN;AACA5C,MAAAA,MAAM,CAAC4C,kBAAkB,CAACL,QAAnB,CAA4BL,kBAA5B,CAAD,CAAN,CAAwD1B,EAAxD,CAA2D6B,GAA3D,CAA+D,IAA/D;AACD,KAJC,CAAF;AAKD,GAjHO,CAAR;AAmHAjC,EAAAA,QAAQ,CAAC,cAAD,EAAiB,MAAM;AAC7BC,IAAAA,EAAE,CAAC,qDAAD,EAAwD,YAAY;AACpE,YAAMC,MAAM,GAAG,CACb;AACEY,QAAAA,GAAG,EAAE,QADP;AAEE2B,QAAAA,YAAY,EAAE,CAAC;AAAChB,UAAAA,MAAM,EAAE;AAAT,SAAD;AAFhB,OADa,CAAf;AAOA,YAAMiB,MAAM,GAAG,IAAIlB,sBAAJ,CAAe;AAC5BC,QAAAA,MAAM,EAAE,0BADoB;AAE5BC,QAAAA,MAAM,EAAE,CACN;AACEZ,UAAAA,GAAG,EAAE,KADP;AAEEO,UAAAA,IAAI,EAAE,GAFR;AAGEM,UAAAA,IAAI,EAAE,GAHR;AAIEZ,UAAAA,SAAS,EAAE,CAAC;AAACC,YAAAA,IAAI,EAAE,GAAP;AAAYC,YAAAA,KAAK,EAAE;AAAnB,WAAD;AAJb,SADM;AAFoB,OAAf,CAAf;AAYA,YAAMd,SAAS,GAAG,MAAM,6BAAiBD,MAAjB,CAAxB;AACA,YAAM;AAAC6B,QAAAA,KAAD;AAAQC,QAAAA;AAAR,UAAmB,MAAM7B,SAAS,CAACU,QAAV,CAAmB6B,MAAnB,CAA/B;AAEA9C,MAAAA,MAAM,CAAC;AAACmC,QAAAA,KAAD;AAAQC,QAAAA;AAAR,OAAD,CAAN,CAAyB5B,EAAzB,CAA4B6B,GAA5B,CAAgC;AAACF,QAAAA,KAAK,EAAE,KAAR;AAAeC,QAAAA,OAAO,EAAE,CAAC,+BAAD;AAAxB,OAAhC;AACD,KAxBC,CAAF;AAyBD,GA1BO,CAAR;AA2BD,CAp3BO,CAAR","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/field-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('field-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [/^500$/u];\n\n const validator = await validatorFactory(config);\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Creates a validator from complex config', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const validator = await validatorFactory(config);\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Fails to create a validator from invalid config - tag', async () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - msising array', async () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');\n }\n });\n\n it('Fails to create a validator from invalid config - code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: code');\n }\n });\n\n it('Fails to create a validator from invalid config - value', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: value');\n }\n });\n\n it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n const config = [\n {\n tag: /^500$/u,\n value: /^500$/u,\n ind1: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: array', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n ['/9/', '/^(?!FENNI<KEEP>).*$/'],\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: string', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n '/9/',\n '/^(?!FENNI<KEEP>).*$/',\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: code');\n }\n });\n\n it('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {\n const config = [\n {\n tag: /^500$/u,\n unidentified: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: unidentified');\n }\n });\n });\n\n // Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration - No object (spec)', () => {\n const config = [/^(648|650|651|655)$/u]; // eslint-disable-line prefer-named-capture-group\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Complex multi tag configuration\n describe('#validate: Complex multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u, // eslint-disable-line prefer-named-capture-group\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}] // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'yso'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'ysa'}\n ]\n }\n ]\n });\n\n const recordInvalidMulti = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '651',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $650 should be excluded']});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidMulti);\n expect({valid, message}).to.eql({valid: false, message: [\n 'Field $648 should be excluded',\n 'Field $650 should be excluded',\n 'Field $650 should be excluded',\n 'Field $651 should be excluded',\n 'Field $655 should be excluded'\n ]});\n });\n\n it('Repairs invalid multi record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidMulti);\n expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // More special cases to increase coverage\n describe('#validate: Custom configuration', () => {\n const configInd = [\n {\n tag: /^500$/u,\n ind1: /^8$/u,\n ind2: /^4$/u\n }\n ];\n\n const configValue = [\n {\n tag: /^500$/u,\n value: /^8$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '500',\n ind1: '8',\n ind2: '0',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordIndInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: '8',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordValueInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n value: '8'\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record valid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordIndInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValueInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record - Ind', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - Value', async () => {\n const validator = await validatorFactory(configValue);\n await validator.fix(recordValueInvalid);\n expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n describe('Dependencies', () => {\n it('Finds the record invalid because dependency matches', async () => {\n const config = [\n {\n tag: /^041$/u,\n dependencies: [{leader: /^.{6}a/u}]\n }\n ];\n\n const record = new MarcRecord({\n leader: '00000cam^a22003372i^4500',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(record);\n\n expect({valid, message}).to.eql({valid: false, message: ['Field $041 should be excluded']});\n });\n });\n});\n"],"file":"field-exclusion.spec.js"}
1
+ {"version":3,"file":"field-exclusion.spec.js","names":["expect","chai","use","chaiAsPromised","describe","it","config","validator","to","be","an","that","has","any","keys","description","a","validate","tag","subfields","code","value","error","with","property","ind1","unidentified","recordValid","MarcRecord","leader","fields","ind2","recordInvalid","recordInvalidDouble","recordInvalidFixed","valid","message","eql","fix","equalsTo","recordInvalidMulti","configInd","configValue","recordIndInvalid","recordValueInvalid","dependencies","record"],"sources":["../src/field-exclusion.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/field-exclusion';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\n// Factory validation\ndescribe('field-exclusion', () => {\n describe('#validate: Check configuration validation', () => {\n it('Creates a validator from simple config', async () => {\n const config = [/^500$/u];\n\n const validator = await validatorFactory(config);\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Creates a validator from complex config', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const validator = await validatorFactory(config);\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n it('Fails to create a validator from invalid config - tag', async () => {\n const config = [\n {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - msising array', async () => {\n const config = {\n tag: '500',\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n };\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration array not provided');\n }\n });\n\n it('Fails to create a validator from invalid config - code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: 9, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: code');\n }\n });\n\n it('Fails to create a validator from invalid config - value', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: 'Fenni'}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - invalid data type for: value');\n }\n });\n\n it('Fails to create a validator from invalid config - exclusion: value, ind1', async () => {\n const config = [\n {\n tag: /^500$/u,\n value: /^500$/u,\n ind1: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - excluded element');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: tag', async () => {\n const config = [\n {\n value: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: tag');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: array', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n ['/9/', '/^(?!FENNI<KEEP>).*$/'],\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/,/^(?!FENNI<KEEP>).*$/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - subfield not object: string', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n '/9/',\n '/^(?!FENNI<KEEP>).*$/',\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - subfield: /9/ not object');\n }\n });\n\n it('Fails to create a validator from invalid config - missing mandatory: subfield.code', async () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - missing mandatory element: code');\n }\n });\n\n it('Fails to create a validator from invalid config - unidentified field: unidentified', async () => {\n const config = [\n {\n tag: /^500$/u,\n unidentified: /^500$/u,\n subfields: [\n {code: /9/u, value: /^(?!FENNI<KEEP>).*$/u},\n {value: /^(?!FENNI<KEEP>).*$/u}\n ]\n }\n ];\n\n try {\n await validatorFactory(config);\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'Configuration not valid - unidentified value: unidentified');\n }\n });\n });\n\n // Simple configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Simple configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded', 'Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Simple multi tag configuration\n describe('#validate: Simple multi tag configuration - No object (spec)', () => {\n const config = [/^(648|650|651|655)$/u]; // eslint-disable-line prefer-named-capture-group\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidDouble = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded']});\n });\n\n it('Finds the record invalid - double', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidDouble);\n expect({valid, message}).to.eql({valid: false, message: ['Field $648 should be excluded', 'Field $650 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - double', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidDouble);\n expect(recordInvalidDouble.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n\n // Complex configuration https://github.com/NatLibFi/marc-record-validators-melinda/issues/45\n describe('#validate: Complex configuration (spec)', () => {\n const config = [\n {\n tag: /^500$/u,\n subfields: [{code: /9/u, value: /^(?!FENNI<KEEP>).*$/u}]\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // Complex multi tag configuration\n describe('#validate: Complex multi tag configuration (spec)', () => {\n const config = [\n {\n tag: /^(648|650|651|655)$/u, // eslint-disable-line prefer-named-capture-group\n subfields: [{code: /^2$/u, value: /^(ysa|musa|allars|cilla)$/u}] // eslint-disable-line prefer-named-capture-group\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'yso'}\n ]\n }\n ]\n });\n\n const recordInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '2', value: 'ysa'}\n ]\n }\n ]\n });\n\n const recordInvalidMulti = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '648',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '650',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '651',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }, {\n tag: '655',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: '2', value: 'ysa'}]\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $650 should be excluded']});\n });\n\n it('Finds the record invalid (spec)', async () => {\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(recordInvalidMulti);\n expect({valid, message}).to.eql({valid: false, message: [\n 'Field $648 should be excluded',\n 'Field $650 should be excluded',\n 'Field $650 should be excluded',\n 'Field $651 should be excluded',\n 'Field $655 should be excluded'\n ]});\n });\n\n it('Repairs invalid multi record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalidMulti);\n expect(recordInvalidMulti.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record', async () => {\n const validator = await validatorFactory(config);\n await validator.fix(recordInvalid);\n expect(recordInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n // More special cases to increase coverage\n describe('#validate: Custom configuration', () => {\n const configInd = [\n {\n tag: /^500$/u,\n ind1: /^8$/u,\n ind2: /^4$/u\n }\n ];\n\n const configValue = [\n {\n tag: /^500$/u,\n value: /^8$/u\n }\n ];\n\n const recordValid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '500',\n ind1: '8',\n ind2: '0',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordIndInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n ind1: '8',\n ind2: '4',\n subfields: [\n {code: 'a', value: 'Foo Bar Foo Bar Foo Bar'},\n {code: '9', value: 'ALMA<KEEP>'}\n ]\n }\n ]\n });\n\n const recordValueInvalid = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }, {\n tag: '500',\n value: '8'\n }\n ]\n });\n\n const recordInvalidFixed = new MarcRecord({\n leader: 'foo',\n fields: [\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n it('Finds the record valid - Ind1&Ind2', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record valid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValid);\n expect({valid, message}).to.eql({valid: true, message: []});\n });\n\n it('Finds the record invalid - Ind', async () => {\n const validator = await validatorFactory(configInd);\n const {valid, message} = await validator.validate(recordIndInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Finds the record invalid - Value', async () => {\n const validator = await validatorFactory(configValue);\n const {valid, message} = await validator.validate(recordValueInvalid);\n expect({valid, message}).to.eql({valid: false, message: ['Field $500 should be excluded']});\n });\n\n it('Repairs invalid record - Ind', async () => {\n const validator = await validatorFactory(configInd);\n await validator.fix(recordIndInvalid);\n expect(recordIndInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n\n it('Repairs invalid record - Value', async () => {\n const validator = await validatorFactory(configValue);\n await validator.fix(recordValueInvalid);\n expect(recordValueInvalid.equalsTo(recordInvalidFixed)).to.eql(true);\n });\n });\n\n describe('Dependencies', () => {\n it('Finds the record invalid because dependency matches', async () => {\n const config = [\n {\n tag: /^041$/u,\n dependencies: [{leader: /^.{6}a/u}]\n }\n ];\n\n const record = new MarcRecord({\n leader: '00000cam^a22003372i^4500',\n fields: [\n {\n tag: '041',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'a', value: 'Fubar'}]\n }\n ]\n });\n\n const validator = await validatorFactory(config);\n const {valid, message} = await validator.validate(record);\n\n expect({valid, message}).to.eql({valid: false, message: ['Field $041 should be excluded']});\n });\n });\n});\n"],"mappings":"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"}
@@ -4,34 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
- /**
9
- *
10
- * @licstart The following is the entire license notice for the JavaScript code in this file.
11
- *
12
- * MARC record validators used in Melinda
13
- *
14
- * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
15
- *
16
- * This file is part of marc-record-validators-melinda
17
- *
18
- * marc-record-validators-melinda program is free software: you can redistribute it and/or modify
19
- * it under the terms of the GNU Lesser General Public License as
20
- * published by the Free Software Foundation, either version 3 of the
21
- * License, or (at your option) any later version.
22
- *
23
- * marc-record-validators-melinda is distributed in the hope that it will be useful,
24
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
25
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26
- * GNU Lesser General Public License for more details.
27
- *
28
- * You should have received a copy of the GNU Lesser General Public License
29
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
30
- *
31
- * @licend The above is the entire license notice
32
- * for the JavaScript code in this file.
33
- *
34
- */
35
7
  // Configuration specification
36
8
  const confSpec = {
37
9
  leader: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/field-structure.js"],"names":["confSpec","leader","type","excl","tag","valuePattern","ind1","ind2","strict","subfields","contains","dependencies","subSpec","pattern","required","maxOccurrence","depSpec","RegExp","Object","forEach","obj","fun","entries","config","Array","isArray","TypeError","configValid","description","validate","record","valid","recordMatchesConfig","excluded","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","conf","res","every","confObj","dependency","recordMatchesConfigElement","searchedField","foundFields","get","length","recordSubObj","keys","confField","test","value","elementsTotal","some","matching","filter","code","maxOccurrenceFine","isRequiredFine","valuePatternFine","field","console","log"],"mappings":"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","sourcesContent":["/**\n *\n * @licstart The following is the entire license notice for the JavaScript code in this file.\n *\n * MARC record validators used in Melinda\n *\n * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)\n *\n * This file is part of marc-record-validators-melinda\n *\n * marc-record-validators-melinda program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Lesser General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * marc-record-validators-melinda is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Lesser General Public License for more details.\n *\n * You should have received a copy of the GNU Lesser General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n * @licend The above is the entire license notice\n * for the JavaScript code in this file.\n *\n */\n\n\n// Configuration specification\nconst confSpec = {\n leader: { // Description: Leader pattern\n type: 'RegExp',\n excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']\n },\n tag: { // Description: Field tag pattern\n type: 'RegExp',\n excl: ['leader']\n },\n valuePattern: { // Description: Pattern to which the field's value must match against\n type: 'RegExp',\n excl: ['leader', 'subfields', 'ind1', 'ind2']\n },\n ind1: { // Description: Indicator-specific configuration object\n type: 'RegExp', // Array<Indicator>\n excl: ['leader', 'value']\n },\n ind2: { // Description: Indicator-specific configuration object\n type: 'RegExp', // Array<Indicator>\n excl: ['leader', 'value']\n },\n strict: { // Description: Only the specified subfields are allowed if set to true. Defaults to false.\n type: 'boolean',\n excl: ['leader', 'valuePattern']\n },\n subfields: { // Description: Subfields configuration\n type: 'object', // Object<String, Subfield> (Keys are subfield codes)\n contains: ['String', 'subfieldSpec'],\n excl: ['leader', 'value']\n },\n dependencies: { // Description: Dependencies configuration\n type: 'array', // Array<Dependency>\n contains: 'dependencySpec'\n }\n};\n\n// Subfiled specification\nconst subSpec = {\n pattern: { // Description: Pattern to which the subfield's value must match against\n type: 'RegExp'\n },\n required: { // Description: Whether the subfield is mandatory or not. Defaults to false\n type: 'boolean'\n },\n maxOccurrence: { // Description: Maximum number of times this subfield can occur. Defaults to unlimited if omitted. The value 0 means that the subfield cannot exist.\n type: 'number'\n }\n};\n\n// Dependency specification\nconst depSpec = {\n leader: { // Description: Leader pattern\n type: 'RegExp',\n excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']\n },\n tag: { // Description: Field tag pattern\n type: RegExp,\n excl: ['leader']\n },\n ind1: { // Description: Pattern to which the indicator must match against\n type: RegExp,\n excl: ['value', 'leader']\n },\n ind2: { // Description: Pattern to which the indicator must match against\n type: RegExp,\n excl: ['value', 'leader']\n },\n valuePattern: { // Description: Pattern to which the field's value must match agains\n type: RegExp,\n excl: ['subfields', 'ind1', 'ind2', 'leader']\n },\n subfields: { // Description: An object with subfield codes as keys and RegExp patterns as values. The subfield value must this pattern.\n type: Object, // [String, RegExp]\n required: false\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Check whether the configured fields have valid structure',\n validate: record => ({\n valid: recordMatchesConfig(record, config, false)\n })\n };\n\n // This checks that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !(data instanceof RegExp))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields/dependencies recursively\n if (key === 'subfields' || key === 'dependencies') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n if (typeof subObj === 'object') { // eslint-disable-line functional/no-conditional-statement\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, key === 'subfields' ? subSpec : depSpec);\n });\n } else {\n throw new TypeError(`Configuration not valid - ${key} not object`);\n }\n });\n }\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // This is used to validate record against configuration\n function recordMatchesConfig(record, conf, dependencies) {\n // Parse trough every element of config array\n const res = conf.every(confObj => {\n if (confObj.dependencies) {\n if (confObj.dependencies.every(dependency => recordMatchesConfigElement(record, dependency.tag, dependency, dependencies))) {\n return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);\n }\n\n return true;\n }\n\n return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);\n });\n\n return res;\n }\n\n // Recursive validation function\n function recordMatchesConfigElement(record, searchedField, confObj, dependencies) {\n const foundFields = record.get(searchedField);\n // If field has dependencies and fields matching configuration is not found\n if (foundFields.length === 0 && confObj.dependencies) {\n return false;\n }\n\n // Parse trough record objects matching provided configuration object\n // Check that every configuration field exists in record and matches configuration\n return foundFields.every(recordSubObj => Object.keys(confObj).every(confField => {\n // If configuration field is RegExp, test that record field matches it (valuePattern, leader, tag, ind*)\n if (confObj[confField] instanceof RegExp) {\n // 'valuePattern' RegExp in conf spec is used to validate 'value' in marc\n if (confField === 'valuePattern') {\n return confObj[confField].test(recordSubObj.value);\n }\n\n if (confField === 'leader') {\n return confObj[confField].test(record.leader);\n }\n\n return confObj[confField].test(recordSubObj[confField]);\n }\n\n // Only the specified subfields are allowed if set to true. Defaults to false. (this is checked at subfields)\n if (confField === 'strict') {\n return true;\n }\n\n // Check that subfield stuff\n if (confField === 'subfields') {\n const strict = confObj.strict || false; // Defaults to false\n let elementsTotal = 0; // eslint-disable-line functional/no-let\n const valid = !Object.entries(confObj.subfields).some(([key, val]) => {\n const matching = recordSubObj.subfields.filter(({code}) => code === key);\n elementsTotal += matching.length; // Calculate amount of record objects matching all confObj objects\n\n const maxOccurrenceFine = matching.length > val.maxOccurrence;\n const isRequiredFine = (val.required || dependencies) && matching.length === 0;\n const valuePatternFine = val.pattern && !matching.every(field => val.pattern.test(field.value));\n return maxOccurrenceFine || isRequiredFine || valuePatternFine;\n });\n\n // Check if there is less valid calculated objects than objects in subfield object => some not matching strict\n return !(strict && elementsTotal < recordSubObj.subfields.length) && valid;\n }\n\n // Recursive check for dependicies\n if (confField === 'dependencies') {\n return recordMatchesConfig(record, confObj[confField], true);\n }\n\n // This should not be reached as configuration is validated\n\n console.log('!!! Configuration field not identified: ', recordSubObj[confField], ' | ', typeof recordSubObj[confField]); // eslint-disable-line no-console\n return false;\n }));\n }\n}\n"],"file":"field-structure.js"}
1
+ {"version":3,"file":"field-structure.js","names":["confSpec","leader","type","excl","tag","valuePattern","ind1","ind2","strict","subfields","contains","dependencies","subSpec","pattern","required","maxOccurrence","depSpec","RegExp","Object","forEach","obj","fun","entries","config","Array","isArray","TypeError","configValid","description","validate","record","valid","recordMatchesConfig","excluded","key","val","configMatchesSpec","push","includes","Error","data","spec","subObj","subKey","subVal","conf","res","every","confObj","dependency","recordMatchesConfigElement","searchedField","foundFields","get","length","recordSubObj","keys","confField","test","value","elementsTotal","some","matching","filter","code","maxOccurrenceFine","isRequiredFine","valuePatternFine","field","console","log"],"sources":["../src/field-structure.js"],"sourcesContent":["// Configuration specification\nconst confSpec = {\n leader: { // Description: Leader pattern\n type: 'RegExp',\n excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']\n },\n tag: { // Description: Field tag pattern\n type: 'RegExp',\n excl: ['leader']\n },\n valuePattern: { // Description: Pattern to which the field's value must match against\n type: 'RegExp',\n excl: ['leader', 'subfields', 'ind1', 'ind2']\n },\n ind1: { // Description: Indicator-specific configuration object\n type: 'RegExp', // Array<Indicator>\n excl: ['leader', 'value']\n },\n ind2: { // Description: Indicator-specific configuration object\n type: 'RegExp', // Array<Indicator>\n excl: ['leader', 'value']\n },\n strict: { // Description: Only the specified subfields are allowed if set to true. Defaults to false.\n type: 'boolean',\n excl: ['leader', 'valuePattern']\n },\n subfields: { // Description: Subfields configuration\n type: 'object', // Object<String, Subfield> (Keys are subfield codes)\n contains: ['String', 'subfieldSpec'],\n excl: ['leader', 'value']\n },\n dependencies: { // Description: Dependencies configuration\n type: 'array', // Array<Dependency>\n contains: 'dependencySpec'\n }\n};\n\n// Subfiled specification\nconst subSpec = {\n pattern: { // Description: Pattern to which the subfield's value must match against\n type: 'RegExp'\n },\n required: { // Description: Whether the subfield is mandatory or not. Defaults to false\n type: 'boolean'\n },\n maxOccurrence: { // Description: Maximum number of times this subfield can occur. Defaults to unlimited if omitted. The value 0 means that the subfield cannot exist.\n type: 'number'\n }\n};\n\n// Dependency specification\nconst depSpec = {\n leader: { // Description: Leader pattern\n type: 'RegExp',\n excl: ['tag', 'valuePattern', 'subfields', 'ind1', 'ind2']\n },\n tag: { // Description: Field tag pattern\n type: RegExp,\n excl: ['leader']\n },\n ind1: { // Description: Pattern to which the indicator must match against\n type: RegExp,\n excl: ['value', 'leader']\n },\n ind2: { // Description: Pattern to which the indicator must match against\n type: RegExp,\n excl: ['value', 'leader']\n },\n valuePattern: { // Description: Pattern to which the field's value must match agains\n type: RegExp,\n excl: ['subfields', 'ind1', 'ind2', 'leader']\n },\n subfields: { // Description: An object with subfield codes as keys and RegExp patterns as values. The subfield value must this pattern.\n type: Object, // [String, RegExp]\n required: false\n }\n};\n\nfunction forEach(obj, fun) {\n Object.entries(obj).forEach(fun);\n}\n\nexport default function (config) {\n if (!Array.isArray(config)) {\n throw new TypeError('Configuration array not provided');\n }\n\n configValid(config);\n\n return {\n description:\n 'Check whether the configured fields have valid structure',\n validate: record => ({\n valid: recordMatchesConfig(record, config, false)\n })\n };\n\n // This checks that configuration is valid\n function configValid(config) {\n config.forEach(obj => {\n const excluded = []; // Validate fields: check that they are valid to confSpec (exists, correct data type), concat excluded elements\n\n forEach(obj, ([key, val]) => {\n configMatchesSpec(val, key, confSpec);\n\n // Concat all excluded elements to array\n if (confSpec[key].excl) { // eslint-disable-line functional/no-conditional-statement\n excluded.push(...confSpec[key].excl); // eslint-disable-line functional/immutable-data\n }\n });\n\n // Check that no excluded elements are in use\n forEach(obj, ([key]) => {\n if (excluded.includes(key)) {\n throw new Error('Configuration not valid - excluded element');\n }\n });\n });\n }\n\n // Recursive validator\n function configMatchesSpec(data, key, spec) {\n // Field not found in configuration spec\n if (!spec[key]) {\n throw new Error(`Configuration not valid - unidentified value: ${key}`);\n }\n\n // If configuration type does not match type in configuration spec\n if (typeof data !== spec[key].type &&\n (spec[key].type === 'RegExp' && !(data instanceof RegExp))) {\n throw new Error(`Configuration not valid - invalid data type for: ${key}`);\n }\n\n // Check subfields/dependencies recursively\n if (key === 'subfields' || key === 'dependencies') { // eslint-disable-line functional/no-conditional-statement\n forEach(data, ([, subObj]) => {\n if (typeof subObj === 'object') { // eslint-disable-line functional/no-conditional-statement\n forEach(subObj, ([subKey, subVal]) => {\n configMatchesSpec(subVal, subKey, key === 'subfields' ? subSpec : depSpec);\n });\n } else {\n throw new TypeError(`Configuration not valid - ${key} not object`);\n }\n });\n }\n }\n /// /////////////////////////////////////////\n\n /// /////////////////////////////////////////\n // This is used to validate record against configuration\n function recordMatchesConfig(record, conf, dependencies) {\n // Parse trough every element of config array\n const res = conf.every(confObj => {\n if (confObj.dependencies) {\n if (confObj.dependencies.every(dependency => recordMatchesConfigElement(record, dependency.tag, dependency, dependencies))) {\n return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);\n }\n\n return true;\n }\n\n return recordMatchesConfigElement(record, confObj.tag, confObj, dependencies);\n });\n\n return res;\n }\n\n // Recursive validation function\n function recordMatchesConfigElement(record, searchedField, confObj, dependencies) {\n const foundFields = record.get(searchedField);\n // If field has dependencies and fields matching configuration is not found\n if (foundFields.length === 0 && confObj.dependencies) {\n return false;\n }\n\n // Parse trough record objects matching provided configuration object\n // Check that every configuration field exists in record and matches configuration\n return foundFields.every(recordSubObj => Object.keys(confObj).every(confField => {\n // If configuration field is RegExp, test that record field matches it (valuePattern, leader, tag, ind*)\n if (confObj[confField] instanceof RegExp) {\n // 'valuePattern' RegExp in conf spec is used to validate 'value' in marc\n if (confField === 'valuePattern') {\n return confObj[confField].test(recordSubObj.value);\n }\n\n if (confField === 'leader') {\n return confObj[confField].test(record.leader);\n }\n\n return confObj[confField].test(recordSubObj[confField]);\n }\n\n // Only the specified subfields are allowed if set to true. Defaults to false. (this is checked at subfields)\n if (confField === 'strict') {\n return true;\n }\n\n // Check that subfield stuff\n if (confField === 'subfields') {\n const strict = confObj.strict || false; // Defaults to false\n let elementsTotal = 0; // eslint-disable-line functional/no-let\n const valid = !Object.entries(confObj.subfields).some(([key, val]) => {\n const matching = recordSubObj.subfields.filter(({code}) => code === key);\n elementsTotal += matching.length; // Calculate amount of record objects matching all confObj objects\n\n const maxOccurrenceFine = matching.length > val.maxOccurrence;\n const isRequiredFine = (val.required || dependencies) && matching.length === 0;\n const valuePatternFine = val.pattern && !matching.every(field => val.pattern.test(field.value));\n return maxOccurrenceFine || isRequiredFine || valuePatternFine;\n });\n\n // Check if there is less valid calculated objects than objects in subfield object => some not matching strict\n return !(strict && elementsTotal < recordSubObj.subfields.length) && valid;\n }\n\n // Recursive check for dependicies\n if (confField === 'dependencies') {\n return recordMatchesConfig(record, confObj[confField], true);\n }\n\n // This should not be reached as configuration is validated\n\n console.log('!!! Configuration field not identified: ', recordSubObj[confField], ' | ', typeof recordSubObj[confField]); // eslint-disable-line no-console\n return false;\n }));\n }\n}\n"],"mappings":"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"}
@@ -10,33 +10,6 @@ var _fieldStructure = _interopRequireDefault(require("../src/field-structure"));
10
10
 
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
 
13
- /**
14
- *
15
- * @licstart The following is the entire license notice for the JavaScript code in this file.
16
- *
17
- * MARC record validators used in Melinda
18
- *
19
- * Copyright (c) 2014-2020 University Of Helsinki (The National Library Of Finland)
20
- *
21
- * This file is part of marc-record-validators-melinda
22
- *
23
- * marc-record-validators-melinda program is free software: you can redistribute it and/or modify
24
- * it under the terms of the GNU Lesser General Public License as
25
- * published by the Free Software Foundation, either version 3 of the
26
- * License, or (at your option) any later version.
27
- *
28
- * marc-record-validators-melinda is distributed in the hope that it will be useful,
29
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
30
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
31
- * GNU Lesser General Public License for more details.
32
- *
33
- * You should have received a copy of the GNU Lesser General Public License
34
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
35
- *
36
- * @licend The above is the entire license notice
37
- * for the JavaScript code in this file.
38
- *
39
- */
40
13
  const {
41
14
  expect
42
15
  } = _chai.default;