@natlibfi/marc-record-validators-melinda 11.6.6 → 11.6.7-alpha.1

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 (223) hide show
  1. package/.github/workflows/melinda-node-tests.yml +1 -1
  2. package/dist/access-rights.js +1 -5
  3. package/dist/access-rights.js.map +1 -1
  4. package/dist/addMissingField336.js +1 -1
  5. package/dist/addMissingField336.js.map +1 -1
  6. package/dist/cyrillux-usemarcon-replacement.js +41 -45
  7. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  8. package/dist/cyrillux.js +13 -17
  9. package/dist/cyrillux.js.map +1 -1
  10. package/dist/disambiguateSeriesStatements.js +3 -4
  11. package/dist/disambiguateSeriesStatements.js.map +1 -1
  12. package/dist/double-commas.js +2 -1
  13. package/dist/double-commas.js.map +1 -1
  14. package/dist/duplicates-ind1.js +1 -1
  15. package/dist/duplicates-ind1.js.map +1 -1
  16. package/dist/empty-fields.js +0 -4
  17. package/dist/empty-fields.js.map +1 -1
  18. package/dist/ending-punctuation.js +21 -49
  19. package/dist/ending-punctuation.js.map +1 -1
  20. package/dist/ending-whitespace.js +0 -4
  21. package/dist/ending-whitespace.js.map +1 -1
  22. package/dist/field-008-18-34-character-groups.js +4 -5
  23. package/dist/field-008-18-34-character-groups.js.map +1 -1
  24. package/dist/field-505-separators.js +8 -6
  25. package/dist/field-505-separators.js.map +1 -1
  26. package/dist/field-521-fix.js +5 -6
  27. package/dist/field-521-fix.js.map +1 -1
  28. package/dist/field-exclusion.js +5 -12
  29. package/dist/field-exclusion.js.map +1 -1
  30. package/dist/field-exclusion.spec.js +3 -5
  31. package/dist/field-exclusion.spec.js.map +1 -1
  32. package/dist/field-structure.js +2 -5
  33. package/dist/field-structure.js.map +1 -1
  34. package/dist/fields-present.js +1 -1
  35. package/dist/fields-present.js.map +1 -1
  36. package/dist/fields-present.spec.js +1 -1
  37. package/dist/fields-present.spec.js.map +1 -1
  38. package/dist/fix-33X.js +5 -6
  39. package/dist/fix-33X.js.map +1 -1
  40. package/dist/fix-country-codes.js +3 -4
  41. package/dist/fix-country-codes.js.map +1 -1
  42. package/dist/fix-language-codes.js +12 -9
  43. package/dist/fix-language-codes.js.map +1 -1
  44. package/dist/fixRelatorTerms.js +8 -8
  45. package/dist/fixRelatorTerms.js.map +1 -1
  46. package/dist/fixed-fields.js +1 -4
  47. package/dist/fixed-fields.js.map +1 -1
  48. package/dist/identical-fields.js +2 -3
  49. package/dist/identical-fields.js.map +1 -1
  50. package/dist/indicator-fixes.js +14 -15
  51. package/dist/indicator-fixes.js.map +1 -1
  52. package/dist/isbn-issn.js +8 -11
  53. package/dist/isbn-issn.js.map +1 -1
  54. package/dist/item-language.js +5 -12
  55. package/dist/item-language.js.map +1 -1
  56. package/dist/merge-fields/counterpartField.js +6 -8
  57. package/dist/merge-fields/counterpartField.js.map +1 -1
  58. package/dist/merge-fields/index.js +3 -3
  59. package/dist/merge-fields/index.js.map +1 -1
  60. package/dist/merge-fields/mergeConstraints.js +0 -1
  61. package/dist/merge-fields/mergeConstraints.js.map +1 -1
  62. package/dist/merge-fields/mergeField.js +12 -18
  63. package/dist/merge-fields/mergeField.js.map +1 -1
  64. package/dist/merge-fields/mergeIndicator.js +5 -5
  65. package/dist/merge-fields/mergeIndicator.js.map +1 -1
  66. package/dist/merge-fields/mergeOrAddPostprocess.js +6 -9
  67. package/dist/merge-fields/mergeOrAddPostprocess.js.map +1 -1
  68. package/dist/merge-fields/mergeOrAddSubfield.js +6 -8
  69. package/dist/merge-fields/mergeOrAddSubfield.js.map +1 -1
  70. package/dist/merge-fields/mergeSubfield.js +8 -8
  71. package/dist/merge-fields/mergeSubfield.js.map +1 -1
  72. package/dist/merge-fields/removeDuplicateSubfields.js +1 -2
  73. package/dist/merge-fields/removeDuplicateSubfields.js.map +1 -1
  74. package/dist/merge-fields/worldKnowledge.js +1 -1
  75. package/dist/merge-fields/worldKnowledge.js.map +1 -1
  76. package/dist/mergeField500Lisapainokset.js +0 -3
  77. package/dist/mergeField500Lisapainokset.js.map +1 -1
  78. package/dist/mergeRelatorTermFields.js +3 -3
  79. package/dist/mergeRelatorTermFields.js.map +1 -1
  80. package/dist/modernize-502.js +6 -6
  81. package/dist/modernize-502.js.map +1 -1
  82. package/dist/multiple-subfield-0.js +4 -4
  83. package/dist/multiple-subfield-0.js.map +1 -1
  84. package/dist/non-breaking-space.js +0 -4
  85. package/dist/non-breaking-space.js.map +1 -1
  86. package/dist/normalize-dashes.js +5 -4
  87. package/dist/normalize-dashes.js.map +1 -1
  88. package/dist/normalize-identifiers.js +6 -6
  89. package/dist/normalize-identifiers.js.map +1 -1
  90. package/dist/normalize-qualifying-information.js +4 -4
  91. package/dist/normalize-qualifying-information.js.map +1 -1
  92. package/dist/normalize-utf8-diacritics.js +7 -7
  93. package/dist/normalize-utf8-diacritics.js.map +1 -1
  94. package/dist/normalizeFieldForComparison.js +21 -20
  95. package/dist/normalizeFieldForComparison.js.map +1 -1
  96. package/dist/normalizeSubfieldValueForComparison.js +1 -2
  97. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  98. package/dist/prepublicationUtils.js +3 -3
  99. package/dist/prepublicationUtils.js.map +1 -1
  100. package/dist/punctuation/index.js +14 -31
  101. package/dist/punctuation/index.js.map +1 -1
  102. package/dist/punctuation2.js +9 -10
  103. package/dist/punctuation2.js.map +1 -1
  104. package/dist/reindexSubfield6OccurenceNumbers.js +8 -9
  105. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  106. package/dist/removeDuplicateDataFields.js +18 -20
  107. package/dist/removeDuplicateDataFields.js.map +1 -1
  108. package/dist/removeInferiorDataFields.js +16 -19
  109. package/dist/removeInferiorDataFields.js.map +1 -1
  110. package/dist/resolvable-ext-references-melinda.js +4 -8
  111. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  112. package/dist/resolveOrphanedSubfield6s.js +9 -9
  113. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  114. package/dist/sanitize-vocabulary-source-codes.js +9 -9
  115. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  116. package/dist/sort-tags.js +2 -2
  117. package/dist/sort-tags.js.map +1 -1
  118. package/dist/sortFields.js +4 -9
  119. package/dist/sortFields.js.map +1 -1
  120. package/dist/sortRelatorTerms.js +4 -5
  121. package/dist/sortRelatorTerms.js.map +1 -1
  122. package/dist/sortSubfields.js +5 -6
  123. package/dist/sortSubfields.js.map +1 -1
  124. package/dist/stripPunctuation.js +2 -2
  125. package/dist/stripPunctuation.js.map +1 -1
  126. package/dist/subfield-exclusion.js +4 -11
  127. package/dist/subfield-exclusion.js.map +1 -1
  128. package/dist/subfield6Utils.js +12 -11
  129. package/dist/subfield6Utils.js.map +1 -1
  130. package/dist/subfield8Utils.js +8 -9
  131. package/dist/subfield8Utils.js.map +1 -1
  132. package/dist/subfieldValueNormalizations.js +5 -8
  133. package/dist/subfieldValueNormalizations.js.map +1 -1
  134. package/dist/sync-007-and-300.js +8 -8
  135. package/dist/sync-007-and-300.js.map +1 -1
  136. package/dist/translate-terms.js +5 -6
  137. package/dist/translate-terms.js.map +1 -1
  138. package/dist/typeOfDate-008.js +3 -4
  139. package/dist/typeOfDate-008.js.map +1 -1
  140. package/dist/unicode-decomposition.js +1 -1
  141. package/dist/unicode-decomposition.js.map +1 -1
  142. package/dist/update-field-540.js +5 -6
  143. package/dist/update-field-540.js.map +1 -1
  144. package/dist/urn.js +4 -9
  145. package/dist/urn.js.map +1 -1
  146. package/dist/utils.js +5 -9
  147. package/dist/utils.js.map +1 -1
  148. package/eslint.config.mjs +53 -0
  149. package/package.json +12 -13
  150. package/src/access-rights.js +4 -4
  151. package/src/addMissingField336.js +1 -1
  152. package/src/cyrillux-usemarcon-replacement.js +38 -38
  153. package/src/cyrillux.js +14 -14
  154. package/src/disambiguateSeriesStatements.js +3 -3
  155. package/src/double-commas.js +2 -2
  156. package/src/duplicates-ind1.js +1 -1
  157. package/src/empty-fields.js +4 -4
  158. package/src/ending-punctuation.js +46 -49
  159. package/src/ending-whitespace.js +0 -2
  160. package/src/field-008-18-34-character-groups.js +5 -5
  161. package/src/field-505-separators.js +6 -6
  162. package/src/field-521-fix.js +6 -6
  163. package/src/field-exclusion.js +12 -12
  164. package/src/field-exclusion.spec.js +4 -4
  165. package/src/field-structure.js +5 -5
  166. package/src/fields-present.js +1 -1
  167. package/src/fields-present.spec.js +1 -1
  168. package/src/fix-33X.js +5 -5
  169. package/src/fix-country-codes.js +3 -3
  170. package/src/fix-language-codes.js +10 -9
  171. package/src/fixRelatorTerms.js +8 -8
  172. package/src/fixed-fields.js +3 -3
  173. package/src/identical-fields.js +3 -3
  174. package/src/indicator-fixes.js +15 -15
  175. package/src/isbn-issn.js +11 -11
  176. package/src/item-language.js +10 -10
  177. package/src/merge-fields/counterpartField.js +7 -7
  178. package/src/merge-fields/index.js +3 -3
  179. package/src/merge-fields/mergeConstraints.js +1 -1
  180. package/src/merge-fields/mergeField.js +16 -17
  181. package/src/merge-fields/mergeIndicator.js +5 -5
  182. package/src/merge-fields/mergeOrAddPostprocess.js +9 -9
  183. package/src/merge-fields/mergeOrAddSubfield.js +6 -6
  184. package/src/merge-fields/mergeSubfield.js +8 -8
  185. package/src/merge-fields/removeDuplicateSubfields.js +1 -2
  186. package/src/merge-fields/worldKnowledge.js +1 -1
  187. package/src/mergeField500Lisapainokset.js +0 -2
  188. package/src/mergeRelatorTermFields.js +3 -3
  189. package/src/modernize-502.js +6 -6
  190. package/src/multiple-subfield-0.js +4 -4
  191. package/src/non-breaking-space.js +0 -2
  192. package/src/normalize-dashes.js +4 -4
  193. package/src/normalize-identifiers.js +6 -6
  194. package/src/normalize-qualifying-information.js +4 -4
  195. package/src/normalize-utf8-diacritics.js +7 -7
  196. package/src/normalizeFieldForComparison.js +20 -20
  197. package/src/normalizeSubfieldValueForComparison.js +1 -1
  198. package/src/prepublicationUtils.js +3 -3
  199. package/src/punctuation/index.js +29 -29
  200. package/src/punctuation2.js +10 -10
  201. package/src/reindexSubfield6OccurenceNumbers.js +9 -9
  202. package/src/removeDuplicateDataFields.js +21 -23
  203. package/src/removeInferiorDataFields.js +19 -19
  204. package/src/resolvable-ext-references-melinda.js +8 -8
  205. package/src/resolveOrphanedSubfield6s.js +9 -9
  206. package/src/sanitize-vocabulary-source-codes.js +8 -8
  207. package/src/sort-tags.js +2 -2
  208. package/src/sortFields.js +6 -6
  209. package/src/sortRelatorTerms.js +5 -5
  210. package/src/sortSubfields.js +6 -6
  211. package/src/stripPunctuation.js +2 -2
  212. package/src/subfield-exclusion.js +11 -11
  213. package/src/subfield6Utils.js +11 -11
  214. package/src/subfield8Utils.js +6 -9
  215. package/src/subfieldValueNormalizations.js +5 -7
  216. package/src/sync-007-and-300.js +8 -8
  217. package/src/translate-terms.js +3 -5
  218. package/src/typeOfDate-008.js +3 -3
  219. package/src/unicode-decomposition.js +1 -1
  220. package/src/update-field-540.js +6 -6
  221. package/src/urn.js +8 -6
  222. package/src/utils.js +8 -8
  223. package/.eslintignore +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fields-present.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldsPresent","e","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","error","with","property","tagPatterns","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages"],"sources":["../src/fields-present.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fields-present';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('fields-present', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory([/^500$/u, /^400$/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\n it('Throws an error when tagPatterns not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'No tag pattern array provided');\n }\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const tagPatterns = [/^5..$/u, /^FOO$/u];\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: 'FOO',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record valid', async () => {\n const tagPatterns = [/^(020|022|024)$/u]; // eslint-disable-line\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '040',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const tagPatterns = [/^5..$/u, /^FOO$/u];\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: 'BAR',\n ind1: '1',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['The following tag patterns are not present in the record tag field: /^FOO$/u']});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fields-present.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fieldsPresent","e","__esModule","default","expect","chai","use","chaiAsPromised","describe","it","validator","validatorFactory","to","be","an","that","has","any","keys","description","a","validate","error","with","property","tagPatterns","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages"],"sources":["../src/fields-present.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/fields-present';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\ndescribe('fields-present', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory([/^500$/u, /^400$/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\n it('Throws an error when tagPatterns not provided', () => {\n try {\n validatorFactory();\n } catch (error) {\n expect(error).to.be.an('error').with.property('message', 'No tag pattern array provided');\n }\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const tagPatterns = [/^5..$/u, /^FOO$/u];\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: 'FOO',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record valid', async () => {\n const tagPatterns = [/^(020|022|024)$/u];\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '020',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '040',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const tagPatterns = [/^5..$/u, /^FOO$/u];\n const validator = await validatorFactory(tagPatterns);\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: 'BAR',\n ind1: '1',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['The following tag patterns are not present in the record tag field: /^FOO$/u']});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
package/dist/fix-33X.js CHANGED
@@ -384,7 +384,7 @@ function _default() {
384
384
  (0, _utils.nvdebug)(`FIX ${description}...`);
385
385
  const catLang = (0, _utils.getCatalogingLanguage)(record) || 'fin';
386
386
  const fields = getRelevantFields(record);
387
- fields.forEach(f => fixField(f, catLang));
387
+ fields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return
388
388
  (0, _utils.nvdebug)(` GOT ${fields.length}...`);
389
389
  // FFS: we actually need newFields array here! Videogame, for example, might be
390
390
  // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
@@ -408,7 +408,7 @@ function _default() {
408
408
  }
409
409
  const originalStrings = fields.map(f => (0, _utils.fieldToString)(f));
410
410
  const clonedFields = fields.map(f => (0, _clone.default)(f));
411
- clonedFields.forEach(f => fixField(f, catLang));
411
+ clonedFields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return
412
412
  const modifiedStrings = clonedFields.map(f => (0, _utils.fieldToString)(f));
413
413
  const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);
414
414
  return {
@@ -481,13 +481,12 @@ function _default() {
481
481
  if (!newTerm) {
482
482
  return;
483
483
  }
484
- subfieldA.value = newTerm; // eslint-disable-line functional/immutable-data
484
+ subfieldA.value = newTerm;
485
485
  field.subfields.push({
486
486
  'code': 'b',
487
487
  'value': code
488
- }); // eslint-disable-line functional/immutable-data
489
- field.subfields.push(tagToSubfield2(field.tag)); // eslint-disable-line functional/immutable-data
490
-
488
+ });
489
+ field.subfields.push(tagToSubfield2(field.tag));
491
490
  function codeToTerm(code) {
492
491
  if (field.tag === '336') {
493
492
  return (0, _field33XUtils.map336CodeToTerm)(code, catalogingLanguage);
@@ -1 +1 @@
1
- {"version":3,"file":"fix-33X.js","names":["_clone","_interopRequireDefault","require","_utils","_field33XUtils","e","__esModule","default","description","map336","map337","map338","_default","validate","fix","record","nvdebug","catLang","getCatalogingLanguage","fields","getRelevantFields","forEach","f","fixField","length","res","message","valid","originalStrings","map","fieldToString","clonedFields","clone","modifiedStrings","changes","str","i","getA","field","as","subfields","filter","code","undefined","mapTermToCode","term","tag","mapFieldToCode","subfieldA","value","get","tagToSubfield2","catalogingLanguage","newTerm","codeToTerm","push","map336CodeToTerm","map337CodeToTerm","map338CodeToTerm"],"sources":["../src/fix-33X.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils';\n\nconst description = 'Fix non-RDA 33X field(s)';\n\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; rörlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (rörlig ; tredimensionell)': 'tdm',\n 'Bild (rörlig ; tvådimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera innehållstyper': 'zzz',\n 'Föremal': 'tdf',\n 'Föremål (att vidra)': 'tcf',\n 'Föremål (kartografisk ; att vidra)': 'crn',\n 'Föremål (kartografisk ; tredimensionell)': 'crn',\n 'Föremål (tredimensionell)': 'tdf',\n 'Geräusche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'Määrittelemätön': 'zzz',\n 'Määrittelemätön sisältötyyppi': 'zzz',\n 'Obestämd innehållstyp': 'zzz',\n 'Ospecificerad innehållstyp': 'zzz',\n 'Puhe': 'spw',\n 'Rörelse (notation ; att vidra)': 'tcn',\n 'Rörelse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sisältötyyppejä': 'zzz',\n 'Vild (still ; tvådimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framförd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk rörlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'määrittelemätön': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'rörelsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad rörelse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell rörlig bild': 'tdm',\n 'tvådimensionell rörlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n 'Ääni': 'snd',\n 'ääni': 'snd',\n 'Электронная программа': 'cop', // computer program\n 'Изображение (картографическое)': 'cri',\n 'Музыка (знаковая)': 'ntm', // notated music\n 'Музыка (исполнительская)': 'prm', // performed music\n 'Устная речь': 'spw',\n 'Изображение (неподвижное)': 'sti',\n 'Изображение (движущееся)': 'tdi', // 2D moving image\n 'Текст': 'txt',\n 'Текст (визуальный)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranvändbar': 'c',\n 'ei välittävää laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'käytettävissä ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'määrittelemätön': 'z',\n 'määrittelemätön välittävä laite': 'z',\n 'oförmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonekäyttöinen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppejä': 'z',\n 'video': 'v',\n 'övrig': 'x',\n // Cyrillic (sorted by result):\n 'электронн': 'c',\n 'электронный': 'c',\n 'непосредственн': 'n',\n 'непосредственный': 'n',\n 'аудио': 's', // audio\n 'видео': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'blädderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'fönsterkort': 'ha',\n 'föremål': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehtiötaulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtråd': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (läpinäkymätön)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'määrittelemätön': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n 'äänihihna': 'sb',\n 'äänikasetti': 'ss',\n 'äänikela': 'st',\n 'äänilankakela': 'sw',\n 'äänilevy': 'sd',\n 'ääniraitakela': 'si',\n 'äänirulla': 'sq',\n 'äänisilmukkakasetti': 'sg',\n 'äänisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang));\n nvdebug(` GOT ${fields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang));\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm; // eslint-disable-line functional/immutable-data\n field.subfields.push({'code': 'b', 'value': code}); // eslint-disable-line functional/immutable-data\n field.subfields.push(tagToSubfield2(field.tag)); // eslint-disable-line functional/immutable-data\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAAqF,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAHrF;;AAKA,MAAMG,WAAW,GAAG,0BAA0B;AAG9C,MAAMC,MAAM,GAAG;EACb,iCAAiC,EAAE,KAAK;EACxC,8BAA8B,EAAE,KAAK;EACrC,qBAAqB,EAAE,KAAK;EAC5B,iCAAiC,EAAE,KAAK;EACxC,iCAAiC,EAAE,KAAK;EACxC,0BAA0B,EAAE,KAAK;EACjC,gCAAgC,EAAE,KAAK;EACvC,cAAc,EAAE,KAAK;EACrB,MAAM,EAAE,KAAK;EACb,sBAAsB,EAAE,KAAK;EAC7B,SAAS,EAAE,KAAK;EAChB,wBAAwB,EAAE,KAAK;EAC/B,cAAc,EAAE,KAAK;EACrB,OAAO,EAAE,KAAK;EACd,sCAAsC,EAAE,KAAK;EAC7C,uBAAuB,EAAE,KAAK;EAC9B,4CAA4C,EAAE,KAAK;EACnD,yBAAyB,EAAE,KAAK;EAChC,sBAAsB,EAAE,KAAK;EAC7B,sBAAsB,EAAE,KAAK;EAC7B,SAAS,EAAE,KAAK;EAChB,qBAAqB,EAAE,KAAK;EAC5B,oCAAoC,EAAE,KAAK;EAC3C,0CAA0C,EAAE,KAAK;EACjD,2BAA2B,EAAE,KAAK;EAClC,WAAW,EAAE,KAAK;EAClB,MAAM,EAAE,KAAK;EACb,qCAAqC,EAAE,KAAK;EAC5C,iCAAiC,EAAE,KAAK;EACxC,sBAAsB,EAAE,KAAK;EAC7B,mCAAmC,EAAE,KAAK;EAC1C,mCAAmC,EAAE,KAAK;EAC1C,gCAAgC,EAAE,KAAK;EACvC,gCAAgC,EAAE,KAAK;EACvC,6BAA6B,EAAE,KAAK;EACpC,cAAc,EAAE,KAAK;EACrB,kCAAkC,EAAE,KAAK;EACzC,iCAAiC,EAAE,KAAK;EACxC,mBAAmB,EAAE,KAAK;EAC1B,MAAM,EAAE,KAAK;EACb,qBAAqB,EAAE,KAAK;EAC5B,qCAAqC,EAAE,KAAK;EAC5C,qCAAqC,EAAE,KAAK;EAC5C,sBAAsB,EAAE,KAAK;EAC7B,8BAA8B,EAAE,KAAK;EACrC,kBAAkB,EAAE,KAAK;EACzB,qBAAqB,EAAE,KAAK;EAC5B,iBAAiB,EAAE,KAAK;EACxB,+BAA+B,EAAE,KAAK;EACtC,uBAAuB,EAAE,KAAK;EAC9B,4BAA4B,EAAE,KAAK;EACnC,MAAM,EAAE,KAAK;EACb,gCAAgC,EAAE,KAAK;EACvC,oBAAoB,EAAE,KAAK;EAC3B,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,KAAK;EACf,yCAAyC,EAAE,KAAK;EAChD,MAAM,EAAE,KAAK;EACb,kBAAkB,EAAE,KAAK;EACzB,wBAAwB,EAAE,KAAK;EAC/B,gCAAgC,EAAE,KAAK;EACvC,OAAO,EAAE,KAAK;EACd,sBAAsB,EAAE,KAAK;EAC7B,oBAAoB,EAAE,KAAK;EAC3B,2BAA2B,EAAE,KAAK;EAClC,4BAA4B,EAAE,KAAK;EACnC,6CAA6C,EAAE,KAAK;EACpD,qCAAqC,EAAE,KAAK;EAC5C,6CAA6C,EAAE,KAAK;EACpD,kBAAkB,EAAE,KAAK;EACzB,kBAAkB,EAAE,KAAK;EACzB,SAAS,EAAE,KAAK;EAChB,cAAc,EAAE,KAAK;EACrB,mBAAmB,EAAE,KAAK;EAC1B,kBAAkB,EAAE,KAAK;EACzB,mBAAmB,EAAE,KAAK;EAC1B,gBAAgB,EAAE,KAAK;EACvB,mBAAmB,EAAE,KAAK;EAC1B,+BAA+B,EAAE,KAAK;EACtC,oBAAoB,EAAE,KAAK;EAC3B,qCAAqC,EAAE,KAAK;EAC5C,oBAAoB,EAAE,KAAK;EAC3B,6BAA6B,EAAE,KAAK;EACpC,8CAA8C,EAAE,KAAK;EACrD,6BAA6B,EAAE,KAAK;EACpC,mBAAmB,EAAE,KAAK;EAC1B,mBAAmB,EAAE,KAAK;EAC1B,0BAA0B,EAAE,KAAK;EACjC,0BAA0B,EAAE,KAAK;EACjC,0CAA0C,EAAE,KAAK;EACjD,mCAAmC,EAAE,KAAK;EAC1C,+BAA+B,EAAE,KAAK;EACtC,uBAAuB,EAAE,KAAK;EAC9B,eAAe,EAAE,KAAK;EACtB,MAAM,EAAE,KAAK;EACb,KAAK,EAAE,KAAK;EACZ,iBAAiB,EAAE,KAAK;EACxB,kBAAkB,EAAE,KAAK;EACzB,eAAe,EAAE,KAAK;EACtB,eAAe,EAAE,KAAK;EACtB,iBAAiB,EAAE,KAAK;EACxB,eAAe,EAAE,KAAK;EACtB,OAAO,EAAE,KAAK;EACd,iBAAiB,EAAE,KAAK;EACxB,MAAM,EAAE,KAAK;EACb,iBAAiB,EAAE,KAAK;EACxB,QAAQ,EAAE,KAAK;EACf,aAAa,EAAE,KAAK;EACpB,aAAa,EAAE,KAAK;EACpB,WAAW,EAAE,KAAK;EAClB,WAAW,EAAE,KAAK;EAClB,eAAe,EAAE,KAAK;EACtB,0BAA0B,EAAE,KAAK;EACjC,uBAAuB,EAAE,KAAK;EAC9B,cAAc,EAAE,KAAK;EACrB,gCAAgC,EAAE,KAAK;EACvC,gCAAgC,EAAE,KAAK;EACvC,eAAe,EAAE,KAAK;EACtB,wBAAwB,EAAE,KAAK;EAC/B,0BAA0B,EAAE,KAAK;EACjC,iBAAiB,EAAE,KAAK;EACxB,aAAa,EAAE,KAAK;EACpB,sBAAsB,EAAE,KAAK;EAC7B,wBAAwB,EAAE,KAAK;EAC/B,aAAa,EAAE,KAAK;EACpB,6BAA6B,EAAE,KAAK;EACpC,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,KAAK;EACb,OAAO,EAAE,KAAK;EACd,eAAe,EAAE,KAAK;EACtB,wBAAwB,EAAE,KAAK;EAC/B,gCAAgC,EAAE,KAAK;EACvC,kBAAkB,EAAE,KAAK;EACzB,sBAAsB,EAAE,KAAK;EAC7B,6BAA6B,EAAE,KAAK;EACpC,6BAA6B,EAAE,KAAK;EACpC,8BAA8B,EAAE,KAAK;EACrC,iBAAiB,EAAE,KAAK;EACxB,aAAa,EAAE,KAAK;EACpB,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,KAAK;EACb,uBAAuB,EAAE,KAAK;EAAE;EAChC,gCAAgC,EAAE,KAAK;EACvC,mBAAmB,EAAE,KAAK;EAAE;EAC5B,0BAA0B,EAAE,KAAK;EAAE;EACnC,aAAa,EAAE,KAAK;EACpB,2BAA2B,EAAE,KAAK;EAClC,0BAA0B,EAAE,KAAK;EAAE;EACnC,OAAO,EAAE,KAAK;EACd,oBAAoB,EAAE;AACxB,CAAC;AAED,MAAMC,MAAM,GAAG;EACb,gBAAgB,EAAE,GAAG;EACrB,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,GAAG;EACZ,UAAU,EAAE,GAAG;EACf,OAAO,EAAE,GAAG;EACZ,gBAAgB,EAAE,GAAG;EACrB,wBAAwB,EAAE,GAAG;EAC7B,cAAc,EAAE,GAAG;EACnB,aAAa,EAAE,GAAG;EAClB,eAAe,EAAE,GAAG;EACpB,gBAAgB,EAAE,GAAG;EACrB,8BAA8B,EAAE,GAAG;EACnC,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,GAAG;EAClB,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,iBAAiB,EAAE,GAAG;EACtB,eAAe,EAAE,GAAG;EACpB,cAAc,EAAE,GAAG;EACnB,KAAK,EAAE,GAAG;EACV,iBAAiB,EAAE,GAAG;EACtB,iCAAiC,EAAE,GAAG;EACtC,YAAY,EAAE,GAAG;EACjB,8BAA8B,EAAE,GAAG;EACnC,WAAW,EAAE,GAAG;EAChB,eAAe,EAAE,GAAG;EACpB,wBAAwB,EAAE,GAAG;EAC7B,OAAO,EAAE,GAAG;EACZ,WAAW,EAAE,GAAG;EAChB,YAAY,EAAE,GAAG;EACjB,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,cAAc,EAAE,GAAG;EACnB,gBAAgB,EAAE,GAAG;EACrB,gBAAgB,EAAE,GAAG;EACrB,eAAe,EAAE,GAAG;EACpB,eAAe,EAAE,GAAG;EACpB,qBAAqB,EAAE,GAAG;EAC1B,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAClB,sBAAsB,EAAE,GAAG;EAC3B,OAAO,EAAE,GAAG;EACZ,OAAO,EAAE,GAAG;EACZ;EACA,WAAW,EAAE,GAAG;EAChB,aAAa,EAAE,GAAG;EAClB,gBAAgB,EAAE,GAAG;EACrB,kBAAkB,EAAE,GAAG;EACvB,OAAO,EAAE,GAAG;EAAE;EACd,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,MAAM,GAAG;EACb,eAAe,EAAE,IAAI;EACrB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,YAAY,EAAE,IAAI;EAClB,iBAAiB,EAAE,IAAI;EACvB,gBAAgB,EAAE,IAAI;EACtB,YAAY,EAAE,IAAI;EAClB,YAAY,EAAE,IAAI;EAClB,iBAAiB,EAAE,IAAI;EACvB,eAAe,EAAE,IAAI;EACrB,gBAAgB,EAAE,IAAI;EACtB,UAAU,EAAE,IAAI;EAChB,kBAAkB,EAAE,IAAI;EACxB,cAAc,EAAE,IAAI;EACpB,MAAM,EAAE,IAAI;EACZ,eAAe,EAAE,IAAI;EACrB,oBAAoB,EAAE,IAAI;EAC1B,eAAe,EAAE,IAAI;EACrB,yBAAyB,EAAE,IAAI;EAC/B,yBAAyB,EAAE,IAAI;EAC/B,wBAAwB,EAAE,IAAI;EAC9B,oBAAoB,EAAE,IAAI;EAC1B,kBAAkB,EAAE,IAAI;EACxB,gBAAgB,EAAE,IAAI;EACtB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,IAAI;EACjB,kBAAkB,EAAE,IAAI;EACxB,YAAY,EAAE,IAAI;EAClB,kBAAkB,EAAE,IAAI;EACxB,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EACf,gBAAgB,EAAE,IAAI;EACtB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,IAAI;EACnB,YAAY,EAAE,IAAI;EAClB,sBAAsB,EAAE,IAAI;EAC5B,aAAa,EAAE,IAAI;EACnB,eAAe,EAAE,IAAI;EACrB,aAAa,EAAE,IAAI;EACnB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,qBAAqB,EAAE,IAAI;EAC3B,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,IAAI;EACnB,SAAS,EAAE,IAAI;EACf,cAAc,EAAE,IAAI;EACpB,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,IAAI;EACd,aAAa,EAAE,IAAI;EACnB,cAAc,EAAE,IAAI;EACpB,aAAa,EAAE,IAAI;EACnB,aAAa,EAAE,IAAI;EACnB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,IAAI;EAChB,YAAY,EAAE,IAAI;EAClB,qBAAqB,EAAE,IAAI;EAC3B,qBAAqB,EAAE,IAAI;EAC3B,oBAAoB,EAAE,IAAI;EAC1B,gBAAgB,EAAE,IAAI;EACtB,gBAAgB,EAAE,IAAI;EACtB,gBAAgB,EAAE,IAAI;EACtB,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,IAAI;EACxB,YAAY,EAAE,IAAI;EAClB,4BAA4B,EAAE,IAAI;EAClC,mBAAmB,EAAE,IAAI;EACzB,mBAAmB,EAAE,IAAI;EACzB,gBAAgB,EAAE,IAAI;EACtB,kBAAkB,EAAE,IAAI;EACxB,iBAAiB,EAAE,IAAI;EACvB,2BAA2B,EAAE,IAAI;EACjC,mBAAmB,EAAE,IAAI;EACzB,mBAAmB,EAAE,IAAI;EACzB,iBAAiB,EAAE,IAAI;EACvB,iBAAiB,EAAE,IAAI;EACvB,iBAAiB,EAAE,IAAI;EACvB,aAAa,EAAE,IAAI;EACnB,6BAA6B,EAAE,IAAI;EACnC,oBAAoB,EAAE,IAAI;EAC1B,yBAAyB,EAAE,IAAI;EAC/B,cAAc,EAAE,IAAI;EACpB,iBAAiB,EAAE,IAAI;EACvB,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,IAAI;EACd,SAAS,EAAE,IAAI;EACf,iBAAiB,EAAE,IAAI;EACvB,cAAc,EAAE,IAAI;EACpB,eAAe,EAAE,IAAI;EACrB,uBAAuB,EAAE,IAAI;EAC7B,aAAa,EAAE,IAAI;EACnB,mBAAmB,EAAE,IAAI;EACzB,iBAAiB,EAAE,IAAI;EACvB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,IAAI;EACpB,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EACb,kBAAkB,EAAE,IAAI;EACxB,uBAAuB,EAAE,IAAI;EAC7B,qBAAqB,EAAE,IAAI;EAC3B,qBAAqB,EAAE,IAAI;EAC3B,qBAAqB,EAAE,IAAI;EAC3B,kBAAkB,EAAE,IAAI;EACxB,kBAAkB,EAAE,IAAI;EACxB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,IAAI;EACjB,iBAAiB,EAAE,IAAI;EACvB,gBAAgB,EAAE,IAAI;EACtB,6BAA6B,EAAE,IAAI;EACnC,aAAa,EAAE,IAAI;EACnB,aAAa,EAAE,IAAI;EACnB,gBAAgB,EAAE,IAAI;EACtB,iBAAiB,EAAE,IAAI;EACvB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;EACpB,cAAc,EAAE,IAAI;EACpB,WAAW,EAAE,IAAI;EACjB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;EACpB,sBAAsB,EAAE,IAAI;EAC5B,YAAY,EAAE,IAAI;EAClB,YAAY,EAAE,IAAI;EAClB,gBAAgB,EAAE,IAAI;EACtB,QAAQ,EAAE,IAAI;EACd,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,IAAI;EACjB,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,IAAI;EAChB,eAAe,EAAE,IAAI;EACrB,UAAU,EAAE,IAAI;EAChB,eAAe,EAAE,IAAI;EACrB,WAAW,EAAE,IAAI;EACjB,qBAAqB,EAAE,IAAI;EAC3B,eAAe,EAAE;AACnB,CAAC;;AAED;;AAEe,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLJ,WAAW;IAAEK,QAAQ;IAAEC;EACzB,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,OAAOR,WAAW,KAAK,CAAC;IAChC,MAAMS,OAAO,GAAG,IAAAC,4BAAqB,EAACH,MAAM,CAAC,IAAI,KAAK;IACtD,MAAMI,MAAM,GAAGC,iBAAiB,CAACL,MAAM,CAAC;IACxCI,MAAM,CAACE,OAAO,CAACC,CAAC,IAAIC,QAAQ,CAACD,CAAC,EAAEL,OAAO,CAAC,CAAC;IACzC,IAAAD,cAAO,EAAC,QAAQG,MAAM,CAACK,MAAM,KAAK,CAAC;IACnC;IACA;IACA;IACA,MAAMC,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEZ,GAAG,EAAE,EAAE;MAAEa,KAAK,EAAE;IAAI,CAAC;IAE/C,OAAOF,GAAG;EACZ;EAEA,SAASZ,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAC,YAAYR,WAAW,KAAK,CAAC,CAAC,CAAC;IACvC,MAAMS,OAAO,GAAG,IAAAC,4BAAqB,EAACH,MAAM,CAAC,IAAI,KAAK;IACtD,MAAMI,MAAM,GAAGC,iBAAiB,CAACL,MAAM,CAAC;IACxC,IAAII,MAAM,CAACK,MAAM,KAAK,CAAC,EAAE;MACvB,OAAO;QAACE,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IACA,MAAMC,eAAe,GAAGT,MAAM,CAACU,GAAG,CAACP,CAAC,IAAI,IAAAQ,oBAAa,EAACR,CAAC,CAAC,CAAC;IACzD,MAAMS,YAAY,GAAGZ,MAAM,CAACU,GAAG,CAACP,CAAC,IAAI,IAAAU,cAAK,EAACV,CAAC,CAAC,CAAC;IAC9CS,YAAY,CAACV,OAAO,CAACC,CAAC,IAAIC,QAAQ,CAACD,CAAC,EAAEL,OAAO,CAAC,CAAC;IAC/C,MAAMgB,eAAe,GAAGF,YAAY,CAACF,GAAG,CAACP,CAAC,IAAI,IAAAQ,oBAAa,EAACR,CAAC,CAAC,CAAC;IAE/D,MAAMY,OAAO,GAAGN,eAAe,CAACC,GAAG,CAAC,CAACM,GAAG,EAAEC,CAAC,KAAK,IAAID,GAAG,SAASF,eAAe,CAACG,CAAC,CAAC,GAAG,CAAC;IAEtF,OAAO;MAACV,OAAO,EAAEQ,OAAO;MAAEP,KAAK,EAAE;IAAK,CAAC;EACzC;EAGA,SAASU,IAAIA,CAACC,KAAK,EAAE;IACnB,MAAMC,EAAE,GAAGD,KAAK,CAACE,SAAS,CAACC,MAAM,CAACnB,CAAC,IAAIA,CAAC,CAACoB,IAAI,KAAK,GAAG,CAAC;IACtD,IAAIH,EAAE,CAACf,MAAM,KAAK,CAAC,EAAE;MACnB,OAAOe,EAAE,CAAC,CAAC,CAAC;IACd;IACA,OAAOI,SAAS;EAClB;EAGA,SAASC,aAAaA,CAACC,IAAI,EAAEC,GAAG,EAAE;IAChC,IAAA9B,cAAO,EAAC,QAAQ8B,GAAG,MAAMD,IAAI,GAAG,CAAC;IACjC,IAAIC,GAAG,KAAK,KAAK,IAAID,IAAI,IAAIpC,MAAM,EAAE;MACnC,OAAOA,MAAM,CAACoC,IAAI,CAAC;IACrB;IACA,IAAIC,GAAG,KAAK,KAAK,IAAID,IAAI,IAAInC,MAAM,EAAE;MACnC,OAAOA,MAAM,CAACmC,IAAI,CAAC;IACrB;IACA,IAAIC,GAAG,KAAK,KAAK,IAAID,IAAI,IAAIlC,MAAM,EAAE;MACnC,OAAOA,MAAM,CAACkC,IAAI,CAAC;IACrB;IACA,OAAOF,SAAS;EAClB;EAEA,SAASI,cAAcA,CAACT,KAAK,EAAE;IAC7B,MAAMU,SAAS,GAAGX,IAAI,CAACC,KAAK,CAAC;IAC7B,IAAIU,SAAS,EAAE;MACb,OAAOJ,aAAa,CAACI,SAAS,CAACC,KAAK,EAAEX,KAAK,CAACQ,GAAG,CAAC;IAClD;IACA,OAAOH,SAAS;EAClB;EAEA,SAASvB,iBAAiBA,CAACL,MAAM,EAAE;IACjC,MAAMI,MAAM,GAAGJ,MAAM,CAACmC,GAAG,CAAC,SAAS,CAAC;IACpC;IACA,OAAO/B,MAAM,CAACsB,MAAM,CAACnB,CAAC,IAAIA,CAAC,CAACkB,SAAS,CAAChB,MAAM,KAAK,CAAC,IAAIuB,cAAc,CAACzB,CAAC,CAAC,CAAC;EAC1E;EAEA,SAAS6B,cAAcA,CAACL,GAAG,EAAE;IAC3B,IAAIA,GAAG,KAAK,KAAK,EAAE;MACjB,OAAO;QAAC,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE;MAAY,CAAC;IAC7C;IACA,IAAIA,GAAG,KAAK,KAAK,EAAE;MACjB,OAAO;QAAC,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE;MAAU,CAAC;IAC3C;IACA,IAAIA,GAAG,KAAK,KAAK,EAAE;MACjB,OAAO;QAAC,MAAM,EAAE,GAAG;QAAE,OAAO,EAAE;MAAY,CAAC;IAC7C;EACF;EAEA,SAASvB,QAAQA,CAACe,KAAK,EAAEc,kBAAkB,GAAG,KAAK,EAAE;IACnD,MAAMJ,SAAS,GAAGX,IAAI,CAACC,KAAK,CAAC;IAC7B,IAAI,CAACU,SAAS,EAAE;MACd;IACF;IACA,MAAMN,IAAI,GAAGE,aAAa,CAACI,SAAS,CAACC,KAAK,EAAEX,KAAK,CAACQ,GAAG,CAAC;IACtD,IAAI,CAACJ,IAAI,EAAE;MACT;IACF;IACA,MAAMW,OAAO,GAAGC,UAAU,CAACZ,IAAI,CAAC;IAChC,IAAI,CAACW,OAAO,EAAE;MACZ;IACF;IAEAL,SAAS,CAACC,KAAK,GAAGI,OAAO,CAAC,CAAC;IAC3Bf,KAAK,CAACE,SAAS,CAACe,IAAI,CAAC;MAAC,MAAM,EAAE,GAAG;MAAE,OAAO,EAAEb;IAAI,CAAC,CAAC,CAAC,CAAC;IACpDJ,KAAK,CAACE,SAAS,CAACe,IAAI,CAACJ,cAAc,CAACb,KAAK,CAACQ,GAAG,CAAC,CAAC,CAAC,CAAC;;IAEjD,SAASQ,UAAUA,CAACZ,IAAI,EAAE;MACxB,IAAIJ,KAAK,CAACQ,GAAG,KAAK,KAAK,EAAE;QACvB,OAAO,IAAAU,+BAAgB,EAACd,IAAI,EAAEU,kBAAkB,CAAC;MACnD;MACA,IAAId,KAAK,CAACQ,GAAG,KAAK,KAAK,EAAE;QACvB,OAAO,IAAAW,+BAAgB,EAACf,IAAI,EAAEU,kBAAkB,CAAC;MACnD;MACA,IAAId,KAAK,CAACQ,GAAG,KAAK,KAAK,EAAE;QACvB,OAAO,IAAAY,+BAAgB,EAAChB,IAAI,EAAEU,kBAAkB,CAAC;MACnD;MACA,OAAOT,SAAS;IAClB;EACF;AAEF","ignoreList":[]}
1
+ {"version":3,"file":"fix-33X.js","names":["_clone","_interopRequireDefault","require","_utils","_field33XUtils","e","__esModule","default","description","map336","map337","map338","_default","validate","fix","record","nvdebug","catLang","getCatalogingLanguage","fields","getRelevantFields","forEach","f","fixField","length","res","message","valid","originalStrings","map","fieldToString","clonedFields","clone","modifiedStrings","changes","str","i","getA","field","as","subfields","filter","code","undefined","mapTermToCode","term","tag","mapFieldToCode","subfieldA","value","get","tagToSubfield2","catalogingLanguage","newTerm","codeToTerm","push","map336CodeToTerm","map337CodeToTerm","map338CodeToTerm"],"sources":["../src/fix-33X.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {map336CodeToTerm, map337CodeToTerm, map338CodeToTerm} from './field33XUtils';\n\nconst description = 'Fix non-RDA 33X field(s)';\n\n\nconst map336 = {\n 'Bild (kartografisk ; att vidra)': 'crt',\n 'Bild (kartografisk ; rörlig)': 'crm',\n 'Bild (kartografisk)': 'cri',\n 'Bild (rörlig ; tredimensionell)': 'tdm',\n 'Bild (rörlig ; tvådimensionell)': 'tdi',\n 'Bild (still ; att vidra)': 'tci',\n 'Bild (still ; tredimensionell)': 'sti',\n 'Bild (still)': 'sti',\n 'Data': 'cod',\n 'Data (kartografinen)': 'crd',\n 'Dataset': 'cod',\n 'Dataset (kartografisk)': 'crd',\n 'Datorprogram': 'cop',\n 'Esine': 'tdf',\n 'Esine (kartografinen ; kosketeltava)': 'crn',\n 'Esine (kartografinen)': 'crf',\n 'Esine (kartogragrafinen ; kolmiulotteinen)': 'crf',\n 'Esine (kolmiulotteinen)': 'tdf',\n 'Esine (kosketeltava)': 'tcf',\n 'Flera innehållstyper': 'zzz',\n 'Föremal': 'tdf',\n 'Föremål (att vidra)': 'tcf',\n 'Föremål (kartografisk ; att vidra)': 'crn',\n 'Föremål (kartografisk ; tredimensionell)': 'crn',\n 'Föremål (tredimensionell)': 'tdf',\n 'Geräusche': 'snd',\n 'Kuva': 'sti',\n 'Kuva (kartografinen ; kosketeltava)': 'crt',\n 'Kuva (kartografinen ; liikkuva)': 'crm',\n 'Kuva (kartografinen)': 'cri',\n 'Kuva (liikkuva ; kaksiulotteinen)': 'tdi',\n 'Kuva (liikkuva ; kolmiulotteinen)': 'tdm',\n 'Kuva (still ; kaksiulotteinen)': 'sti',\n 'Kuva (still ; kolmiulotteinen)': 'sti',\n 'Kuva (still ; kosketeltava)': 'tci',\n 'Kuva (still)': 'sti',\n 'Liike (kosketeltava ; notatoitu)': 'tcn',\n 'Liike (notatoitu ; kosketeltava': 'tcn',\n 'Liike (notatoitu)': 'ntv',\n 'Ljud': 'snd',\n 'Musiikki (esitetty)': 'prm',\n 'Musiikki (kosketeltava ; notatoitu)': 'tcm',\n 'Musiikki (notatoitu ; kosketeltava)': 'tcm',\n 'Musiikki (notatoitu)': 'ntm',\n 'Musik (notation ; att vidra)': 'tcm',\n 'Musik (notation)': 'ntm',\n 'Musik (performance)': 'prm',\n 'Määrittelemätön': 'zzz',\n 'Määrittelemätön sisältötyyppi': 'zzz',\n 'Obestämd innehållstyp': 'zzz',\n 'Ospecificerad innehållstyp': 'zzz',\n 'Puhe': 'spw',\n 'Rörelse (notation ; att vidra)': 'tcn',\n 'Rörelse (notation)': 'ntv',\n 'Tal': 'spw',\n 'Teksti': 'txt',\n 'Teksti (kosketeltava); Text (att vidra)': 'tct',\n 'Text': 'txt',\n 'Tietokoneohjelma': 'cop',\n 'Useita sisältötyyppejä': 'zzz',\n 'Vild (still ; tvådimensionell)': 'sti',\n 'annan': 'xxx',\n 'cartographic dataset': 'crd',\n 'cartographic image': 'cri',\n 'cartographic moving image': 'crm',\n 'cartographic tactile image': 'crt',\n 'cartographic tactile three-dimensional form': 'crn',\n 'cartographic three-dimensional form': 'crf',\n 'cartographic three-dimensional tactile form': 'crn',\n 'computer dataset': 'cod',\n 'computer program': 'cop',\n 'dataset': 'cod',\n 'datorprogram': 'cop',\n 'digitaalinen data': 'cod',\n 'digitalt dataset': 'cod',\n 'esitetty musiikki': 'prm',\n 'framförd musik': 'prm',\n 'gesprochenes Wort': 'spw',\n 'kaksiulotteinen liikkuva kuva': 'tdi',\n 'kartografinen data': 'crd',\n 'kartografinen kolmiulotteinen muoto': 'crf',\n 'kartografinen kuva': 'cri',\n 'kartografinen liikkuva kuva': 'crm',\n 'kartografinen taktiili kolmiulotteinen muoto': 'crn',\n 'kartografinen taktiili kuva': 'crt',\n 'kartografisk bild': 'cri',\n 'kartografisk data': 'crd',\n 'kartografisk rörlig bild': 'crm',\n 'kartografisk taktil bild': 'crt',\n 'kartografisk taktil tredimensionell form': 'crn',\n 'kartografisk tredimensionell form': 'crf',\n 'kolmiulotteinen liikkuva kuva': 'tdm',\n 'kolmiulotteinen muoto': 'tdf',\n 'liikenotaatio': 'ntv',\n 'ljud': 'snd',\n 'muu': 'xxx',\n 'määrittelemätön': 'zzz',\n 'notated movement': 'ntv',\n 'notated music': 'ntm',\n 'noterad musik': 'ntm',\n 'nuottikirjoitus': 'ntm',\n 'ospecificerad': 'zzz',\n 'other': 'xxx',\n 'performed music': 'prm',\n 'puhe': 'spw',\n 'rörelsenotation': 'ntv',\n 'sounds': 'snd',\n 'spoken word': 'spw',\n 'still image': 'sti',\n 'stillbild': 'sti',\n 'stillkuva': 'sti',\n 'tactile image': 'tci',\n 'tactile notated movement': 'tcn',\n 'tactile notated music': 'tcm',\n 'tactile text': 'tct',\n 'tactile three-dimensional form': 'tcf',\n 'taktiili kolmiulotteinen muoto': 'tcf',\n 'taktiili kuva': 'tci',\n 'taktiili liikenotaatio': 'tcn',\n 'taktiili nuottikirjoitus': 'tcm',\n 'taktiili teksti': 'tct',\n 'taktil bild': 'tci',\n 'taktil musiknotation': 'tcm',\n 'taktil noterad rörelse': 'tcn',\n 'taktil text': 'tct',\n 'taktil tredimensionell form': 'tcf',\n 'tal': 'spw',\n 'teksti': 'txt',\n 'text': 'txt',\n 'texte': 'txt',\n 'texte tactile': 'tct',\n 'three-dimensional form': 'tdf',\n 'three-dimensional moving image': 'tdm',\n 'tietokoneohjelma': 'cop',\n 'tredimensionell form': 'tdf',\n 'tredimensionell rörlig bild': 'tdm',\n 'tvådimensionell rörlig bild': 'tdi',\n 'two-dimensional moving image': 'tdi',\n 'unbewegtes Bild': 'sti',\n 'unspecified': 'zzz',\n 'Ääni': 'snd',\n 'ääni': 'snd',\n 'Электронная программа': 'cop', // computer program\n 'Изображение (картографическое)': 'cri',\n 'Музыка (знаковая)': 'ntm', // notated music\n 'Музыка (исполнительская)': 'prm', // performed music\n 'Устная речь': 'spw',\n 'Изображение (неподвижное)': 'sti',\n 'Изображение (движущееся)': 'tdi', // 2D moving image\n 'Текст': 'txt',\n 'Текст (визуальный)': 'txt'\n};\n\nconst map337 = {\n 'Computermedien': 'c',\n 'Mikroform': 'h',\n 'annan': 'x',\n 'audio': 's',\n 'computer': 'c',\n 'dator': 'c',\n 'datoranvändbar': 'c',\n 'ei välittävää laitetta': 'n',\n 'elektroninen': 'c',\n 'elektronisk': 'c',\n 'heijastettava': 'g',\n 'ingen medietyp': 'n',\n 'käytettävissä ilman laitetta': 'n',\n 'microform': 'h',\n 'microscopic': 'p',\n 'mikroform': 'h',\n 'mikromuoto': 'h',\n 'mikroskooppinen': 'p',\n 'mikroskopisch': 'p',\n 'mikroskopisk': 'p',\n 'muu': 'x',\n 'määrittelemätön': 'z',\n 'määrittelemätön välittävä laite': 'z',\n 'oförmedlad': 'n',\n 'ohne Hilfsmittel zu benutzen': 'n',\n 'omedierad': 'n',\n 'ospecificerad': 'z',\n 'ospecificerad medietyp': 'z',\n 'other': 'x',\n 'projected': 'g',\n 'projektion': 'g',\n 'projicerad': 'g',\n 'projicerbar': 'g',\n 'projizierbar': 'g',\n 'stereografinen': 'e',\n 'stereografisch': 'e',\n 'stereografisk': 'e',\n 'stereographic': 'e',\n 'tietokonekäyttöinen': 'c',\n 'unmediated': 'n',\n 'unspecified': 'z',\n 'useita mediatyyppejä': 'z',\n 'video': 'v',\n 'övrig': 'x',\n // Cyrillic (sorted by result):\n 'электронн': 'c',\n 'электронный': 'c',\n 'непосредственн': 'n',\n 'непосредственный': 'n',\n 'аудио': 's', // audio\n 'видео': 'v'\n};\n\nconst map338 = {\n 'aperture card': 'ha',\n 'ark': 'nb',\n 'arkki': 'nb',\n 'audio belt': 'sb',\n 'audio cartridge': 'sg',\n 'audio cylinder': 'se',\n 'audio disc': 'sd',\n 'audio roll': 'sq',\n 'audio wire reel': 'sw',\n 'audiocassette': 'ss',\n 'audiotape reel': 'st',\n 'bildband': 'gf',\n 'bildbandsmagasin': 'gc',\n 'blädderblock': 'nn',\n 'card': 'no',\n 'computer card': 'ck',\n 'computer cartridge': 'cb',\n 'computer disc': 'cd',\n 'computer disc cartridge': 'ce',\n 'computer tape cartridge': 'ca',\n 'computer tape cassette': 'cf',\n 'computer tape reel': 'ch',\n 'datorbandmagasin': 'ca',\n 'datorbandspole': 'ch',\n 'datorkassett': 'cf',\n 'datorkort': 'ck',\n 'datorminnesmodul': 'cb',\n 'datorskiva': 'cd',\n 'datorskivmagasin': 'ce',\n 'dia': 'gs',\n 'diabild': 'gs',\n 'film cartridge': 'mc',\n 'film cassette': 'mf',\n 'film reel': 'mr',\n 'film roll': 'mo',\n 'filmikasetti': 'mf',\n 'filmikela': 'mr',\n 'filmiliuska': 'gd',\n 'filmirulla': 'mo',\n 'filmisilmukkakasetti': 'mc',\n 'filmkassett': 'mf',\n 'filmljudspole': 'si',\n 'filmmagasin': 'mc',\n 'filmremsa': 'gd',\n 'filmrulle': 'mo',\n 'filmslip': 'gd',\n 'filmspole': 'mr',\n 'filmstrip': 'gf',\n 'filmstrip cartridge': 'gc',\n 'flipchart': 'nn',\n 'fönsterkort': 'ha',\n 'föremål': 'nr',\n 'ikkunakortti': 'ha',\n 'kort': 'no',\n 'kortti': 'no',\n 'lehtiötaulu': 'nn',\n 'ljudcylinder': 'se',\n 'ljudkassett': 'ss',\n 'ljudmagasin': 'sg',\n 'ljudrulle': 'sq',\n 'ljudskiva': 'sd',\n 'ljudslinga': 'sb',\n 'ljudspole': 'st',\n 'ljudtråd': 'sw',\n 'microfiche': 'he',\n 'microfiche cassette': 'hf',\n 'microfilm cartridge': 'hb',\n 'microfilm cassette': 'hc',\n 'microfilm reel': 'hd',\n 'microfilm roll': 'hj',\n 'microfilm slip': 'hh',\n 'microopaque': 'hg',\n 'microscope slide': 'pp',\n 'mikrofiche': 'he',\n 'mikrofiche (ogenomskinlig)': 'hg',\n 'mikrofichekassett': 'hf',\n 'mikrofilmikasetti': 'hc',\n 'mikrofilmikela': 'hd',\n 'mikrofilmiliuska': 'hh',\n 'mikrofilmirulla': 'hj',\n 'mikrofilmisilmukkakasetti': 'hb',\n 'mikrofilmskassett': 'hc',\n 'mikrofilmsmagasin': 'hb',\n 'mikrofilmsremsa': 'hh',\n 'mikrofilmsrulle': 'hj',\n 'mikrofilmsspole': 'hd',\n 'mikrokortti': 'he',\n 'mikrokortti (läpinäkymätön)': 'hg',\n 'mikrokorttikasetti': 'hf',\n 'mikroskoperingspreparat': 'pp',\n 'muistikortti': 'ck',\n 'määrittelemätön': 'zu',\n 'nide': 'nc',\n 'object': 'nr',\n 'objekti': 'nr',\n 'online resource': 'cr',\n 'onlineresurs': 'cr',\n 'ospecificerad': 'zu',\n 'overhead transparency': 'gt',\n 'piirikotelo': 'cb',\n 'piirtoheitinkalvo': 'gt',\n 'preparaattilasi': 'pp',\n 'raina': 'gf',\n 'rainakasetti': 'gc',\n 'roll': 'na',\n 'rulla': 'na',\n 'rulle': 'na',\n 'sheet': 'nb',\n 'slide': 'gs',\n 'sound-track reel': 'si',\n 'stereografinen kortti': 'eh',\n 'stereografinen levy': 'es',\n 'stereografisk skiva': 'es',\n 'stereografiskt kort': 'eh',\n 'stereograph card': 'eh',\n 'stereograph disc': 'es',\n 'tietokasetti': 'cf',\n 'tietolevy': 'cd',\n 'tietolevykotelo': 'ce',\n 'tietonauhakela': 'ch',\n 'tietonauhan silmukkakasetti': 'ca',\n 'transparang': 'gt',\n 'unspecified': 'zu',\n 'verkkoaineisto': 'cr',\n 'video cartridge': 'vc',\n 'videocassette': 'vf',\n 'videodisc': 'vd',\n 'videokasetti': 'vf',\n 'videokassett': 'vf',\n 'videokela': 'vr',\n 'videolevy': 'vd',\n 'videomagasin': 'vc',\n 'videosilmukkakasetti': 'vc',\n 'videoskiva': 'vd',\n 'videospole': 'vr',\n 'videotape reel': 'vr',\n 'volume': 'nc',\n 'volym': 'nc',\n 'äänihihna': 'sb',\n 'äänikasetti': 'ss',\n 'äänikela': 'st',\n 'äänilankakela': 'sw',\n 'äänilevy': 'sd',\n 'ääniraitakela': 'si',\n 'äänirulla': 'sq',\n 'äänisilmukkakasetti': 'sg',\n 'äänisylinteri': 'se'\n};\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n fields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return\n nvdebug(` GOT ${fields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`); // NOT READY YET\n const catLang = getCatalogingLanguage(record) || 'fin';\n const fields = getRelevantFields(record);\n if (fields.length === 0) {\n return {message: [], valid: true};\n }\n const originalStrings = fields.map(f => fieldToString(f));\n const clonedFields = fields.map(f => clone(f));\n clonedFields.forEach(f => fixField(f, catLang)); // eslint-disable-line array-callback-return\n const modifiedStrings = clonedFields.map(f => fieldToString(f));\n\n const changes = originalStrings.map((str, i) => `'${str}' => '${modifiedStrings[i]}'`);\n\n return {message: changes, valid: false};\n }\n\n\n function getA(field) {\n const as = field.subfields.filter(f => f.code === 'a');\n if (as.length === 1) {\n return as[0];\n }\n return undefined;\n }\n\n\n function mapTermToCode(term, tag) {\n nvdebug(`TERM/${tag}: '${term}'`);\n if (tag === '336' && term in map336) {\n return map336[term];\n }\n if (tag === '337' && term in map337) {\n return map337[term];\n }\n if (tag === '338' && term in map338) {\n return map338[term];\n }\n return undefined;\n }\n\n function mapFieldToCode(field) {\n const subfieldA = getA(field);\n if (subfieldA) {\n return mapTermToCode(subfieldA.value, field.tag);\n }\n return undefined;\n }\n\n function getRelevantFields(record) {\n const fields = record.get('33[678]');\n // Currently not handline $3 etc\n return fields.filter(f => f.subfields.length === 1 && mapFieldToCode(f));\n }\n\n function tagToSubfield2(tag) {\n if (tag === '336') {\n return {'code': '2', 'value': 'rdacontent'};\n }\n if (tag === '337') {\n return {'code': '2', 'value': 'rdamedia'};\n }\n if (tag === '338') {\n return {'code': '2', 'value': 'rdacarrier'};\n }\n }\n\n function fixField(field, catalogingLanguage = 'fin') {\n const subfieldA = getA(field);\n if (!subfieldA) {\n return;\n }\n const code = mapTermToCode(subfieldA.value, field.tag);\n if (!code) {\n return;\n }\n const newTerm = codeToTerm(code);\n if (!newTerm) {\n return;\n }\n\n subfieldA.value = newTerm;\n field.subfields.push({'code': 'b', 'value': code});\n field.subfields.push(tagToSubfield2(field.tag));\n\n function codeToTerm(code) {\n if (field.tag === '336') {\n return map336CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '337') {\n return map337CodeToTerm(code, catalogingLanguage);\n }\n if (field.tag === '338') {\n return map338CodeToTerm(code, catalogingLanguage);\n }\n return undefined;\n }\n }\n\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -47,16 +47,15 @@ function _default() {
47
47
  if (originalCountryCode === modifiedCountryCode) {
48
48
  return res;
49
49
  }
50
- res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`); // eslint-disable-line functional/immutable-data
51
-
52
- res.valid = false; // eslint-disable-line functional/immutable-data
50
+ res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`);
51
+ res.valid = false;
53
52
  return res;
54
53
  }
55
54
  function fixCountryCode(field008) {
56
55
  const originalCountryCode = getCountryCodeFromField008(field008);
57
56
  const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);
58
57
  if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {
59
- field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`; // eslint-disable-line functional/immutable-data
58
+ field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`;
60
59
  return;
61
60
  }
62
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-country-codes.js","names":["_default","description","validate","fix","record","res","message","valid","field008","get","fixCountryCode","originalCountryCode","getCountryCodeFromField008","modifiedCountryCode","deprecatedCountryCodeToCurrentCountryCode","push","length","value","substring","field","countryCode","includes"],"sources":["../src/fix-country-codes.js"],"sourcesContent":["// Fix country codes in 008/15-17\n//\n// This is proto. Extend later...\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\n\nexport default function () {\n\n return {\n description: 'Fix deprecated country codes',\n validate, fix\n };\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixCountryCode(field008);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n const [field008] = record.get('008');\n\n if (!field008) {\n return res;\n }\n\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode === modifiedCountryCode) {\n return res;\n }\n\n res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`); // eslint-disable-line functional/immutable-data\n\n res.valid = false; // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function fixCountryCode(field008) {\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {\n field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n\n function getCountryCodeFromField008(field) {\n return field.value.substring(15, 18); // return 008/15-17\n }\n\n function deprecatedCountryCodeToCurrentCountryCode(countryCode) {\n if (countryCode === 'air') { // Armenia\n return 'ai ';\n }\n if (countryCode === 'ajr') { // Azerbaidzan\n return 'aj ';\n }\n // Australia\n if (['aca', 'qua', 'tma', 'vra', 'wea', 'xga', 'xna', 'xoa', 'xra'].includes(countryCode)) {\n return 'at ';\n }\n\n // Canada\n if (['abc', 'bcc', 'cn ', 'mbc', 'nfc', 'nkc', 'nsc', 'ntc', 'nuc', 'onc', 'pic', 'quc', 'snc', 'ykc'].includes(countryCode)) {\n return 'xxc';\n }\n // Great Britain:\n if (['enk', 'nik', 'stk', 'uik', 'uk ', 'wlk'].includes(countryCode)) {\n return 'xxk';\n }\n // United States:\n if (['aku', 'alu', 'aru', 'azu', 'cau', 'cou', 'ctu', 'dcu', 'deu', 'flu', 'gau', 'hiu', 'iau', 'idu', 'ilu', 'inu', 'kgr', 'ksu', 'kyu', 'lau', 'mau', 'mdu', 'meu', 'miu', 'mnu', 'mou', 'msu', 'mtu', 'nbu', 'ncu', 'nhu', 'nju', 'nmu', 'nvu', 'nyu', 'ohu', 'oku', 'oru', 'pau', 'riu', 'scu', 'sdu', 'tnu', 'txu', 'us ', 'utu', 'vau', 'vtu', 'wau', 'wiu', 'wvu', 'wyu'].includes(countryCode)) {\n return 'xxu';\n }\n return countryCode;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fix-country-codes.js","names":["_default","description","validate","fix","record","res","message","valid","field008","get","fixCountryCode","originalCountryCode","getCountryCodeFromField008","modifiedCountryCode","deprecatedCountryCodeToCurrentCountryCode","push","length","value","substring","field","countryCode","includes"],"sources":["../src/fix-country-codes.js"],"sourcesContent":["// Fix country codes in 008/15-17\n//\n// This is proto. Extend later...\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\n\nexport default function () {\n\n return {\n description: 'Fix deprecated country codes',\n validate, fix\n };\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixCountryCode(field008);\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n const [field008] = record.get('008');\n\n if (!field008) {\n return res;\n }\n\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode === modifiedCountryCode) {\n return res;\n }\n\n res.message.push(`Modify 008/15-17: '${originalCountryCode}' => '${modifiedCountryCode}'`);\n\n res.valid = false;\n return res;\n }\n\n function fixCountryCode(field008) {\n const originalCountryCode = getCountryCodeFromField008(field008);\n const modifiedCountryCode = deprecatedCountryCodeToCurrentCountryCode(originalCountryCode);\n if (originalCountryCode !== modifiedCountryCode && modifiedCountryCode.length === 3) {\n field008.value = `${field008.value.substring(0, 15)}${modifiedCountryCode}${field008.value.substring(18)}`;\n return;\n }\n }\n\n function getCountryCodeFromField008(field) {\n return field.value.substring(15, 18); // return 008/15-17\n }\n\n function deprecatedCountryCodeToCurrentCountryCode(countryCode) {\n if (countryCode === 'air') { // Armenia\n return 'ai ';\n }\n if (countryCode === 'ajr') { // Azerbaidzan\n return 'aj ';\n }\n // Australia\n if (['aca', 'qua', 'tma', 'vra', 'wea', 'xga', 'xna', 'xoa', 'xra'].includes(countryCode)) {\n return 'at ';\n }\n\n // Canada\n if (['abc', 'bcc', 'cn ', 'mbc', 'nfc', 'nkc', 'nsc', 'ntc', 'nuc', 'onc', 'pic', 'quc', 'snc', 'ykc'].includes(countryCode)) {\n return 'xxc';\n }\n // Great Britain:\n if (['enk', 'nik', 'stk', 'uik', 'uk ', 'wlk'].includes(countryCode)) {\n return 'xxk';\n }\n // United States:\n if (['aku', 'alu', 'aru', 'azu', 'cau', 'cou', 'ctu', 'dcu', 'deu', 'flu', 'gau', 'hiu', 'iau', 'idu', 'ilu', 'inu', 'kgr', 'ksu', 'kyu', 'lau', 'mau', 'mdu', 'meu', 'miu', 'mnu', 'mou', 'msu', 'mtu', 'nbu', 'ncu', 'nhu', 'nju', 'nmu', 'nvu', 'nyu', 'ohu', 'oku', 'oru', 'pau', 'riu', 'scu', 'sdu', 'tnu', 'txu', 'us ', 'utu', 'vau', 'vtu', 'wau', 'wiu', 'wvu', 'wyu'].includes(countryCode)) {\n return 'xxu';\n }\n return countryCode;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -34,7 +34,8 @@ function _default() {
34
34
  }
35
35
  fixLanguageField008(field008);
36
36
  const f041 = record.get('041');
37
- f041.forEach(f => fixField041(f));
37
+ f041.forEach(f => fixField041(f)); // eslint-disable-line array-callback-return
38
+
38
39
  return res;
39
40
  }
40
41
  function validate(record) {
@@ -44,8 +45,9 @@ function _default() {
44
45
  };
45
46
  validateField008(record, res);
46
47
  const f041 = record.get('041');
47
- f041.forEach(f => validateField041(f, res));
48
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
48
+ f041.forEach(f => validateField041(f, res)); // eslint-disable-line array-callback-return
49
+
50
+ res.valid = !(res.message.length >= 1);
49
51
  return res;
50
52
  }
51
53
  function validateField008(record, res) {
@@ -58,8 +60,8 @@ function _default() {
58
60
  if (originalLanguage === modifiedLanguage) {
59
61
  return;
60
62
  }
61
- res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`); // eslint-disable-line functional/immutable-data
62
- res.valid = false; // eslint-disable-line functional/immutable-data
63
+ res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`);
64
+ res.valid = false;
63
65
  }
64
66
  function isRelevantField041SubfieldCode(subfield) {
65
67
  return 'abdefghijkmnpqrt'.includes(subfield.code);
@@ -73,13 +75,13 @@ function _default() {
73
75
  return;
74
76
  }
75
77
  const msg = `${originalString} => ${modifiedString}`;
76
- res.message.push(msg); // eslint-disable-line functional/immutable-data
78
+ res.message.push(msg);
77
79
  }
78
80
  function fixLanguageField008(field008) {
79
81
  const originalLanguage = getLanguageFromField008(field008);
80
82
  const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);
81
83
  if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {
82
- field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`; // eslint-disable-line functional/immutable-data
84
+ field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`;
83
85
  return;
84
86
  }
85
87
  }
@@ -87,12 +89,13 @@ function _default() {
87
89
  if (field.subfields.some(sf => sf.code === '2')) {
88
90
  return;
89
91
  }
90
- field.subfields.forEach(sf => fixField041Subfield(sf));
92
+ field.subfields.forEach(sf => fixField041Subfield(sf)); // eslint-disable-line array-callback-return
93
+
91
94
  function fixField041Subfield(subfield) {
92
95
  if (!isRelevantField041SubfieldCode(subfield)) {
93
96
  return;
94
97
  }
95
- subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value); // eslint-disable-line functional/immutable-data
98
+ subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value);
96
99
  }
97
100
  }
98
101
  function getLanguageFromField008(field) {
@@ -1 +1 @@
1
- {"version":3,"file":"fix-language-codes.js","names":["_clone","_interopRequireDefault","require","_utils","e","__esModule","default","description","_default","validate","fix","record","res","message","valid","field008","get","fixLanguageField008","f041","forEach","f","fixField041","validateField008","validateField041","length","originalLanguage","getLanguageFromField008","modifiedLanguage","deprecatedLanguageToCurrentLanguage","push","isRelevantField041SubfieldCode","subfield","includes","code","field","clonedField","clone","originalString","fieldToString","modifiedString","msg","value","substring","subfields","some","sf","fixField041Subfield","language"],"sources":["../src/fix-language-codes.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldToString} from './utils';\n// Fix language codes in 008/35-37 and 041 (does not sync them)\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\nconst description = 'Fix language codes';\n\nexport default function () {\n\n return {description, validate, fix};\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixLanguageField008(field008);\n\n const f041 = record.get('041');\n f041.forEach(f => fixField041(f));\n\n return res;\n }\n\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n validateField008(record, res);\n\n const f041 = record.get('041');\n f041.forEach(f => validateField041(f, res));\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField008(record, res) {\n const [field008] = record.get('008');\n\n if (!field008) {\n return;\n }\n\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage === modifiedLanguage) {\n return;\n }\n\n res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`); // eslint-disable-line functional/immutable-data\n res.valid = false; // eslint-disable-line functional/immutable-data\n }\n\n\n function isRelevantField041SubfieldCode(subfield) {\n return 'abdefghijkmnpqrt'.includes(subfield.code);\n }\n\n\n function validateField041(field, res) {\n\n const clonedField = clone(field);\n fixField041(clonedField);\n\n const originalString = fieldToString(field);\n const modifiedString = fieldToString(clonedField);\n\n if (originalString === modifiedString) {\n return;\n }\n const msg = `${originalString} => ${modifiedString}`;\n res.message.push(msg); // eslint-disable-line functional/immutable-data\n\n }\n\n\n function fixLanguageField008(field008) {\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {\n field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n\n function fixField041(field) {\n if (field.subfields.some(sf => sf.code === '2')) {\n return;\n }\n\n field.subfields.forEach(sf => fixField041Subfield(sf));\n\n function fixField041Subfield(subfield) {\n if (!isRelevantField041SubfieldCode(subfield)) {\n return;\n }\n subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value); // eslint-disable-line functional/immutable-data\n }\n }\n\n function getLanguageFromField008(field) {\n return field.value.substring(35, 38); // return 008/35-37\n }\n\n function deprecatedLanguageToCurrentLanguage(language) {\n if (language === 'nno' || language === 'nob') { // Nynorsk ja bokmål\n return 'nor'; // Norwegian\n }\n return language;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fix-language-codes.js","names":["_clone","_interopRequireDefault","require","_utils","e","__esModule","default","description","_default","validate","fix","record","res","message","valid","field008","get","fixLanguageField008","f041","forEach","f","fixField041","validateField008","validateField041","length","originalLanguage","getLanguageFromField008","modifiedLanguage","deprecatedLanguageToCurrentLanguage","push","isRelevantField041SubfieldCode","subfield","includes","code","field","clonedField","clone","originalString","fieldToString","modifiedString","msg","value","substring","subfields","some","sf","fixField041Subfield","language"],"sources":["../src/fix-language-codes.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldToString} from './utils';\n// Fix language codes in 008/35-37 and 041 (does not sync them)\n//\n// Author(s): Nicholas Volk\n\n//import createDebugLogger from 'debug';\n//import {fieldToString, nvdebug} from './utils';\n\nconst description = 'Fix language codes';\n\nexport default function () {\n\n return {description, validate, fix};\n\n function fix(record) {\n //nvdebug(`FIX ME`);\n const res = {message: [], fix: [], valid: true};\n\n const [field008] = record.get('008');\n if (!field008) {\n return res;\n }\n\n fixLanguageField008(field008);\n\n const f041 = record.get('041');\n f041.forEach(f => fixField041(f)); // eslint-disable-line array-callback-return\n\n return res;\n }\n\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n validateField008(record, res);\n\n const f041 = record.get('041');\n\n f041.forEach(f => validateField041(f, res)); // eslint-disable-line array-callback-return\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n\n function validateField008(record, res) {\n const [field008] = record.get('008');\n\n if (!field008) {\n return;\n }\n\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage === modifiedLanguage) {\n return;\n }\n\n res.message.push(`Modify 008/35-37: '${originalLanguage}' => '${modifiedLanguage}'`);\n res.valid = false;\n }\n\n\n function isRelevantField041SubfieldCode(subfield) {\n return 'abdefghijkmnpqrt'.includes(subfield.code);\n }\n\n\n function validateField041(field, res) {\n\n const clonedField = clone(field);\n fixField041(clonedField);\n\n const originalString = fieldToString(field);\n const modifiedString = fieldToString(clonedField);\n\n if (originalString === modifiedString) {\n return;\n }\n const msg = `${originalString} => ${modifiedString}`;\n res.message.push(msg);\n\n }\n\n\n function fixLanguageField008(field008) {\n const originalLanguage = getLanguageFromField008(field008);\n const modifiedLanguage = deprecatedLanguageToCurrentLanguage(originalLanguage);\n if (originalLanguage !== modifiedLanguage && modifiedLanguage.length === 3) {\n field008.value = `${field008.value.substring(0, 35)}${modifiedLanguage}${field008.value.substring(38)}`;\n return;\n }\n }\n\n function fixField041(field) {\n if (field.subfields.some(sf => sf.code === '2')) {\n return;\n }\n\n field.subfields.forEach(sf => fixField041Subfield(sf)); // eslint-disable-line array-callback-return\n\n function fixField041Subfield(subfield) {\n if (!isRelevantField041SubfieldCode(subfield)) {\n return;\n }\n subfield.value = deprecatedLanguageToCurrentLanguage(subfield.value);\n }\n }\n\n function getLanguageFromField008(field) {\n return field.value.substring(35, 38); // return 008/35-37\n }\n\n function deprecatedLanguageToCurrentLanguage(language) {\n if (language === 'nno' || language === 'nob') { // Nynorsk ja bokmål\n return 'nor'; // Norwegian\n }\n return language;\n }\n\n}\n"],"mappings":"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","ignoreList":[]}
@@ -49,11 +49,10 @@ function _default() {
49
49
  const clonedFieldAsString = (0, _utils.fieldToString)(clonedField);
50
50
  const fieldAsString = (0, _utils.fieldToString)(field);
51
51
  if (fieldAsString !== clonedFieldAsString) {
52
- // eslint-disable-line functional/no-conditional-statements
53
- res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data
52
+ res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);
54
53
  }
55
54
  });
56
- res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
55
+ res.valid = !(res.message.length >= 1);
57
56
  return res;
58
57
  }
59
58
  }
@@ -203,7 +202,7 @@ function subfieldHandleRelatorTermAbbreviation(subfield, language) {
203
202
  const hit = `${finnishAbbreviations[lcValue]}${punc}`;
204
203
  (0, _utils.nvdebug)(`Relator hit: ${hit}`, debugDev);
205
204
  // NB! 'esitt.' => 'esittäjä'
206
- subfield.value = hit; // eslint-disable-line functional/immutable-data
205
+ subfield.value = hit;
207
206
  return;
208
207
  }
209
208
  }
@@ -217,7 +216,7 @@ function fieldHandleRelatorTermAbbreviations(field, language) {
217
216
  return;
218
217
  }
219
218
  const originalValue = (0, _utils.fieldToString)(field);
220
- field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));
219
+ field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language)); // eslint-disable-line array-callback-return
221
220
  const modifiedValue = (0, _utils.fieldToString)(field);
222
221
  if (modifiedValue === originalValue) {
223
222
  return;
@@ -266,7 +265,7 @@ function subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {
266
265
  if (subfield.code !== 'e') {
267
266
  return;
268
267
  }
269
- subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data
268
+ subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage);
270
269
  }
271
270
  function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
272
271
  // fromLanguage can not be relied upon.
@@ -274,13 +273,14 @@ function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {
274
273
  return;
275
274
  }
276
275
  fieldHandleRelatorTermAbbreviations(field, fromLanguage);
277
- field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));
276
+ field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return
278
277
  }
279
278
  function recordFixRelatorTerms(record, defaultToLanguage = null, defaultFromLanguage = null) {
280
279
  // WAS: translateRecord()
281
280
  const fromLanguage = defaultFromLanguage ? defaultFromLanguage : (0, _utils.getCatalogingLanguage)(record);
282
281
  const toLanguage = defaultToLanguage ? defaultToLanguage : (0, _utils.getCatalogingLanguage)(record);
283
- record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));
282
+ record.fields.forEach(field => translateField(field, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return
283
+
284
284
  function translateField(field, from, to) {
285
285
  fieldFixRelatorTerms(field, from, to);
286
286
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fixRelatorTerms.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_debug","e","__esModule","default","debug","createDebugLogger","debugDev","extend","_default","description","validate","fix","record","res","message","valid","language","getCatalogingLanguage","fields","forEach","field","fieldFixRelatorTerms","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","relatorTerms","finnishAbbreviations","subfieldHandleRelatorTermAbbreviation","subfield","code","nvdebug","subfieldToString","value","replace","punc","lcValue","toLowerCase","hit","isRelatorField","tag","match","fieldHandleRelatorTermAbbreviations","originalValue","subfields","sf","modifiedValue","fieldFixPunctuation","termIsInGivenLanguage","term","some","row","anyToLanguage","originalTerm","translateRelatorTerm","defaultFromLanguage","toLanguage","fromLanguage","candRow","filter","slice","translation","subfieldTranslateRelatorTerm","recordFixRelatorTerms","defaultToLanguage","translateField","from","to"],"sources":["../src/fixRelatorTerms.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils';\nimport createDebugLogger from 'debug';\n\n// Currently mainly translates X00$e values, so that we don't have \"$a Name, $e kirjoittaja, $e författare.\".\n// Later on we could try and handle $4 stuff here as well.\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fixRelatorterms');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport default function () {\n return {\n description: 'Fix $e subfields in field [1678][01]0 and 720',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n fieldFixRelatorTerms(field, language, language);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n // Rather hackily/abnormally use language as both fromLanguage and toLanguage.\n // fromLanguage is used to expand \"esitt.\" => \"esittäjä\".\n // toLanguage is used by translations (fixes \"författere\" to \"kirjoittaja\", if 040$b is \"fin\")\n fieldFixRelatorTerms(field, language, language);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) { // eslint-disable-line functional/no-conditional-statements\n res.message.push(`${fieldAsString} => ${clonedFieldAsString}`); // eslint-disable-line functional/immutable-data\n }\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n}\n\n\n/*\nexport default () => (base, source) => {\n recordTranslateRelatorTerms(base);\n recordTranslateRelatorTerms(source);\n recordHandleRelatorTermAbbreviations(base);\n recordHandleRelatorTermAbbreviations(source);\n const result = {base, source};\n return result;\n};\n*/\n\n\n// Partial source: https://marc21.kansalliskirjasto.fi/funktiot_koodit.htm\n// https://wiki.helsinki.fi/display/MARC21svenska/Funktions-+och+relationskoder+-+alfabetiskt+efter+funktion\n// New, better source: https://id.kb.se/find?q=relator&_sort=_sortKeyByLang.en\n\n\n// NB! How to handle German sex-based Verfasser/Verfasserin pairs?\nconst relatorTerms = [\n {'code': 'arr', 'eng': 'arranger', 'fin': 'sovittaja', 'swe': 'arrangör av musikalisk komposition'},\n {'code': 'art', 'eng': 'artist', 'fin': 'taiteilija', 'swe': 'konstnär'},\n {'code': 'aui', 'eng': 'author of introduction', 'fin': 'esipuheen tekijä'},\n {'code': 'aut', 'eng': 'author', 'fin': 'kirjoittaja', 'swe': 'författare'},\n {'code': 'cmp', 'eng': 'composer', 'fin': 'säveltäjä', 'swe': 'kompositör'},\n {'code': 'drt', 'eng': 'director', 'fin': 'ohjaaja', 'swe': 'regissör'},\n {'code': 'edt', 'eng': 'editor', 'fin': 'toimittaja', 'swe': 'redaktör'},\n {'code': 'ill', 'eng': 'illustrator', 'fin': 'kuvittaja', 'swe': 'illustratör'},\n {'code': 'lyr', 'eng': 'lyricist', 'fin': 'sanoittaja', 'swe': 'sångtext'},\n {'code': 'nrt', 'eng': 'narrator', 'fin': 'kertoja', 'swe': 'berättare'}, // berättare/inläsare\n {'code': 'pbl', 'eng': 'publisher', 'fin': 'julkaisija', 'swe': 'utgivare'},\n {'code': 'pht', 'eng': 'photographer', 'fin': 'valokuvaaja', 'swe': 'fotograf'},\n {'code': 'prf', 'eng': 'performer', 'fin': 'esittäjä', 'swe': 'framförande'},\n {'code': 'pro', 'eng': 'producer', 'fin': 'tuottaja', 'swe': 'producent'},\n {'code': 'trl', 'eng': 'translator', 'fin': 'kääntäjä', 'swe': 'översättare'},\n {'code': '__FAKE_VALUE1__', 'fin': 'sarjakuvantekijä', 'swe': 'serieskapare'}\n];\n\n/*\nfunction recordNormalizeRelatorTerms(record, defaultLanguageCode = undef) {\n const languageCode = defaultLanguageCode ? defaultLanguageCode : getCatalogingLanguage(record);\n if (!languageCode || ['eng', 'fin', 'swe'].includes(languageCode)) {\n return;\n }\n\n}\n*/\n\n\nconst finnishAbbreviations = {\n 'esitt.': 'esittäjä',\n 'käänt.': 'kääntäjä',\n 'näytt.': 'näyttelijä',\n 'san.': 'sanoittaja',\n 'sov.': 'sovittaja',\n 'säv.': 'säveltäjä',\n 'toim.': 'toimittaja',\n // Quick and dirty implementation of https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L651\n // As per M.I./Slavica\n 'худож.': 'kuvittaja',\n 'пер.': 'kääntäjä',\n 'сост.': 'toimittaja', // might also be 'kokoaja'\n 'ред.': 'toimittaja'\n};\n\nfunction subfieldHandleRelatorTermAbbreviation(subfield, language) {\n if (subfield.code !== 'e') {\n return;\n }\n nvdebug(`Relator cand subfield: '${subfieldToString(subfield)}', lang: ${language ? language : 'NULL'}`, debugDev);\n if (!language || language === 'mul') {\n subfieldHandleRelatorTermAbbreviation(subfield, 'fin');\n // Maybe later add Swedish here...\n return;\n }\n const value = subfield.value.replace(/,$/u, '');\n const punc = value === subfield.value ? '' : ',';\n\n const lcValue = value.toLowerCase(); // Check Å, Ä, Ö...\n\n // NB: Policy: if no language or multi-language: apply all rules! (Not much overlap I hope...)\n if (!language || language === 'fin' || language === 'mul') {\n nvdebug(`Relator try Finnish for '${lcValue}}'...`, debugDev);\n if (lcValue in finnishAbbreviations) {\n const hit = `${finnishAbbreviations[lcValue]}${punc}`;\n nvdebug(`Relator hit: ${hit}`, debugDev);\n // NB! 'esitt.' => 'esittäjä'\n subfield.value = hit; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\n\nfunction isRelatorField(field) {\n // Tag list might be incomplete!\n return field.tag.match(/^(?:100|110|600|610|700|710|720|800|810)$/u);\n}\n\nfunction fieldHandleRelatorTermAbbreviations(field, language) {\n if (!isRelatorField(field)) {\n return;\n }\n\n const originalValue = fieldToString(field);\n field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language));\n const modifiedValue = fieldToString(field);\n if (modifiedValue === originalValue) {\n return;\n }\n // Changes have happened... Try to punctuate.\n // (NB! We need punctuation as a module, if we are to make abbr expansion a marc-record-validators-melinda validator/fixer)\n fieldFixPunctuation(field);\n}\n\nfunction termIsInGivenLanguage(term, language) {\n return relatorTerms.some(row => language in row && row[language] === term);\n}\n\nfunction anyToLanguage(originalTerm) {\n // Sometimes there's no 040$b or 040$b and, say, 040$b and 700$e value don't correlate\n if (termIsInGivenLanguage(originalTerm, 'fin')) {\n return 'fin';\n }\n if (termIsInGivenLanguage(originalTerm, 'swe')) {\n return 'swe';\n }\n if (termIsInGivenLanguage(originalTerm, 'eng')) {\n return 'eng';\n }\n return null;\n}\n\nfunction translateRelatorTerm(originalTerm, defaultFromLanguage, toLanguage) {\n\n // originalTerm is supposed to be normal version (abbrs have been expanded), possibly with punctuation\n const term = originalTerm.replace(/[,.]$/u, '');\n nvdebug(`Try to translate '${term}' from ${defaultFromLanguage} to ${toLanguage}`, debugDev);\n\n // Kind of hacky... If term is in toLanguage, do nothing. defaultFromLanguage (040$b) isn't that reliable.\n if (termIsInGivenLanguage(term, toLanguage)) {\n return originalTerm;\n }\n // defaultFomLanguage (typically 040$b) isn't that reliable:\n const fromLanguage = defaultFromLanguage === null || !termIsInGivenLanguage(term, defaultFromLanguage) ? anyToLanguage(term) : defaultFromLanguage;\n\n const [candRow] = relatorTerms.filter(row => fromLanguage in row && toLanguage in row && row[fromLanguage] === term);\n if (candRow) {\n const punc = term === originalTerm ? '' : originalTerm.slice(-1);\n const translation = `${candRow[toLanguage]}${punc}`;\n nvdebug(`Translate relator term: ${originalTerm} => ${translation}`, debugDev);\n return translation;\n }\n return originalTerm;\n}\n\nfunction subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {\n if (subfield.code !== 'e') {\n return;\n }\n subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage); // eslint-disable-line functional/immutable-data\n}\n\nexport function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {\n // fromLanguage can not be relied upon.\n if (!isRelatorField(field)/* || fromLanguage === toLanguage*/) {\n return;\n }\n fieldHandleRelatorTermAbbreviations(field, fromLanguage);\n\n field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage));\n}\n\n\nexport function recordFixRelatorTerms(record, defaultToLanguage = null, defaultFromLanguage = null) { // WAS: translateRecord()\n const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);\n const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);\n\n record.fields.forEach(field => translateField(field, fromLanguage, toLanguage));\n\n function translateField(field, from, to) {\n fieldFixRelatorTerms(field, from, to);\n }\n}\n\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"fixRelatorTerms.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_debug","e","__esModule","default","debug","createDebugLogger","debugDev","extend","_default","description","validate","fix","record","res","message","valid","language","getCatalogingLanguage","fields","forEach","field","fieldFixRelatorTerms","clonedField","clone","clonedFieldAsString","fieldToString","fieldAsString","push","length","relatorTerms","finnishAbbreviations","subfieldHandleRelatorTermAbbreviation","subfield","code","nvdebug","subfieldToString","value","replace","punc","lcValue","toLowerCase","hit","isRelatorField","tag","match","fieldHandleRelatorTermAbbreviations","originalValue","subfields","sf","modifiedValue","fieldFixPunctuation","termIsInGivenLanguage","term","some","row","anyToLanguage","originalTerm","translateRelatorTerm","defaultFromLanguage","toLanguage","fromLanguage","candRow","filter","slice","translation","subfieldTranslateRelatorTerm","recordFixRelatorTerms","defaultToLanguage","translateField","from","to"],"sources":["../src/fixRelatorTerms.js"],"sourcesContent":["import clone from 'clone';\nimport {fieldFixPunctuation} from './punctuation2';\nimport {fieldToString, getCatalogingLanguage, nvdebug, subfieldToString} from './utils';\nimport createDebugLogger from 'debug';\n\n// Currently mainly translates X00$e values, so that we don't have \"$a Name, $e kirjoittaja, $e författare.\".\n// Later on we could try and handle $4 stuff here as well.\n\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:fixRelatorterms');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport default function () {\n return {\n description: 'Fix $e subfields in field [1678][01]0 and 720',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n fieldFixRelatorTerms(field, language, language);\n });\n\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n\n const language = getCatalogingLanguage(record);\n\n record.fields.forEach(field => {\n const clonedField = clone(field);\n // Rather hackily/abnormally use language as both fromLanguage and toLanguage.\n // fromLanguage is used to expand \"esitt.\" => \"esittäjä\".\n // toLanguage is used by translations (fixes \"författere\" to \"kirjoittaja\", if 040$b is \"fin\")\n fieldFixRelatorTerms(field, language, language);\n const clonedFieldAsString = fieldToString(clonedField);\n const fieldAsString = fieldToString(field);\n if (fieldAsString !== clonedFieldAsString) {\n res.message.push(`${fieldAsString} => ${clonedFieldAsString}`);\n }\n });\n\n res.valid = !(res.message.length >= 1);\n return res;\n }\n}\n\n\n/*\nexport default () => (base, source) => {\n recordTranslateRelatorTerms(base);\n recordTranslateRelatorTerms(source);\n recordHandleRelatorTermAbbreviations(base);\n recordHandleRelatorTermAbbreviations(source);\n const result = {base, source};\n return result;\n};\n*/\n\n\n// Partial source: https://marc21.kansalliskirjasto.fi/funktiot_koodit.htm\n// https://wiki.helsinki.fi/display/MARC21svenska/Funktions-+och+relationskoder+-+alfabetiskt+efter+funktion\n// New, better source: https://id.kb.se/find?q=relator&_sort=_sortKeyByLang.en\n\n\n// NB! How to handle German sex-based Verfasser/Verfasserin pairs?\nconst relatorTerms = [\n {'code': 'arr', 'eng': 'arranger', 'fin': 'sovittaja', 'swe': 'arrangör av musikalisk komposition'},\n {'code': 'art', 'eng': 'artist', 'fin': 'taiteilija', 'swe': 'konstnär'},\n {'code': 'aui', 'eng': 'author of introduction', 'fin': 'esipuheen tekijä'},\n {'code': 'aut', 'eng': 'author', 'fin': 'kirjoittaja', 'swe': 'författare'},\n {'code': 'cmp', 'eng': 'composer', 'fin': 'säveltäjä', 'swe': 'kompositör'},\n {'code': 'drt', 'eng': 'director', 'fin': 'ohjaaja', 'swe': 'regissör'},\n {'code': 'edt', 'eng': 'editor', 'fin': 'toimittaja', 'swe': 'redaktör'},\n {'code': 'ill', 'eng': 'illustrator', 'fin': 'kuvittaja', 'swe': 'illustratör'},\n {'code': 'lyr', 'eng': 'lyricist', 'fin': 'sanoittaja', 'swe': 'sångtext'},\n {'code': 'nrt', 'eng': 'narrator', 'fin': 'kertoja', 'swe': 'berättare'}, // berättare/inläsare\n {'code': 'pbl', 'eng': 'publisher', 'fin': 'julkaisija', 'swe': 'utgivare'},\n {'code': 'pht', 'eng': 'photographer', 'fin': 'valokuvaaja', 'swe': 'fotograf'},\n {'code': 'prf', 'eng': 'performer', 'fin': 'esittäjä', 'swe': 'framförande'},\n {'code': 'pro', 'eng': 'producer', 'fin': 'tuottaja', 'swe': 'producent'},\n {'code': 'trl', 'eng': 'translator', 'fin': 'kääntäjä', 'swe': 'översättare'},\n {'code': '__FAKE_VALUE1__', 'fin': 'sarjakuvantekijä', 'swe': 'serieskapare'}\n];\n\n/*\nfunction recordNormalizeRelatorTerms(record, defaultLanguageCode = undef) {\n const languageCode = defaultLanguageCode ? defaultLanguageCode : getCatalogingLanguage(record);\n if (!languageCode || ['eng', 'fin', 'swe'].includes(languageCode)) {\n return;\n }\n\n}\n*/\n\n\nconst finnishAbbreviations = {\n 'esitt.': 'esittäjä',\n 'käänt.': 'kääntäjä',\n 'näytt.': 'näyttelijä',\n 'san.': 'sanoittaja',\n 'sov.': 'sovittaja',\n 'säv.': 'säveltäjä',\n 'toim.': 'toimittaja',\n // Quick and dirty implementation of https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L651\n // As per M.I./Slavica\n 'худож.': 'kuvittaja',\n 'пер.': 'kääntäjä',\n 'сост.': 'toimittaja', // might also be 'kokoaja'\n 'ред.': 'toimittaja'\n};\n\nfunction subfieldHandleRelatorTermAbbreviation(subfield, language) {\n if (subfield.code !== 'e') {\n return;\n }\n nvdebug(`Relator cand subfield: '${subfieldToString(subfield)}', lang: ${language ? language : 'NULL'}`, debugDev);\n if (!language || language === 'mul') {\n subfieldHandleRelatorTermAbbreviation(subfield, 'fin');\n // Maybe later add Swedish here...\n return;\n }\n const value = subfield.value.replace(/,$/u, '');\n const punc = value === subfield.value ? '' : ',';\n\n const lcValue = value.toLowerCase(); // Check Å, Ä, Ö...\n\n // NB: Policy: if no language or multi-language: apply all rules! (Not much overlap I hope...)\n if (!language || language === 'fin' || language === 'mul') {\n nvdebug(`Relator try Finnish for '${lcValue}}'...`, debugDev);\n if (lcValue in finnishAbbreviations) {\n const hit = `${finnishAbbreviations[lcValue]}${punc}`;\n nvdebug(`Relator hit: ${hit}`, debugDev);\n // NB! 'esitt.' => 'esittäjä'\n subfield.value = hit;\n return;\n }\n }\n}\n\n\nfunction isRelatorField(field) {\n // Tag list might be incomplete!\n return field.tag.match(/^(?:100|110|600|610|700|710|720|800|810)$/u);\n}\n\nfunction fieldHandleRelatorTermAbbreviations(field, language) {\n if (!isRelatorField(field)) {\n return;\n }\n\n const originalValue = fieldToString(field);\n field.subfields.forEach(sf => subfieldHandleRelatorTermAbbreviation(sf, language)); // eslint-disable-line array-callback-return\n const modifiedValue = fieldToString(field);\n if (modifiedValue === originalValue) {\n return;\n }\n // Changes have happened... Try to punctuate.\n // (NB! We need punctuation as a module, if we are to make abbr expansion a marc-record-validators-melinda validator/fixer)\n fieldFixPunctuation(field);\n}\n\nfunction termIsInGivenLanguage(term, language) {\n return relatorTerms.some(row => language in row && row[language] === term);\n}\n\nfunction anyToLanguage(originalTerm) {\n // Sometimes there's no 040$b or 040$b and, say, 040$b and 700$e value don't correlate\n if (termIsInGivenLanguage(originalTerm, 'fin')) {\n return 'fin';\n }\n if (termIsInGivenLanguage(originalTerm, 'swe')) {\n return 'swe';\n }\n if (termIsInGivenLanguage(originalTerm, 'eng')) {\n return 'eng';\n }\n return null;\n}\n\nfunction translateRelatorTerm(originalTerm, defaultFromLanguage, toLanguage) {\n\n // originalTerm is supposed to be normal version (abbrs have been expanded), possibly with punctuation\n const term = originalTerm.replace(/[,.]$/u, '');\n nvdebug(`Try to translate '${term}' from ${defaultFromLanguage} to ${toLanguage}`, debugDev);\n\n // Kind of hacky... If term is in toLanguage, do nothing. defaultFromLanguage (040$b) isn't that reliable.\n if (termIsInGivenLanguage(term, toLanguage)) {\n return originalTerm;\n }\n // defaultFomLanguage (typically 040$b) isn't that reliable:\n const fromLanguage = defaultFromLanguage === null || !termIsInGivenLanguage(term, defaultFromLanguage) ? anyToLanguage(term) : defaultFromLanguage;\n\n const [candRow] = relatorTerms.filter(row => fromLanguage in row && toLanguage in row && row[fromLanguage] === term);\n if (candRow) {\n const punc = term === originalTerm ? '' : originalTerm.slice(-1);\n const translation = `${candRow[toLanguage]}${punc}`;\n nvdebug(`Translate relator term: ${originalTerm} => ${translation}`, debugDev);\n return translation;\n }\n return originalTerm;\n}\n\nfunction subfieldTranslateRelatorTerm(subfield, fromLanguage, toLanguage) {\n if (subfield.code !== 'e') {\n return;\n }\n subfield.value = translateRelatorTerm(subfield.value, fromLanguage, toLanguage);\n}\n\nexport function fieldFixRelatorTerms(field, fromLanguage, toLanguage) {\n // fromLanguage can not be relied upon.\n if (!isRelatorField(field)/* || fromLanguage === toLanguage*/) {\n return;\n }\n fieldHandleRelatorTermAbbreviations(field, fromLanguage);\n\n field.subfields.forEach(sf => subfieldTranslateRelatorTerm(sf, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return\n}\n\n\nexport function recordFixRelatorTerms(record, defaultToLanguage = null, defaultFromLanguage = null) { // WAS: translateRecord()\n const fromLanguage = defaultFromLanguage ? defaultFromLanguage : getCatalogingLanguage(record);\n const toLanguage = defaultToLanguage ? defaultToLanguage : getCatalogingLanguage(record);\n\n record.fields.forEach(field => translateField(field, fromLanguage, toLanguage)); // eslint-disable-line array-callback-return\n\n function translateField(field, from, to) {\n fieldFixRelatorTerms(field, from, to);\n }\n}\n\n\n"],"mappings":"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","ignoreList":[]}
@@ -14,13 +14,10 @@ function _default(configuration) {
14
14
  throw new Error('No configuration provided');
15
15
  function validate(record) {
16
16
  const messages = configuration.reduce((messages, item) => {
17
- let results; // eslint-disable-line functional/no-let
18
-
17
+ let results;
19
18
  if (item.leader) {
20
- // eslint-disable-line functional/no-conditional-statements
21
19
  results = validateField(record.leader, item);
22
20
  } else {
23
- // eslint-disable-line functional/no-conditional-statements
24
21
  results = record.get(item.tag).map(f => validateField(f.value, item, f.tag));
25
22
  }
26
23
  if (results && results.length > 0) {