@natlibfi/marc-record-validators-melinda 11.2.2-alpha.1 → 11.2.2-alpha.2

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 (228) hide show
  1. package/dist/access-rights.spec.js +1 -1
  2. package/dist/access-rights.spec.js.map +1 -1
  3. package/dist/addMissingField041.js.map +1 -1
  4. package/dist/addMissingField041.spec.js +1 -1
  5. package/dist/addMissingField041.spec.js.map +1 -1
  6. package/dist/addMissingField336.js.map +1 -1
  7. package/dist/addMissingField336.spec.js +1 -1
  8. package/dist/addMissingField336.spec.js.map +1 -1
  9. package/dist/addMissingField337.js.map +1 -1
  10. package/dist/addMissingField337.spec.js +1 -1
  11. package/dist/addMissingField337.spec.js.map +1 -1
  12. package/dist/addMissingField338.js.map +1 -1
  13. package/dist/addMissingField338.spec.js +1 -1
  14. package/dist/addMissingField338.spec.js.map +1 -1
  15. package/dist/cyrillux-usemarcon-replacement.js +82 -22
  16. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  17. package/dist/cyrillux-usemarcon-replacement.spec.js +1 -1
  18. package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -1
  19. package/dist/double-commas.spec.js +1 -1
  20. package/dist/double-commas.spec.js.map +1 -1
  21. package/dist/duplicates-ind1.js.map +1 -1
  22. package/dist/duplicates-ind1.spec.js +1 -1
  23. package/dist/duplicates-ind1.spec.js.map +1 -1
  24. package/dist/empty-fields.js.map +1 -1
  25. package/dist/empty-fields.spec.js +1 -1
  26. package/dist/empty-fields.spec.js.map +1 -1
  27. package/dist/ending-punctuation.js +1 -1
  28. package/dist/ending-punctuation.js.map +1 -1
  29. package/dist/ending-punctuation.spec.js +1 -1
  30. package/dist/ending-punctuation.spec.js.map +1 -1
  31. package/dist/ending-whitespace.js.map +1 -1
  32. package/dist/ending-whitespace.spec.js +1 -1
  33. package/dist/ending-whitespace.spec.js.map +1 -1
  34. package/dist/field-008-18-34-character-groups.js +1 -1
  35. package/dist/field-008-18-34-character-groups.js.map +1 -1
  36. package/dist/field-008-18-34-character-groups.spec.js +1 -1
  37. package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
  38. package/dist/field-505-separators.js +1 -1
  39. package/dist/field-505-separators.js.map +1 -1
  40. package/dist/field-505-separators.spec.js +1 -1
  41. package/dist/field-505-separators.spec.js.map +1 -1
  42. package/dist/field-521-fix.js +1 -1
  43. package/dist/field-521-fix.js.map +1 -1
  44. package/dist/field-521-fix.spec.js +1 -1
  45. package/dist/field-521-fix.spec.js.map +1 -1
  46. package/dist/field-exclusion.js.map +1 -1
  47. package/dist/field-exclusion.spec.js +1 -1
  48. package/dist/field-exclusion.spec.js.map +1 -1
  49. package/dist/field-structure.js.map +1 -1
  50. package/dist/field-structure.spec.js +1 -1
  51. package/dist/field-structure.spec.js.map +1 -1
  52. package/dist/fields-present.spec.js +1 -1
  53. package/dist/fields-present.spec.js.map +1 -1
  54. package/dist/fix-33X.js +1 -1
  55. package/dist/fix-33X.js.map +1 -1
  56. package/dist/fix-33X.spec.js +1 -1
  57. package/dist/fix-33X.spec.js.map +1 -1
  58. package/dist/fix-country-codes.js.map +1 -1
  59. package/dist/fix-country-codes.spec.js +1 -1
  60. package/dist/fix-country-codes.spec.js.map +1 -1
  61. package/dist/fix-language-codes.js +1 -1
  62. package/dist/fix-language-codes.js.map +1 -1
  63. package/dist/fix-language-codes.spec.js +1 -1
  64. package/dist/fix-language-codes.spec.js.map +1 -1
  65. package/dist/fixRelatorTerms.js +6 -3
  66. package/dist/fixRelatorTerms.js.map +1 -1
  67. package/dist/fixRelatorTerms.spec.js +1 -1
  68. package/dist/fixRelatorTerms.spec.js.map +1 -1
  69. package/dist/fixed-fields.js.map +1 -1
  70. package/dist/fixed-fields.spec.js +1 -1
  71. package/dist/fixed-fields.spec.js.map +1 -1
  72. package/dist/identical-fields.js.map +1 -1
  73. package/dist/identical-fields.spec.js +1 -1
  74. package/dist/identical-fields.spec.js.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/indicator-fixes.js +17 -0
  78. package/dist/indicator-fixes.js.map +1 -1
  79. package/dist/indicator-fixes.spec.js +1 -1
  80. package/dist/indicator-fixes.spec.js.map +1 -1
  81. package/dist/isbn-issn.js +1 -1
  82. package/dist/isbn-issn.js.map +1 -1
  83. package/dist/isbn-issn.spec.js +1 -1
  84. package/dist/isbn-issn.spec.js.map +1 -1
  85. package/dist/item-language.js +1 -1
  86. package/dist/item-language.js.map +1 -1
  87. package/dist/item-language.spec.js +1 -1
  88. package/dist/item-language.spec.js.map +1 -1
  89. package/dist/mergeField500Lisapainokset.js.map +1 -1
  90. package/dist/mergeField500Lisapainokset.spec.js +1 -1
  91. package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
  92. package/dist/mergeRelatorTermFields.js +1 -1
  93. package/dist/mergeRelatorTermFields.js.map +1 -1
  94. package/dist/mergeRelatorTermFields.spec.js +1 -1
  95. package/dist/mergeRelatorTermFields.spec.js.map +1 -1
  96. package/dist/multiple-subfield-0.js.map +1 -1
  97. package/dist/multiple-subfield-0.spec.js +1 -1
  98. package/dist/multiple-subfield-0.spec.js.map +1 -1
  99. package/dist/non-breaking-space.js.map +1 -1
  100. package/dist/non-breaking-space.spec.js +1 -1
  101. package/dist/non-breaking-space.spec.js.map +1 -1
  102. package/dist/normalize-dashes.js +1 -1
  103. package/dist/normalize-dashes.js.map +1 -1
  104. package/dist/normalize-dashes.spec.js +1 -1
  105. package/dist/normalize-dashes.spec.js.map +1 -1
  106. package/dist/normalize-identifiers.js +1 -1
  107. package/dist/normalize-identifiers.js.map +1 -1
  108. package/dist/normalize-identifiers.spec.js +1 -1
  109. package/dist/normalize-identifiers.spec.js.map +1 -1
  110. package/dist/normalize-qualifying-information.js +1 -1
  111. package/dist/normalize-qualifying-information.js.map +1 -1
  112. package/dist/normalize-qualifying-information.spec.js +1 -1
  113. package/dist/normalize-qualifying-information.spec.js.map +1 -1
  114. package/dist/normalize-utf8-diacritics.js +1 -1
  115. package/dist/normalize-utf8-diacritics.js.map +1 -1
  116. package/dist/normalize-utf8-diacritics.spec.js +1 -1
  117. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  118. package/dist/normalizeFieldForComparison.js +1 -1
  119. package/dist/normalizeFieldForComparison.js.map +1 -1
  120. package/dist/normalizeSubfieldValueForComparison.js +1 -1
  121. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  122. package/dist/prepublicationUtils.js +1 -1
  123. package/dist/prepublicationUtils.js.map +1 -1
  124. package/dist/punctuation/index.js +1 -1
  125. package/dist/punctuation/index.js.map +1 -1
  126. package/dist/punctuation/rules/index.js +1 -1
  127. package/dist/punctuation/rules/index.js.map +1 -1
  128. package/dist/punctuation.spec.js +1 -1
  129. package/dist/punctuation.spec.js.map +1 -1
  130. package/dist/punctuation2.js +1 -1
  131. package/dist/punctuation2.js.map +1 -1
  132. package/dist/punctuation2.spec.js +1 -1
  133. package/dist/punctuation2.spec.js.map +1 -1
  134. package/dist/reindexSubfield6OccurenceNumbers.js +1 -1
  135. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  136. package/dist/reindexSubfield6OccurenceNumbers.spec.js +1 -1
  137. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
  138. package/dist/removeDuplicateDataFields.js +1 -1
  139. package/dist/removeDuplicateDataFields.js.map +1 -1
  140. package/dist/removeDuplicateDataFields.spec.js +1 -1
  141. package/dist/removeDuplicateDataFields.spec.js.map +1 -1
  142. package/dist/removeInferiorDataFields.js +1 -1
  143. package/dist/removeInferiorDataFields.js.map +1 -1
  144. package/dist/removeInferiorDataFields.spec.js +1 -1
  145. package/dist/removeInferiorDataFields.spec.js.map +1 -1
  146. package/dist/resolvable-ext-references-melinda.js +1 -1
  147. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  148. package/dist/resolvable-ext-references-melinda.spec.js +1 -1
  149. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  150. package/dist/resolveOrphanedSubfield6s.js +1 -1
  151. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  152. package/dist/resolveOrphanedSubfield6s.spec.js +1 -1
  153. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
  154. package/dist/sanitize-vocabulary-source-codes.js +5 -1
  155. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  156. package/dist/sanitize-vocabulary-source-codes.spec.js +1 -1
  157. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
  158. package/dist/sort-tags.spec.js +1 -1
  159. package/dist/sort-tags.spec.js.map +1 -1
  160. package/dist/sortFields.js +1 -1
  161. package/dist/sortFields.js.map +1 -1
  162. package/dist/sortFields.spec.js +1 -1
  163. package/dist/sortFields.spec.js.map +1 -1
  164. package/dist/sortRelatorTerms.js +1 -1
  165. package/dist/sortRelatorTerms.js.map +1 -1
  166. package/dist/sortRelatorTerms.spec.js +1 -1
  167. package/dist/sortRelatorTerms.spec.js.map +1 -1
  168. package/dist/sortSubfields.js +1 -1
  169. package/dist/sortSubfields.js.map +1 -1
  170. package/dist/sortSubfields.spec.js +1 -1
  171. package/dist/sortSubfields.spec.js.map +1 -1
  172. package/dist/stripPunctuation.js.map +1 -1
  173. package/dist/stripPunctuation.spec.js +1 -1
  174. package/dist/stripPunctuation.spec.js.map +1 -1
  175. package/dist/subfield-exclusion.js.map +1 -1
  176. package/dist/subfield-exclusion.spec.js +1 -1
  177. package/dist/subfield-exclusion.spec.js.map +1 -1
  178. package/dist/subfield6Utils.js.map +1 -1
  179. package/dist/subfield8Utils.js.map +1 -1
  180. package/dist/subfieldValueNormalizations.js +1 -1
  181. package/dist/subfieldValueNormalizations.js.map +1 -1
  182. package/dist/subfieldValueNormalizations.spec.js +1 -1
  183. package/dist/subfieldValueNormalizations.spec.js.map +1 -1
  184. package/dist/sync-007-and-300.js +1 -1
  185. package/dist/sync-007-and-300.js.map +1 -1
  186. package/dist/sync-007-and-300.spec.js +1 -1
  187. package/dist/sync-007-and-300.spec.js.map +1 -1
  188. package/dist/typeOfDate-008.js +1 -1
  189. package/dist/typeOfDate-008.js.map +1 -1
  190. package/dist/typeOfDate-008.spec.js +1 -1
  191. package/dist/typeOfDate-008.spec.js.map +1 -1
  192. package/dist/unicode-decomposition.js.map +1 -1
  193. package/dist/unicode-decomposition.spec.js +1 -1
  194. package/dist/unicode-decomposition.spec.js.map +1 -1
  195. package/dist/update-field-540.spec.js +1 -1
  196. package/dist/update-field-540.spec.js.map +1 -1
  197. package/dist/urn.js +1 -1
  198. package/dist/urn.js.map +1 -1
  199. package/dist/urn.spec.js +1 -1
  200. package/dist/urn.spec.js.map +1 -1
  201. package/dist/utils.js +17 -0
  202. package/dist/utils.js.map +1 -1
  203. package/package.json +1 -1
  204. package/src/cyrillux-usemarcon-replacement.js +87 -24
  205. package/src/fixRelatorTerms.js +5 -2
  206. package/src/indicator-fixes.js +19 -0
  207. package/src/sanitize-vocabulary-source-codes.js +4 -0
  208. package/src/utils.js +16 -0
  209. package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +3 -0
  210. package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +8 -0
  211. package/test-fixtures/cyrillux-usemarcon-replacement/f12/expectedResult.json +32 -0
  212. package/test-fixtures/cyrillux-usemarcon-replacement/f12/metadata.json +6 -0
  213. package/test-fixtures/cyrillux-usemarcon-replacement/f12/record.json +30 -0
  214. package/test-fixtures/cyrillux-usemarcon-replacement/f13/expectedResult.json +38 -0
  215. package/test-fixtures/cyrillux-usemarcon-replacement/f13/metadata.json +6 -0
  216. package/test-fixtures/cyrillux-usemarcon-replacement/f13/record.json +29 -0
  217. package/test-fixtures/cyrillux-usemarcon-replacement/f14/expectedResult.json +42 -0
  218. package/test-fixtures/cyrillux-usemarcon-replacement/f14/metadata.json +6 -0
  219. package/test-fixtures/cyrillux-usemarcon-replacement/f14/record.json +33 -0
  220. package/test-fixtures/indicator-fixes/09/expectedResult.json +10 -0
  221. package/test-fixtures/indicator-fixes/09/metadata.json +4 -0
  222. package/test-fixtures/indicator-fixes/09/record.json +11 -0
  223. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +74 -0
  224. package/test-fixtures/sanitize-vocabulary-source-codes/f04/metadata.json +8 -0
  225. package/test-fixtures/sanitize-vocabulary-source-codes/f04/record.json +75 -0
  226. package/test-fixtures/sanitize-vocabulary-source-codes/v04/expectedResult.json +5 -0
  227. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +8 -0
  228. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +75 -0
@@ -22,7 +22,7 @@ var _punctuation = _interopRequireDefault(require("./punctuation2"));
22
22
  var _normalizeQualifyingInformation = _interopRequireDefault(require("./normalize-qualifying-information"));
23
23
  var _sortSubfields = require("./sortSubfields");
24
24
  var _utils = require("./utils");
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
26
  /*
27
27
  * cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master
28
28
  *
@@ -37,7 +37,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
37
37
  const description = 'Replacement for Cyrillux usemarcon rules';
38
38
 
39
39
  // Extended original list with 541, 561, 562, 583, 584
40
- const dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];
40
+ // 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)
41
+ const dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];
41
42
  function _default() {
42
43
  return {
43
44
  description,
@@ -54,50 +55,93 @@ function _default() {
54
55
  };
55
56
  return res;
56
57
  }
57
- function realFix(record) {
58
- // Fix leader: standard fixes + update LDR/17 to '4'
59
- fixLeader(record);
58
+ function realFixNonAleph(record) {
59
+ if (isAlephRecord(record)) {
60
+ return;
61
+ }
62
+ // Update LDR/17 to '4'
60
63
  record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data
61
64
 
62
65
  // Remove unwanted fields:
63
66
  record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data
64
67
 
65
- record.fields.forEach(f => fieldSpecificStuff(f));
66
- function fieldSpecificStuff(field) {
68
+ // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)
69
+ record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data
70
+
71
+ fieldSpecificStuff(record.fields);
72
+ function fieldSpecificStuff(fields) {
73
+ const [field, ...rest] = fields;
74
+ if (field === undefined) {
75
+ return;
76
+ }
67
77
  removeOwnershipSubfield5(field);
68
78
  removeFromOldCatalog(field); // Remove LoC phrase "[from old catalog]" from srings
69
79
  translateFieldToFinnish(field);
80
+ return fieldSpecificStuff(rest);
81
+ }
82
+ fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!
83
+
84
+ fieldSpecificStuff2(record.fields);
85
+ function fieldSpecificStuff2(fields) {
86
+ const [field, ...rest] = fields;
87
+ if (field === undefined) {
88
+ return;
89
+ }
90
+ removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!
91
+
92
+ field100eKirjoittaja(field);
93
+ function field100eKirjoittaja(f) {
94
+ // LL 2019 USEMARCON-RDA rule
95
+ if (f.tag === '100' && !(0, _utils.fieldHasSubfield)(f, 'e') && record.isBK()) {
96
+ f.subfields = [{
97
+ code: 'e',
98
+ value: 'kirjoittaja.'
99
+ }, ...f.subfields]; // eslint-disable-line functional/immutable-data
100
+ (0, _sortSubfields.sortAdjacentSubfields)(f);
101
+ // Punctuation will be done later on...
102
+ return;
103
+ }
104
+ }
105
+ field260To264s(field, record);
106
+
107
+ // NB! 300 (before or after 33X creation?)
108
+ field410To490And810(field, record);
109
+ field440To490And830(field, record);
110
+ // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.
111
+ return fieldSpecificStuff2(rest);
70
112
  }
113
+ }
114
+ function realFixAll1(record) {
115
+ fixLeader(record); // Fix defaults, esp. LDR/18=i
116
+
71
117
  (0, _fixCountryCodes.default)().fix(record); // 008/15-17
72
118
  (0, _fixLanguageCodes.default)().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)
73
119
 
74
- (0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
120
+ (0, _utils.recordRemoveValuelessSubfields)(record);
75
121
 
76
122
  // Field 028: use $b$a, not $a$b:
77
123
  const f028 = record.fields.filter(f => f.tag === '028');
78
124
  f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
79
- fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!
80
125
  (0, _addMissingField.default)().fix(record);
81
126
  (0, _fixRelatorTerms.default)().fix(record);
127
+ }
128
+ function realFixAll2(record) {
129
+ (0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
130
+
131
+ // Cyrillux specific code might change 040$b and thus affect these rules:
82
132
  (0, _fix33X.default)().fix(record); // 33X$a => 33X$a$b$2
83
133
  (0, _addMissingField2.default)().fix(record);
84
134
  (0, _addMissingField3.default)().fix(record);
85
135
  (0, _addMissingField4.default)().fix(record);
86
- record.fields.forEach(f => fieldSpecificStuff2(f));
87
- function fieldSpecificStuff2(field) {
88
- removeSubfieldH(field); // only after 33X creation, as 245$h might be useful
89
136
 
90
- field260To264s(field, record);
91
-
92
- // NB! 300 (before or after 33X creation?)
93
- field410To490And810(field, record);
94
- field440To490And830(field, record);
95
- // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.
96
- }
97
-
98
- // The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:
137
+ // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:
99
138
  (0, _indicatorFixes.default)().fix(record);
100
139
  (0, _punctuation.default)().fix(record);
140
+ }
141
+ function realFix(record) {
142
+ realFixAll1(record);
143
+ realFixNonAleph(record);
144
+ realFixAll2(record);
101
145
  const res = {
102
146
  message: [],
103
147
  fix: [],
@@ -157,6 +201,9 @@ function fixField040(record) {
157
201
  }
158
202
  }
159
203
  function removeFromOldCatalog(field) {
204
+ if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {
205
+ return;
206
+ }
160
207
  // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
161
208
  field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));
162
209
  function removeFromOldCatalogFromSubfield(subfield) {
@@ -221,6 +268,10 @@ function field440To490And830(field, record) {
221
268
  // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
222
269
  record.insertField(field830);
223
270
  }
271
+ function isAlephRecord(record) {
272
+ // Records that are already in Aleph are not processed as aggressively as genuinely new ones:
273
+ return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));
274
+ }
224
275
  function field260To264s(field, record) {
225
276
  // might be generic... if so, move to utils...
226
277
  // As per my quick reading of usemarcon-cyrillux
@@ -358,7 +409,16 @@ function expandSwedishAbbreviations(value) {
358
409
  // replace(/\bmin\b/gu, 'minuter');
359
410
  }
360
411
  function finnishTranslationsAndMappings(value) {
361
- return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bbilaga\b/gui, 'liite').replace(/\bbilagor\b/gui, 'liitettä').replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
412
+ return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bbilaga\b/gui, 'liite').replace(/\bbilagor\b/gui, 'liitettä').
413
+ // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365
414
+ replace(/(\b1\]?) с\./gui, '$1 sivu').
415
+ // eslint-disable-line prefer-named-capture-group
416
+ replace(/(\d\]?) с\./gui, '$1 sivua').
417
+ // eslint-disable-line prefer-named-capture-group
418
+ replace(/(\d) см/gui, '$1 cm').
419
+ // eslint-disable-line prefer-named-capture-group
420
+
421
+ replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace(/\bcirca\b/gui, 'noin').replace(/coil[- ]?bound/gui, 'kierreselkä').replace('color illustrations', 'värikuvitus').replace(/comb[- ]?bound/gui, 'kierreselkä').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace('(flera nummersviter)', '(useita numerointijaksoja)').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bfärgillustratione[nr]\b/gui, 'värikuvitus').replace(/\bhard(?:back|cover)\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace(/\bi flera nummersviter/gui, 'useina numerointijaksoina').replace('illustrated', 'kuvitettu').replace(/illustrations?\b/gui, 'kuvitettu').
362
422
  // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)
363
423
  replace(/\binbunden\b/gui, 'kovakantinen').
364
424
  // swe
@@ -1 +1 @@
1
- {"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","obj","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","fixLeader","leader","substring","fields","filter","f","includes","tag","forEach","fieldSpecificStuff","field","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixCountryCodes","fixLanguageCodes","fixQualifyingInformation","f028","sortAdjacentSubfields","fixField040","add041","fixRelatorTerms","fix33X","add336","add337","add338","fieldSpecificStuff2","removeSubfieldH","field260To264s","field410To490And810","field440To490And830","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","subfieldsBE","code","value","length","data","ind1","ind2","subfields","insertField","fixField040Subfields","sf","push","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","match","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","undefined","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n\n// import createDebugLogger from 'debug';\nimport {nvdebug, recordToString} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFix(record) {\n // Fix leader: standard fixes + update LDR/17 to '4'\n fixLeader(record);\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n record.fields.forEach(f => fieldSpecificStuff(f));\n\n function fieldSpecificStuff(field) {\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n }\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n add041().fix(record);\n\n fixRelatorTerms().fix(record);\n\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n record.fields.forEach(f => fieldSpecificStuff2(f));\n\n function fieldSpecificStuff2(field) {\n removeSubfieldH(field); // only after 33X creation, as 245$h might be useful\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n\n }\n\n // The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.fields.filter(f => f.tag === '040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":";;;;;;;;;AAOA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,gBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,iBAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,iBAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,iBAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,gBAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,iBAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,gBAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,eAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,YAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,+BAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,cAAA,GAAAb,OAAA;AAIA,IAAAc,MAAA,GAAAd,OAAA;AAAgD,SAAAD,uBAAAgB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAxBhD;AACA;AACA;AACA;AACA;AACA;;AAkBA;;AAGA;;AAEA,MAAMG,WAAW,GAAG,0CAA0C;;AAE9D;AACA,MAAMC,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAE/nB,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLF,WAAW;IAAEG,GAAG;IAAEC;EACpB,CAAC;EAED,SAASD,GAAGA,CAACE,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAE,GAAEN,WAAY,OAAM,CAAC;IAC9BO,OAAO,CAACF,MAAM,CAAC;IACf,MAAMG,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEN,GAAG,EAAE,EAAE;MAAEO,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;EAEA,SAASD,OAAOA,CAACF,MAAM,EAAE;IACvB;IACAM,SAAS,CAACN,MAAM,CAAC;IACjBA,MAAM,CAACO,MAAM,GAAI,GAAEP,MAAM,CAACO,MAAM,CAACC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAE,IAAGR,MAAM,CAACO,MAAM,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAE,EAAC,CAAC,CAAC;;IAExF;IACAR,MAAM,CAACS,MAAM,GAAGT,MAAM,CAACS,MAAM,CAACC,MAAM,CAACC,CAAC,IAAI,CAACf,QAAQ,CAACgB,QAAQ,CAACD,CAAC,CAACE,GAAG,CAAC,CAAC,CAAC,CAAC;;IAEtEb,MAAM,CAACS,MAAM,CAACK,OAAO,CAACH,CAAC,IAAII,kBAAkB,CAACJ,CAAC,CAAC,CAAC;IAEjD,SAASI,kBAAkBA,CAACC,KAAK,EAAE;MACjCC,wBAAwB,CAACD,KAAK,CAAC;MAC/BE,oBAAoB,CAACF,KAAK,CAAC,CAAC,CAAC;MAC7BG,uBAAuB,CAACH,KAAK,CAAC;IAChC;IAEA,IAAAI,wBAAe,EAAC,CAAC,CAACtB,GAAG,CAACE,MAAM,CAAC,CAAC,CAAC;IAC/B,IAAAqB,yBAAgB,EAAC,CAAC,CAACvB,GAAG,CAACE,MAAM,CAAC,CAAC,CAAC;;IAEhC,IAAAsB,uCAAwB,EAAC,CAAC,CAACxB,GAAG,CAACE,MAAM,CAAC,CAAC,CAAC;;IAExC;IACA,MAAMuB,IAAI,GAAGvB,MAAM,CAACS,MAAM,CAACC,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACE,GAAG,KAAK,KAAK,CAAC;IACvDU,IAAI,CAACT,OAAO,CAACH,CAAC,IAAI,IAAAa,oCAAqB,EAACb,CAAC,CAAC,CAAC;IAE3Cc,WAAW,CAACzB,MAAM,CAAC,CAAC,CAAC;IACrB,IAAA0B,wBAAM,EAAC,CAAC,CAAC5B,GAAG,CAACE,MAAM,CAAC;IAEpB,IAAA2B,wBAAe,EAAC,CAAC,CAAC7B,GAAG,CAACE,MAAM,CAAC;IAE7B,IAAA4B,eAAM,EAAC,CAAC,CAAC9B,GAAG,CAACE,MAAM,CAAC,CAAC,CAAC;IACtB,IAAA6B,yBAAM,EAAC,CAAC,CAAC/B,GAAG,CAACE,MAAM,CAAC;IACpB,IAAA8B,yBAAM,EAAC,CAAC,CAAChC,GAAG,CAACE,MAAM,CAAC;IACpB,IAAA+B,yBAAM,EAAC,CAAC,CAACjC,GAAG,CAACE,MAAM,CAAC;IAEpBA,MAAM,CAACS,MAAM,CAACK,OAAO,CAACH,CAAC,IAAIqB,mBAAmB,CAACrB,CAAC,CAAC,CAAC;IAElD,SAASqB,mBAAmBA,CAAChB,KAAK,EAAE;MAClCiB,eAAe,CAACjB,KAAK,CAAC,CAAC,CAAC;;MAExBkB,cAAc,CAAClB,KAAK,EAAEhB,MAAM,CAAC;;MAE7B;MACAmC,mBAAmB,CAACnB,KAAK,EAAEhB,MAAM,CAAC;MAClCoC,mBAAmB,CAACpB,KAAK,EAAEhB,MAAM,CAAC;MAClC;IAEF;;IAEA;IACA,IAAAqC,uBAAa,EAAC,CAAC,CAACvC,GAAG,CAACE,MAAM,CAAC;IAE3B,IAAAsC,oBAAc,EAAC,CAAC,CAACxC,GAAG,CAACE,MAAM,CAAC;IAE5B,MAAMG,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEN,GAAG,EAAE,EAAE;MAAEO,KAAK,EAAE;IAAI,CAAC;IAC/C,OAAOF,GAAG;EACZ;;EAEA;EACA,SAASJ,QAAQA,CAACC,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAE,GAAEN,WAAY,YAAW,CAAC;IACnC,MAAM4C,cAAc,GAAG,IAAAC,qBAAc,EAACxC,MAAM,CAAC;IAC7C,MAAMyC,YAAY,GAAG,IAAIC,sBAAU,CAAC1C,MAAM,EAAE;MAAC2C,cAAc,EAAE;IAAK,CAAC,CAAC;IACpEzC,OAAO,CAACuC,YAAY,CAAC;IACrB,MAAMG,cAAc,GAAG,IAAAJ,qBAAc,EAACC,YAAY,CAAC;IAEnD,IAAIF,cAAc,KAAKK,cAAc,EAAE;MACrC,OAAO;QAACxC,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IAEA,OAAO;MAACD,OAAO,EAAE,CAAC,gBAAgB,CAAC;MAAEC,KAAK,EAAE;IAAK,CAAC,CAAC,CAAC;EAEtD;AACF;AAEA,SAASoB,WAAWA,CAACzB,MAAM,EAAE;EAC3B,MAAM6C,IAAI,GAAG7C,MAAM,CAACS,MAAM,CAACC,MAAM,CAACC,CAAC,IAAIA,CAAC,CAACE,GAAG,KAAK,KAAK,CAAC;EAEvD,MAAMiC,WAAW,GAAG,CAClB;IAACC,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAK,CAAC,EACzB;IAACD,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAK,CAAC,CAC1B;;EAED;EACA,IAAIH,IAAI,CAACI,MAAM,KAAK,CAAC,EAAE;IACrB,MAAMC,IAAI,GAAG;MAACrC,GAAG,EAAE,KAAK;MAAEsC,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEC,SAAS,EAAEP;IAAW,CAAC;IAEvE9C,MAAM,CAACsD,WAAW,CAACJ,IAAI,CAAC;IACxB;EACF;EAEAL,IAAI,CAAC/B,OAAO,CAACH,CAAC,IAAI4C,oBAAoB,CAAC5C,CAAC,CAAC,CAAC;EAE1C,SAAS4C,oBAAoBA,CAACvC,KAAK,EAAE;IACnCA,KAAK,CAACqC,SAAS,GAAGrC,KAAK,CAACqC,SAAS,CAAC3C,MAAM,CAAC8C,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC5C,QAAQ,CAAC4C,EAAE,CAACT,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/E/B,KAAK,CAACqC,SAAS,CAACI,IAAI,CAACX,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC9B,KAAK,CAACqC,SAAS,CAACI,IAAI,CAACX,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,IAAAtB,oCAAqB,EAACR,KAAK,CAAC,CAAC,CAAC;EAChC;AAEF;AAEO,SAASE,oBAAoBA,CAACF,KAAK,EAAE;EAC1C;EACAA,KAAK,CAACqC,SAAS,EAAEvC,OAAO,CAAC0C,EAAE,IAAIE,gCAAgC,CAACF,EAAE,CAAC,CAAC;EAEpE,SAASE,gCAAgCA,CAACC,QAAQ,EAAE;IAClD,IAAI,CAACA,QAAQ,CAACX,KAAK,CAACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;MAClD;IACF;IACA+C,QAAQ,CAACX,KAAK,GAAGW,QAAQ,CAACX,KAAK,CAACY,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,CAAC;EAC5E;AACF;AAEA,SAAS3B,eAAeA,CAACjB,KAAK,EAAE;EAC9B,IAAI,CAACA,KAAK,CAACqC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAACzC,QAAQ,CAACI,KAAK,CAACH,GAAG,CAAC,EAAE;IACzL;EACF;EAEA,MAAMgD,cAAc,GAAG7C,KAAK,CAACqC,SAAS,CAAC3C,MAAM,CAAC8C,EAAE,IAAIA,EAAE,CAACT,IAAI,KAAK,GAAG,CAAC;EACpE,IAAIc,cAAc,CAACZ,MAAM,GAAG,CAAC,EAAE;IAC7BjC,KAAK,CAACqC,SAAS,GAAGQ,cAAc,CAAC,CAAC;IAClC;EACF;AAEF;AAEO,SAAS5C,wBAAwBA,CAACD,KAAK,EAAE;EAC9C,IAAI,CAACA,KAAK,CAACqC,SAAS,IAAIrC,KAAK,CAACqC,SAAS,CAACJ,MAAM,KAAK,CAAC,EAAE;IACpD;EACF;EACA,MAAMa,kBAAkB,GAAG9C,KAAK,CAACqC,SAAS,CAAC3C,MAAM,CAAC8C,EAAE,IAAIA,EAAE,CAACT,IAAI,KAAK,GAAG,CAAC;EACxE,IAAIe,kBAAkB,CAACb,MAAM,KAAK,CAAC,EAAE;IAAE;IACrC;EACF;EACAjC,KAAK,CAACqC,SAAS,GAAGS,kBAAkB,CAAC,CAAC;AACxC;AAEO,SAASxD,SAASA,CAACN,MAAM,EAAE;EAChCA,MAAM,CAACO,MAAM,GAAI,GAAEP,MAAM,CAACO,MAAM,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAE,MAAKR,MAAM,CAACO,MAAM,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAE,IAAGR,MAAM,CAACO,MAAM,CAACC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAE,MAAK,CAAC,CAAC;AAClI;AAEA,SAAS2B,mBAAmBA,CAACnB,KAAK,EAAEhB,MAAM,EAAE;EAAE;EAC5C,IAAIgB,KAAK,CAACH,GAAG,KAAK,KAAK,EAAE;IACvB;EACF;EAEA,MAAMkD,QAAQ,GAAG,IAAAC,cAAK,EAAChD,KAAK,CAAC;EAE7BA,KAAK,CAACH,GAAG,GAAG,KAAK,CAAC,CAAC;EACnBG,KAAK,CAACmC,IAAI,GAAG,GAAG,CAAC,CAAC;EAClBnC,KAAK,CAACoC,IAAI,GAAG,GAAG,CAAC,CAAC;EAClB,IAAA5B,oCAAqB,EAACR,KAAK,CAAC;EAC5B;;EAGA+C,QAAQ,CAAClD,GAAG,GAAG,KAAK,CAAC,CAAC;EACtBkD,QAAQ,CAACX,IAAI,GAAG,GAAG,CAAC,CAAC;EACrB;EACApD,MAAM,CAACsD,WAAW,CAACS,QAAQ,CAAC;AAC9B;AAEA,SAAS3B,mBAAmBA,CAACpB,KAAK,EAAEhB,MAAM,EAAE;EAAE;EAC5C,IAAIgB,KAAK,CAACH,GAAG,KAAK,KAAK,EAAE;IACvB;EACF;EAEA,MAAMoD,QAAQ,GAAG,IAAAD,cAAK,EAAChD,KAAK,CAAC;EAE7BA,KAAK,CAACH,GAAG,GAAG,KAAK,CAAC,CAAC;EACnBG,KAAK,CAACmC,IAAI,GAAG,GAAG,CAAC,CAAC;EAClBnC,KAAK,CAACoC,IAAI,GAAG,GAAG,CAAC,CAAC;EAClB;EACAa,QAAQ,CAACpD,GAAG,GAAG,KAAK,CAAC,CAAC;EACtB;EACAb,MAAM,CAACsD,WAAW,CAACW,QAAQ,CAAC;AAC9B;AAGA,SAAS/B,cAAcA,CAAClB,KAAK,EAAEhB,MAAM,EAAE;EAAE;EACvC;EACA,IAAIgB,KAAK,CAACH,GAAG,KAAK,KAAK,EAAE;IACvB;EACF;EAEAqD,uBAAuB,CAAClD,KAAK,CAAC;EAE9BA,KAAK,CAACH,GAAG,GAAG,KAAK,CAAC,CAAC;EACnBG,KAAK,CAACmC,IAAI,GAAG,GAAG,CAAC,CAAC;EAClBnC,KAAK,CAACoC,IAAI,GAAG,GAAG,CAAC,CAAC;;EAElB;;EAEA,SAASe,gBAAgBA,CAACC,MAAM,EAAE;IAChC,IAAIA,MAAM,CAACC,KAAK,CAAC,mFAAmF,CAAC,EAAE;MACrG,OAAOD,MAAM,CAACR,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACvC;IACA,OAAO,KAAK;EACd;EAEA5C,KAAK,CAACqC,SAAS,EAAEvC,OAAO,CAAC0C,EAAE,IAAIc,0BAA0B,CAACd,EAAE,CAAC,CAAC;EAE9D,SAASc,0BAA0BA,CAACX,QAAQ,EAAE;IAC5CA,QAAQ,CAACX,KAAK,GAAGuB,2BAA2B,CAACZ,QAAQ,CAAC,CAAC,CAAC;EAC1D;EAEA,SAASa,uBAAuBA,CAACxD,KAAK,EAAE;IACtC;IACA,MAAM,CAACyD,CAAC,CAAC,GAAGzD,KAAK,CAACqC,SAAS,CAAC3C,MAAM,CAAC8C,EAAE,IAAIA,EAAE,CAACT,IAAI,KAAK,GAAG,CAAC;IACzD,IAAI,CAAC0B,CAAC,EAAE;MACN,OAAOC,SAAS;IAClB;IACA,MAAMC,aAAa,GAAGR,gBAAgB,CAACM,CAAC,CAACzB,KAAK,CAAC;IAC/C,IAAI,CAAC2B,aAAa,EAAE;MAClB,OAAOD,SAAS;IAClB;IACA,MAAME,OAAO,GAAGH,CAAC,CAACzB,KAAK,CAACqB,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,GAAG,GAAG;IACzD,MAAMQ,WAAW,GAAGJ,CAAC,CAACzB,KAAK,CAACpC,QAAQ,CAAC,GAAG,CAAC,GAAI,IAAGgE,OAAQ,GAAED,aAAc,GAAE,GAAI,GAAEC,OAAQ,GAAED,aAAc,EAAC;IACzG;IACAF,CAAC,CAACzB,KAAK,GAAI,IAAG2B,aAAc,GAAE,CAAC,CAAC;IAChC,OAAOE,WAAW;EACpB;EAEA,SAASX,uBAAuBA,CAAClD,KAAK,EAAE;IACtC,MAAMyD,CAAC,GAAGD,uBAAuB,CAACxD,KAAK,CAAC;IACxC,IAAI,CAACyD,CAAC,EAAE;MACN,OAAOC,SAAS;IAClB;IACA,MAAMxB,IAAI,GAAG;MAAC,KAAK,EAAE,KAAK;MAAE,MAAM,EAAE,GAAG;MAAE,MAAM,EAAE,GAAG;MAAE,WAAW,EAAE,CAAC;QAAC,MAAM,EAAE,GAAG;QAAE,OAAO,EAAEuB;MAAC,CAAC;IAAC,CAAC;IAC/FzE,MAAM,CAACsD,WAAW,CAACJ,IAAI,CAAC;EAC1B;EAEA,SAASqB,2BAA2BA,CAACZ,QAAQ,EAAE;IAC7C,IAAIA,QAAQ,CAACZ,IAAI,KAAK,GAAG,EAAE;MACzB,OAAOY,QAAQ,CAACX,KAAK,CAACY,OAAO,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;IAC/E;IACA,IAAID,QAAQ,CAACZ,IAAI,KAAK,GAAG,EAAE;MACzB,OAAOY,QAAQ,CAACX,KAAK,CAACY,OAAO,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;IAC1E;IACA,IAAID,QAAQ,CAACZ,IAAI,KAAK,GAAG,EAAE;MACzB,MAAM+B,IAAI,GAAGX,gBAAgB,CAACR,QAAQ,CAACX,KAAK,CAAC;MAC7C,IAAI8B,IAAI,EAAE;QACR,MAAML,CAAC,GAAGd,QAAQ,CAACX,KAAK,CAACqB,KAAK,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG;QACvD,IAAIV,QAAQ,CAACX,KAAK,CAACpC,QAAQ,CAAC,GAAG,CAAC,EAAE;UAChC,OAAQ,GAAE6D,CAAE,IAAGK,IAAK,GAAE;QACxB;QACA,OAAQ,GAAEL,CAAE,GAAEK,IAAK,EAAC;MACtB;MACA,OAAOnB,QAAQ,CAACX,KAAK,CAACY,OAAO,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;IAC5E;IACA,OAAOD,QAAQ,CAACX,KAAK;EACvB;AAGF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS7B,uBAAuBA,CAACH,KAAK,EAAE;EACtC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAACJ,QAAQ,CAACI,KAAK,CAACH,GAAG,CAAC,EAAE;IACvC;EACF;EACAG,KAAK,CAACqC,SAAS,EAAEvC,OAAO,CAAC0C,EAAE,IAAIuB,0BAA0B,CAACvB,EAAE,CAAC,CAAC;EAE9D,SAASuB,0BAA0BA,CAACpB,QAAQ,EAAE;IAC5C,IAAI3C,KAAK,CAACH,GAAG,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAACD,QAAQ,CAAC+C,QAAQ,CAACZ,IAAI,CAAC,EAAE;MAClEY,QAAQ,CAACX,KAAK,GAAGgC,8BAA8B,CAACC,0BAA0B,CAACC,0BAA0B,CAACC,0BAA0B,CAACxB,QAAQ,CAACX,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACrJ;IACF;IACA,IAAIhC,KAAK,CAACH,GAAG,KAAK,KAAK,EAAE;MACvB8C,QAAQ,CAACX,KAAK,GAAGgC,8BAA8B,CAACC,0BAA0B,CAACC,0BAA0B,CAACC,0BAA0B,CAACxB,QAAQ,CAACX,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;MACrJ;IACF;EACF;AACF;AAEA,SAASmC,0BAA0BA,CAACnC,KAAK,EAAE;EACzC,OAAOA,KAAK,CAACY,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CACzCA,OAAO,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAC3CA,OAAO,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAC/CA,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CACjCA,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAACA,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC;EAAE;EACzEA,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAChCA,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAC7BA,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC;EAAE;EACtCA,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC;EAAE;EACxCA,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAChCA,OAAO,CAAC,iBAAiB,EAAE,aAAa,CAAC;EACzC;EACA;EACAA,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAC1DA,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAACA,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC;EAAE;EACzEA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAC5BA,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CACpCA,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CACpCA,OAAO,CAAC,uDAAuD,EAAE,EAAE,CAAC,CACpEA,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC;AACpC;AAEA,SAASqB,0BAA0BA,CAACjC,KAAK,EAAE;EACzC,OAAOA,KAAK,CAACY,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;EACxC;EACA;EACAA,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAACA,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAChEA,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAACA,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAChEA,OAAO,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAACA,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAC7FA,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC;EACnC;AACF;AAEA,SAASsB,0BAA0BA,CAAClC,KAAK,EAAE;EACzC,OAAOA,KAAK,CAACY,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CACzCA,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAACA,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC;EACjE;EACA;AACF;AAEA,SAASoB,8BAA8BA,CAAChC,KAAK,EAAE;EAC7C,OAAOA,KAAK,CAACY,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAC1CA,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAChCA,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CACnCA,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAC5CA,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CACjCA,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CACrCA,OAAO,CAAC,eAAe,EAAE,WAAW,CAAC,CACrCA,OAAO,CAAC,6BAA6B,EAAE,uBAAuB,CAAC,CAC/DA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAC7BA,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAC/BA,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAC3CA,OAAO,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAC7CA,OAAO,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAC3CA,OAAO,CAAC,gBAAgB,EAAE,cAAc,CAAC,CACzCA,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CACnDA,OAAO,CAAC,sBAAsB,EAAE,4BAA4B,CAAC,CAC7DA,OAAO,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAC5CA,OAAO,CAAC,8BAA8B,EAAE,aAAa,CAAC,CACtDA,OAAO,CAAC,2BAA2B,EAAE,cAAc,CAAC,CACpDA,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CACjCA,OAAO,CAAC,2BAA2B,EAAE,2BAA2B,CAAC,CACjEA,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CACnCA,OAAO,CAAC,qBAAqB,EAAE,WAAW,CAAC;EAAE;EAC7CA,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC;EAAE;EAC5CA,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CACjCA,OAAO,CAAC,gBAAgB,EAAE,WAAW,CAAC,CACtCA,OAAO,CAAC,yBAAyB,EAAE,2BAA2B,CAAC,CAC/DA,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CACzCA,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CACvCA,OAAO,CAAC,mBAAmB,EAAE,WAAW,CAAC,CACzCA,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAC/BA,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC;EAAE;EACpCA,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAC/BA,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACzCA,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAC5CA,OAAO,CAAC,cAAc,EAAE,gBAAgB,CAAC,CACzCA,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CACvCA,OAAO,CAAC,iBAAiB,EAAE,YAAY,CAAC,CACxCA,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAChCA,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;EAAE;EAC/CA,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAChCA,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;EAAE;EAC/CA,OAAO,CAAC,cAAc,EAAE,wBAAwB,CAAC,CACjDA,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAACA,OAAO,CAAC,gBAAgB,EAAE,aAAa,CAAC,CACnFA,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAACA,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAC1EA,OAAO,CAAC,oCAAoC,EAAE,aAAa,CAAC,CAC5DA,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,CACrCA,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,CACvCA,OAAO,CAAC,mBAAmB,EAAE,4BAA4B,CAAC,CAC1DA,OAAO,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAClDA,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CACnCA,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CACjCA,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;AAEvC","ignoreList":[]}
1
+ {"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","fixRelatorTerms","realFixAll2","fixQualifyingInformation","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields]; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n add041().fix(record);\n\n fixRelatorTerms().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.fields.filter(f => f.tag === '040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d\\]?) с\\./gui, '$1 sivua'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d) см/gui, '$1 cm'). // eslint-disable-line prefer-named-capture-group\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _cyrilluxUsemarconReplacement = _interopRequireDefault(require("./cyrillux-usemarcon-replacement"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  (0, _fixugen.default)({
10
10
  callback,
11
11
  path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],
@@ -1 +1 @@
1
- {"version":3,"file":"cyrillux-usemarcon-replacement.spec.js","names":["_chai","require","_marcRecord","_cyrilluxUsemarconReplacement","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/cyrillux-usemarcon-replacement.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './cyrillux-usemarcon-replacement';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\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 expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,6BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,gCAAgC,CAAC;EAC1EC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAGF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,qCAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"cyrillux-usemarcon-replacement.spec.js","names":["_chai","require","_marcRecord","_cyrilluxUsemarconReplacement","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/cyrillux-usemarcon-replacement.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './cyrillux-usemarcon-replacement';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\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 expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,6BAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,gCAAgC,CAAC;EAC1EC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAGF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qCAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,qCAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  var _chai = require("chai");
4
4
  var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _doubleCommas = _interopRequireDefault(require("../src/double-commas"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  describe('double-commas', () => {
8
8
  it('Creates a validator', async () => {
9
9
  const validator = await (0, _doubleCommas.default)();
@@ -1 +1 @@
1
- {"version":3,"file":"double-commas.spec.js","names":["_chai","require","_marcRecord","_doubleCommas","_interopRequireDefault","obj","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\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 describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"double-commas.spec.js","names":["_chai","require","_marcRecord","_doubleCommas","_interopRequireDefault","e","__esModule","default","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\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 describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"duplicates-ind1.js","names":["_default","tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","removeField","fields","matches","field","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(({obj}) => record.removeField(obj));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;AAAe,SAAAA,SAAUC,UAAU,EAAE;EACnC,IAAIA,UAAU,YAAYC,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACT,6DAA6D;MAC/DC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,SAASF,QAAQA,CAACG,MAAM,EAAE;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAM,CAAC,CAClCG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,KAAK,IAAI,CAAC;IACvC,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAE,YAAWN,OAAO,CAACG,GAAG,CAACI,GAAI,kDAAiD;IAAC,CAAC,GAAG;MAACF,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC;EAC1J;EAEA,SAAST,GAAGA,CAACE,MAAM,EAAE;IACnBE,aAAa,CAACF,MAAM,CAAC,CAClBS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACL,UAAU,KAAK,KAAK,CAAC,CACzCM,GAAG,CAAC,CAAC;MAACN,UAAU;MAAE,GAAGK;IAAI,CAAC,KAAKA,IAAI,CAAC,CAAC;IAAA,CACrCE,OAAO,CAAC,CAAC;MAACR;IAAG,CAAC,KAAKJ,MAAM,CAACa,WAAW,CAACT,GAAG,CAAC,CAAC;EAChD;EAEA,SAASF,aAAaA,CAACF,MAAM,EAAE;IAC7B,OAAOA,MAAM,CAACc,MAAM,CAACH,GAAG,CAACP,GAAG,KAAK;MAACC,UAAU,EAAEU,OAAO,CAACX,GAAG,EAAEJ,MAAM,CAACc,MAAM,CAAC;MAAEV;IAAG,CAAC,CAAC,CAAC;EACnF;EAEA,SAASW,OAAOA,CAACC,KAAK,EAAEF,MAAM,EAAE;IAC9B,OAAOpB,UAAU,CAACuB,IAAI,CAACD,KAAK,CAACR,GAAG,CAAC,IAAIQ,KAAK,CAACE,IAAI,KAAK,GAAG,IAAIC,YAAY,CAACH,KAAK,EAAEF,MAAM,CAAC;EACxF;EAEA,SAASK,YAAYA,CAACC,MAAM,EAAEN,MAAM,EAAE;IACpC,OAAOA,MAAM,CAACO,IAAI,CAACC,MAAM,IAAIF,MAAM,KAAKE,MAAM,IAC5CF,MAAM,CAACZ,GAAG,KAAKc,MAAM,CAACd,GAAG,IACzBY,MAAM,CAACF,IAAI,KAAKI,MAAM,CAACJ,IAAI,IAC3BE,MAAM,CAACG,SAAS,CAACC,MAAM,KAAKF,MAAM,CAACC,SAAS,CAACC,MAAM,IACnDJ,MAAM,CAACG,SAAS,CAACE,KAAK,CAACC,GAAG,IAAIJ,MAAM,CAACC,SAAS,CAACF,IAAI,CAACM,GAAG,IAAID,GAAG,CAACE,IAAI,KAAKD,GAAG,CAACC,IAAI,IAAIF,GAAG,CAACG,KAAK,KAAKF,GAAG,CAACE,KAAK,CAAC,CAAC,CAAC;EAClH;AACF","ignoreList":[]}
1
+ {"version":3,"file":"duplicates-ind1.js","names":["_default","tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","removeField","fields","matches","field","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(({obj}) => record.removeField(obj));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;AAAe,SAAAA,SAAUC,UAAU,EAAE;EACnC,IAAIA,UAAU,YAAYC,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACT,6DAA6D;MAC/DC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,SAASF,QAAQA,CAACG,MAAM,EAAE;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAM,CAAC,CAClCG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,KAAK,IAAI,CAAC;IACvC,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAC,YAAYN,OAAO,CAACG,GAAG,CAACI,GAAG,kDAAkD;IAAC,CAAC,GAAG;MAACF,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC;EAC1J;EAEA,SAAST,GAAGA,CAACE,MAAM,EAAE;IACnBE,aAAa,CAACF,MAAM,CAAC,CAClBS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACL,UAAU,KAAK,KAAK,CAAC,CACzCM,GAAG,CAAC,CAAC;MAACN,UAAU;MAAE,GAAGK;IAAI,CAAC,KAAKA,IAAI,CAAC,CAAC;IAAA,CACrCE,OAAO,CAAC,CAAC;MAACR;IAAG,CAAC,KAAKJ,MAAM,CAACa,WAAW,CAACT,GAAG,CAAC,CAAC;EAChD;EAEA,SAASF,aAAaA,CAACF,MAAM,EAAE;IAC7B,OAAOA,MAAM,CAACc,MAAM,CAACH,GAAG,CAACP,GAAG,KAAK;MAACC,UAAU,EAAEU,OAAO,CAACX,GAAG,EAAEJ,MAAM,CAACc,MAAM,CAAC;MAAEV;IAAG,CAAC,CAAC,CAAC;EACnF;EAEA,SAASW,OAAOA,CAACC,KAAK,EAAEF,MAAM,EAAE;IAC9B,OAAOpB,UAAU,CAACuB,IAAI,CAACD,KAAK,CAACR,GAAG,CAAC,IAAIQ,KAAK,CAACE,IAAI,KAAK,GAAG,IAAIC,YAAY,CAACH,KAAK,EAAEF,MAAM,CAAC;EACxF;EAEA,SAASK,YAAYA,CAACC,MAAM,EAAEN,MAAM,EAAE;IACpC,OAAOA,MAAM,CAACO,IAAI,CAACC,MAAM,IAAIF,MAAM,KAAKE,MAAM,IAC5CF,MAAM,CAACZ,GAAG,KAAKc,MAAM,CAACd,GAAG,IACzBY,MAAM,CAACF,IAAI,KAAKI,MAAM,CAACJ,IAAI,IAC3BE,MAAM,CAACG,SAAS,CAACC,MAAM,KAAKF,MAAM,CAACC,SAAS,CAACC,MAAM,IACnDJ,MAAM,CAACG,SAAS,CAACE,KAAK,CAACC,GAAG,IAAIJ,MAAM,CAACC,SAAS,CAACF,IAAI,CAACM,GAAG,IAAID,GAAG,CAACE,IAAI,KAAKD,GAAG,CAACC,IAAI,IAAIF,GAAG,CAACG,KAAK,KAAKF,GAAG,CAACE,KAAK,CAAC,CAAC,CAAC;EAClH;AACF","ignoreList":[]}
@@ -6,7 +6,7 @@ var _duplicatesInd = _interopRequireDefault(require("./duplicates-ind1"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
8
  var _debug = _interopRequireDefault(require("debug"));
9
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
10
  (0, _fixugen.default)({
11
11
  callback,
12
12
  path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],
@@ -1 +1 @@
1
- {"version":3,"file":"duplicates-ind1.spec.js","names":["_chai","require","_marcRecord","_duplicatesInd","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","tagPattern","fix","RegExp","record","MarcRecord","expectedResult","result","eql","fixedRecord","fields"],"sources":["../src/duplicates-ind1.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './duplicates-ind1';\n\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory(/^500$/u);\n\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\nasync function callback({getFixture, tagPattern, fix = false}) {\n const validator = await validatorFactory(new RegExp(tagPattern, 'u'));\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n return expect(result).to.eql(expectedResult);\n }\n\n const fixedRecord = await validator.fix(record);\n debug(fixedRecord);\n expect(record.fields).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,QAAQ,CAAC;EAElD,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EAC7D,MAAMf,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,IAAIe,MAAM,CAACF,UAAU,EAAE,GAAG,CAAC,CAAC;EACrE,MAAMG,MAAM,GAAG,IAAIC,sBAAU,CAACL,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMM,cAAc,GAAGN,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACE,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACK,MAAM,CAAC;IAC/C,OAAO,IAAAf,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;EAC9C;EAEA,MAAMG,WAAW,GAAG,MAAMtB,SAAS,CAACe,GAAG,CAACE,MAAM,CAAC;EAC/CnB,KAAK,CAACwB,WAAW,CAAC;EAClB,IAAApB,YAAM,EAACe,MAAM,CAACM,MAAM,CAAC,CAACpB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;AAC9C","ignoreList":[]}
1
+ {"version":3,"file":"duplicates-ind1.spec.js","names":["_chai","require","_marcRecord","_duplicatesInd","_interopRequireDefault","_fixura","_fixugen","_debug","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","tagPattern","fix","RegExp","record","MarcRecord","expectedResult","result","eql","fixedRecord","fields"],"sources":["../src/duplicates-ind1.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './duplicates-ind1';\n\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory(/^500$/u);\n\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\nasync function callback({getFixture, tagPattern, fix = false}) {\n const validator = await validatorFactory(new RegExp(tagPattern, 'u'));\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n return expect(result).to.eql(expectedResult);\n }\n\n const fixedRecord = await validator.fix(record);\n debug(fixedRecord);\n expect(record.fields).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAC,sBAAA,CAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,QAAQ,CAAC;EAElD,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EAC7D,MAAMf,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,IAAIe,MAAM,CAACF,UAAU,EAAE,GAAG,CAAC,CAAC;EACrE,MAAMG,MAAM,GAAG,IAAIC,sBAAU,CAACL,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMM,cAAc,GAAGN,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACE,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACK,MAAM,CAAC;IAC/C,OAAO,IAAAf,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;EAC9C;EAEA,MAAMG,WAAW,GAAG,MAAMtB,SAAS,CAACe,GAAG,CAACE,MAAM,CAAC;EAC/CnB,KAAK,CAACwB,WAAW,CAAC;EAClB,IAAApB,YAAM,EAACe,MAAM,CAACM,MAAM,CAAC,CAACpB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;AAC9C","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","_default","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statements\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statements\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statements\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statements\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,CAAC;EAClBC,uBAAuB,EAAE;AAC3B,CAAC;AAEc,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,sBAAsB;IACnCC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxC,IAAIF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;MACrB,OAAO;QACLC,KAAK,EAAE,KAAK;QACZC,QAAQ,EAAEL,MAAM,CAACM,GAAG,CAACC,KAAK,IAAI;UAAE;UAC9B,QAAQA,KAAK,CAACC,IAAI;YAClB,KAAKhB,MAAM,CAACC,eAAe;cACzB,OAAQ,SAAQc,KAAK,CAACE,KAAK,CAACC,GAAI,mBAAkB;YACpD,KAAKlB,MAAM,CAACE,uBAAuB;cACjC,OAAQ,SAAQa,KAAK,CAACE,KAAK,CAACC,GAAI,iCAAgCH,KAAK,CAACI,cAAc,CAACL,GAAG,CAACM,EAAE,IAAIA,EAAE,CAACJ,IAAI,CAAC,CAACK,IAAI,CAAC,CAAE,EAAC;YAClH;UACA;QACF,CAAC;MACH,CAAC;IACH;IAEA,OAAO;MAACT,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAASN,GAAGA,CAACC,MAAM,EAAE;IACnB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxCF,MAAM,CAACc,OAAO,CAACP,KAAK,IAAI;MACtB,IAAIA,KAAK,CAACC,IAAI,KAAKhB,MAAM,CAACE,uBAAuB,EAAE;QAAE;QACnD,IAAIa,KAAK,CAACI,cAAc,CAACR,MAAM,KAAKI,KAAK,CAACE,KAAK,CAACM,SAAS,CAACZ,MAAM,EAAE;UAAE;UAClEJ,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;QACjC,CAAC,MAAM;UAAE;UACPF,KAAK,CAACI,cAAc,CAACG,OAAO,CAACF,EAAE,IAAI;YACjCb,MAAM,CAACkB,cAAc,CAACL,EAAE,EAAEL,KAAK,CAACE,KAAK,CAAC;UACxC,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QAAE;QACPV,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;MACjC;IACF,CAAC,CAAC;EACJ;EAEA,SAASR,UAAUA,CAACC,MAAM,EAAE;IAC1B,OAAOA,MAAM,CAACgB,MAAM,CAAC,CAAClB,MAAM,EAAES,KAAK,KAAK;MACtC,IAAIA,KAAK,CAACM,SAAS,EAAE;QACnB,IAAIN,KAAK,CAACM,SAAS,CAACZ,MAAM,KAAK,CAAC,EAAE;UAChC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YAACV,KAAK;YAAED,IAAI,EAAEhB,MAAM,CAACC;UAAe,CAAC,CAAC;QAC7D;QAEA,MAAM2B,qBAAqB,GAAGX,KAAK,CAACM,SAAS,CAACM,MAAM,CAACT,EAAE,IAAI,CAACA,EAAE,CAACU,KAAK,CAAC;QAErE,IAAIF,qBAAqB,CAACjB,MAAM,GAAG,CAAC,EAAE;UACpC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YACnBV,KAAK;YACLE,cAAc,EAAES,qBAAqB;YACrCZ,IAAI,EAAEhB,MAAM,CAACE;UACf,CAAC,CAAC;QACJ;MACF;MAEA,OAAOM,MAAM;IACf,CAAC,EAAE,EAAE,CAAC;EACR;AACF","ignoreList":[]}
1
+ {"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","_default","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statements\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statements\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statements\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statements\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,CAAC;EAClBC,uBAAuB,EAAE;AAC3B,CAAC;AAEc,SAAAC,SAAA,EAAY;EACzB,OAAO;IACLC,WAAW,EAAE,sBAAsB;IACnCC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQA,CAACE,MAAM,EAAE;IACxB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxC,IAAIF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;MACrB,OAAO;QACLC,KAAK,EAAE,KAAK;QACZC,QAAQ,EAAEL,MAAM,CAACM,GAAG,CAACC,KAAK,IAAI;UAAE;UAC9B,QAAQA,KAAK,CAACC,IAAI;YAClB,KAAKhB,MAAM,CAACC,eAAe;cACzB,OAAO,SAASc,KAAK,CAACE,KAAK,CAACC,GAAG,mBAAmB;YACpD,KAAKlB,MAAM,CAACE,uBAAuB;cACjC,OAAO,SAASa,KAAK,CAACE,KAAK,CAACC,GAAG,iCAAiCH,KAAK,CAACI,cAAc,CAACL,GAAG,CAACM,EAAE,IAAIA,EAAE,CAACJ,IAAI,CAAC,CAACK,IAAI,CAAC,CAAC,EAAE;YAClH;UACA;QACF,CAAC;MACH,CAAC;IACH;IAEA,OAAO;MAACT,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAASN,GAAGA,CAACC,MAAM,EAAE;IACnB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxCF,MAAM,CAACc,OAAO,CAACP,KAAK,IAAI;MACtB,IAAIA,KAAK,CAACC,IAAI,KAAKhB,MAAM,CAACE,uBAAuB,EAAE;QAAE;QACnD,IAAIa,KAAK,CAACI,cAAc,CAACR,MAAM,KAAKI,KAAK,CAACE,KAAK,CAACM,SAAS,CAACZ,MAAM,EAAE;UAAE;UAClEJ,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;QACjC,CAAC,MAAM;UAAE;UACPF,KAAK,CAACI,cAAc,CAACG,OAAO,CAACF,EAAE,IAAI;YACjCb,MAAM,CAACkB,cAAc,CAACL,EAAE,EAAEL,KAAK,CAACE,KAAK,CAAC;UACxC,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QAAE;QACPV,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;MACjC;IACF,CAAC,CAAC;EACJ;EAEA,SAASR,UAAUA,CAACC,MAAM,EAAE;IAC1B,OAAOA,MAAM,CAACgB,MAAM,CAAC,CAAClB,MAAM,EAAES,KAAK,KAAK;MACtC,IAAIA,KAAK,CAACM,SAAS,EAAE;QACnB,IAAIN,KAAK,CAACM,SAAS,CAACZ,MAAM,KAAK,CAAC,EAAE;UAChC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YAACV,KAAK;YAAED,IAAI,EAAEhB,MAAM,CAACC;UAAe,CAAC,CAAC;QAC7D;QAEA,MAAM2B,qBAAqB,GAAGX,KAAK,CAACM,SAAS,CAACM,MAAM,CAACT,EAAE,IAAI,CAACA,EAAE,CAACU,KAAK,CAAC;QAErE,IAAIF,qBAAqB,CAACjB,MAAM,GAAG,CAAC,EAAE;UACpC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YACnBV,KAAK;YACLE,cAAc,EAAES,qBAAqB;YACrCZ,IAAI,EAAEhB,MAAM,CAACE;UACf,CAAC,CAAC;QACJ;MACF;MAEA,OAAOM,MAAM;IACf,CAAC,EAAE,EAAE,CAAC;EACR;AACF","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  var _chai = require("chai");
4
4
  var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _emptyFields = _interopRequireDefault(require("../src/empty-fields"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  before(() => {
8
8
  _marcRecord.MarcRecord.setValidationOptions({
9
9
  subfields: false,
@@ -1 +1 @@
1
- {"version":3,"file":"empty-fields.spec.js","names":["_chai","require","_marcRecord","_emptyFields","_interopRequireDefault","obj","__esModule","default","before","MarcRecord","setValidationOptions","subfields","subfieldValues","after","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","fields","tag","value","ind1","ind2","code","result","have","property","eql","valid","messages","fix"],"sources":["../src/empty-fields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/empty-fields';\n\nbefore(() => {\n MarcRecord.setValidationOptions({subfields: false, subfieldValues: false});\n});\n\nafter(() => {\n MarcRecord.setValidationOptions({});\n});\n\ndescribe('empty-fields', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\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 describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {tag: '001', value: '1234567'},\n {tag: '500', ind1: ' ', ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n }\n ]}\n ]\n });\n const result = await validator.validate(record);\n expect(result).to.to.have.property('valid', true);\n });\n\n it('Finds a missing subfield value', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 245 has missing subfield values: a']});\n });\n\n it('Finds an empty subfield array', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n subfields: []\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 500 has no subfields']});\n });\n });\n\n describe('#fix', () => {\n it('Removes a subfield with missing value', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n },\n {\n code: 'b'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n }\n ]\n }\n ]);\n });\n\n it('Removes a field with no subfields', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '1234567'\n },\n {\n tag: '500',\n subfields: []\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '001',\n value: '1234567'\n }\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"empty-fields.spec.js","names":["_chai","require","_marcRecord","_emptyFields","_interopRequireDefault","e","__esModule","default","before","MarcRecord","setValidationOptions","subfields","subfieldValues","after","describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","fields","tag","value","ind1","ind2","code","result","have","property","eql","valid","messages","fix"],"sources":["../src/empty-fields.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/empty-fields';\n\nbefore(() => {\n MarcRecord.setValidationOptions({subfields: false, subfieldValues: false});\n});\n\nafter(() => {\n MarcRecord.setValidationOptions({});\n});\n\ndescribe('empty-fields', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\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 describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {tag: '001', value: '1234567'},\n {tag: '500', ind1: ' ', ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n }\n ]}\n ]\n });\n const result = await validator.validate(record);\n expect(result).to.to.have.property('valid', true);\n });\n\n it('Finds a missing subfield value', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 245 has missing subfield values: a']});\n });\n\n it('Finds an empty subfield array', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n subfields: []\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 500 has no subfields']});\n });\n });\n\n describe('#fix', () => {\n it('Removes a subfield with missing value', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '245',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n },\n {\n code: 'b'\n }\n ]\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '245',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {\n code: 'a',\n value: 'foo'\n }\n ]\n }\n ]);\n });\n\n it('Removes a field with no subfields', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '1234567'\n },\n {\n tag: '500',\n subfields: []\n }\n ]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '001',\n value: '1234567'\n }\n ]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -7,7 +7,7 @@ exports.default = _default;
7
7
  exports.validateSingleField = validateSingleField;
8
8
  var _endingPunctuationConf = require("./ending-punctuation-conf");
9
9
  var _debug = _interopRequireDefault(require("debug"));
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
11
  /**
12
12
  *
13
13
  * @licstart The following is the entire license notice for the JavaScript code in this file.