@natlibfi/marc-record-validators-melinda 10.16.0 → 10.16.1-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 (131) hide show
  1. package/dist/access-rights.js.map +1 -1
  2. package/dist/access-rights.spec.js.map +1 -1
  3. package/dist/double-commas.js.map +1 -1
  4. package/dist/double-commas.spec.js.map +1 -1
  5. package/dist/duplicates-ind1.js.map +1 -1
  6. package/dist/duplicates-ind1.spec.js.map +1 -1
  7. package/dist/empty-fields.js.map +1 -1
  8. package/dist/empty-fields.spec.js.map +1 -1
  9. package/dist/ending-punctuation-conf.js.map +1 -1
  10. package/dist/ending-punctuation.js.map +1 -1
  11. package/dist/ending-punctuation.spec.js.map +1 -1
  12. package/dist/ending-whitespace.js.map +1 -1
  13. package/dist/ending-whitespace.spec.js.map +1 -1
  14. package/dist/field-008-18-34-character-groups.js.map +1 -1
  15. package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
  16. package/dist/field-505-separators.js.map +1 -1
  17. package/dist/field-505-separators.spec.js.map +1 -1
  18. package/dist/field-521-fix.js.map +1 -1
  19. package/dist/field-521-fix.spec.js.map +1 -1
  20. package/dist/field-exclusion.js.map +1 -1
  21. package/dist/field-exclusion.spec.js.map +1 -1
  22. package/dist/field-structure.js.map +1 -1
  23. package/dist/field-structure.spec.js.map +1 -1
  24. package/dist/fields-present.js.map +1 -1
  25. package/dist/fields-present.spec.js.map +1 -1
  26. package/dist/fix-country-codes.js.map +1 -1
  27. package/dist/fix-country-codes.spec.js.map +1 -1
  28. package/dist/fixRelatorTerms.js.map +1 -1
  29. package/dist/fixRelatorTerms.spec.js.map +1 -1
  30. package/dist/fixed-fields.js.map +1 -1
  31. package/dist/fixed-fields.spec.js.map +1 -1
  32. package/dist/identical-fields.js.map +1 -1
  33. package/dist/identical-fields.spec.js.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/indicator-fixes.js.map +1 -1
  36. package/dist/indicator-fixes.spec.js.map +1 -1
  37. package/dist/isbn-issn.js.map +1 -1
  38. package/dist/isbn-issn.spec.js.map +1 -1
  39. package/dist/item-language.js.map +1 -1
  40. package/dist/item-language.spec.js.map +1 -1
  41. package/dist/mergeField500Lisapainokset.js.map +1 -1
  42. package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
  43. package/dist/mergeRelatorTermFields.js.map +1 -1
  44. package/dist/mergeRelatorTermFields.spec.js.map +1 -1
  45. package/dist/multiple-subfield-0.js.map +1 -1
  46. package/dist/multiple-subfield-0.spec.js.map +1 -1
  47. package/dist/non-breaking-space.js.map +1 -1
  48. package/dist/non-breaking-space.spec.js.map +1 -1
  49. package/dist/normalize-dashes.js.map +1 -1
  50. package/dist/normalize-dashes.spec.js.map +1 -1
  51. package/dist/normalize-identifiers.js.map +1 -1
  52. package/dist/normalize-identifiers.spec.js.map +1 -1
  53. package/dist/normalize-qualifying-information.js.map +1 -1
  54. package/dist/normalize-qualifying-information.spec.js.map +1 -1
  55. package/dist/normalize-utf8-diacritics.js.map +1 -1
  56. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  57. package/dist/normalizeFieldForComparison.js.map +1 -1
  58. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  59. package/dist/prepublicationUtils.js.map +1 -1
  60. package/dist/punctuation/index.js.map +1 -1
  61. package/dist/punctuation/rules/aut.js.map +1 -1
  62. package/dist/punctuation/rules/bib.js.map +1 -1
  63. package/dist/punctuation/rules/index.js.map +1 -1
  64. package/dist/punctuation.spec.js.map +1 -1
  65. package/dist/punctuation2.js +131 -89
  66. package/dist/punctuation2.js.map +1 -1
  67. package/dist/punctuation2.spec.js.map +1 -1
  68. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  69. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
  70. package/dist/removeDuplicateDataFields.js.map +1 -1
  71. package/dist/removeDuplicateDataFields.spec.js.map +1 -1
  72. package/dist/removeInferiorDataFields.js.map +1 -1
  73. package/dist/removeInferiorDataFields.spec.js.map +1 -1
  74. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  75. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  76. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  77. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
  78. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  79. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
  80. package/dist/sort-tags.js.map +1 -1
  81. package/dist/sort-tags.spec.js.map +1 -1
  82. package/dist/sortFields.js.map +1 -1
  83. package/dist/sortFields.spec.js.map +1 -1
  84. package/dist/sortRelatorTerms.js.map +1 -1
  85. package/dist/sortRelatorTerms.spec.js.map +1 -1
  86. package/dist/sortSubfields.js.map +1 -1
  87. package/dist/sortSubfields.spec.js.map +1 -1
  88. package/dist/stripPunctuation.js.map +1 -1
  89. package/dist/stripPunctuation.spec.js.map +1 -1
  90. package/dist/subfield-exclusion.js.map +1 -1
  91. package/dist/subfield-exclusion.spec.js.map +1 -1
  92. package/dist/subfield6Utils.js.map +1 -1
  93. package/dist/subfield8Utils.js.map +1 -1
  94. package/dist/subfieldValueNormalizations.js +28 -8
  95. package/dist/subfieldValueNormalizations.js.map +1 -1
  96. package/dist/subfieldValueNormalizations.spec.js.map +1 -1
  97. package/dist/sync-007-and-300.js.map +1 -1
  98. package/dist/sync-007-and-300.spec.js.map +1 -1
  99. package/dist/typeOfDate-008.js.map +1 -1
  100. package/dist/typeOfDate-008.spec.js.map +1 -1
  101. package/dist/unicode-decomposition.js.map +1 -1
  102. package/dist/unicode-decomposition.spec.js.map +1 -1
  103. package/dist/update-field-540.js.map +1 -1
  104. package/dist/update-field-540.spec.js.map +1 -1
  105. package/dist/urn.js.map +1 -1
  106. package/dist/urn.spec.js.map +1 -1
  107. package/dist/utils.js.map +1 -1
  108. package/package.json +6 -6
  109. package/src/punctuation2.js +103 -56
  110. package/src/subfieldValueNormalizations.js +32 -9
  111. package/test-fixtures/normalize-subfield-value/03/expectedResult.json +26 -0
  112. package/test-fixtures/normalize-subfield-value/03/metadata.json +6 -0
  113. package/test-fixtures/normalize-subfield-value/03/record.json +25 -0
  114. package/test-fixtures/normalize-subfield-value/100_and_880/expectedResult.json +22 -0
  115. package/test-fixtures/normalize-subfield-value/100_and_880/metadata.json +5 -0
  116. package/test-fixtures/normalize-subfield-value/100_and_880/record.json +20 -0
  117. package/test-fixtures/punctuation2/100_and_880/expectedResult.json +22 -0
  118. package/test-fixtures/punctuation2/100_and_880/metadata.json +6 -0
  119. package/test-fixtures/punctuation2/100_and_880/record.json +20 -0
  120. package/test-fixtures/punctuation2/240/expectedResult.json +12 -0
  121. package/test-fixtures/punctuation2/240/metadata.json +6 -0
  122. package/test-fixtures/punctuation2/240/record.json +10 -0
  123. package/test-fixtures/punctuation2/800/expectedResult.json +15 -0
  124. package/test-fixtures/punctuation2/800/metadata.json +6 -0
  125. package/test-fixtures/punctuation2/800/record.json +14 -0
  126. package/test-fixtures/strip-punctuation/100_and_880/expectedResult.json +37 -0
  127. package/test-fixtures/strip-punctuation/100_and_880/metadata.json +5 -0
  128. package/test-fixtures/strip-punctuation/100_and_880/record.json +35 -0
  129. package/test-fixtures/strip-punctuation/240/expectedResult.json +16 -0
  130. package/test-fixtures/strip-punctuation/240/metadata.json +6 -0
  131. package/test-fixtures/strip-punctuation/240/record.json +14 -0
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeFieldForComparison.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_normalizeIdentifiers","_debug","_normalizeSubfieldValueForComparison","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","debugFieldComparison","oldField","newField","oldString","fieldToString","newString","containsHumanName","tag","subfieldCode","undefined","includes","containsCorporateName","skipAllSubfieldNormalizations","value","isControlSubfieldCode","skipSubfieldLowercase","subfieldContainsPartData","skipAllFieldNormalizations","subfieldValueLowercase","newValue","toLowerCase","subfieldLowercase","sf","code","fieldLowercase","field","skipFieldLowercase","subfields","forEach","hack490SubfieldA","removeSarja","subfield","tmp","replace","length","tagAndSubfieldCodeReferToIsbn","looksLikeIsbn","match","normalizeISBN","relevantSubfields","filter","normalizeIsbnSubfield","fieldSpecificHacks","fieldTrimSubfieldValues","fieldRemoveDecomposedDiacritics","removeDecomposedDiacritics","String","normalizeSubfieldValue","normalizePartData","cloneAndRemovePunctuation","clonedField","clone","fieldSkipNormalization","fieldStripPunctuation","removeCharsThatDontCarryMeaning","normalizeField","fieldNormalizeControlNumbers","cloneAndNormalizeFieldForComparison"],"sources":["../src/normalizeFieldForComparison.js"],"sourcesContent":["/*\n Note that this file contains very powerful normalizations and spells that are:\n - meant for comparing similarity/mergability of two fields (clone, normalize, compare),\n - and NOT for modifying the actual data!\n*/\nimport clone from 'clone';\nimport {fieldStripPunctuation} from './punctuation2';\nimport {fieldToString, isControlSubfieldCode} from './utils.js';\n\nimport {fieldNormalizeControlNumbers/*, normalizeControlSubfieldValue*/} from './normalize-identifiers';\nimport createDebugLogger from 'debug';\nimport {normalizePartData, subfieldContainsPartData} from './normalizeSubfieldValueForComparison';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:normalize');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nfunction debugFieldComparison(oldField, newField) { // NB: Debug-only function!\n /*\n // We may drop certain subfields:\n if (oldField.subfields.length === newField.subfields.length) { // eslint-disable-line functional/no-conditional-statements\n oldField.subfields.forEach((subfield, index) => {\n const newValue = newField.subfields[index].value;\n if (subfield.value !== newValue) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(`NORMALIZE SUBFIELD: '${subfield.value}' => '${newValue}'`, debugDev);\n }\n });\n }\n */\n const oldString = fieldToString(oldField);\n const newString = fieldToString(newField);\n if (oldString === newString) {\n return;\n }\n //nvdebug(`NORMALIZE FIELD:\\n '${fieldToString(oldField)}' =>\\n '${fieldToString(newField)}'`, debugDev);\n}\n\nfunction containsHumanName(tag = '???', subfieldCode = undefined) {\n // NB! This set is for bibs! Auth has 400... What else...\n if (['100', '600', '700', '800'].includes(tag)) {\n if (subfieldCode === undefined || subfieldCode === 'a') {\n return true;\n }\n }\n // Others?\n return false;\n}\n\nfunction containsCorporateName(tag = '???', subfieldCode = undefined) {\n // NB! This set is for bibs! Auth has 400... What else...\n if (['110', '610', '710', '810'].includes(tag)) {\n if (subfieldCode === undefined || subfieldCode === 'a') {\n return true;\n }\n }\n // Others?\n return false;\n}\n\nfunction skipAllSubfieldNormalizations(value, subfieldCode, tag) {\n\n\n if (subfieldCode === 'g' && value === 'ENNAKKOTIETO.') {\n return true;\n }\n\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) { // A\n return true;\n }\n\n if (isControlSubfieldCode(subfieldCode)) {\n return true;\n }\n return false;\n}\n\nfunction skipSubfieldLowercase(value, subfieldCode, tag) {\n // These may contain Roman Numerals...\n if (subfieldContainsPartData(tag, subfieldCode)) {\n return true;\n }\n\n return skipAllSubfieldNormalizations(value, subfieldCode, tag);\n}\n\nfunction skipAllFieldNormalizations(tag) {\n if (['LOW', 'SID'].includes(tag)) {\n return true;\n }\n return false;\n}\n\n\nfunction subfieldValueLowercase(value, subfieldCode, tag) {\n if (skipSubfieldLowercase(value, subfieldCode, tag)) {\n return value;\n }\n\n //return value.toLowerCase();\n const newValue = value.toLowerCase();\n if (newValue !== value) {\n //nvdebug(`SVL ${tag} $${subfieldCode} '${value}' =>`, debugDev);\n //nvdebug(`SVL ${tag} $${subfieldCode} '${newValue}'`, debugDev);\n return newValue;\n }\n return value;\n}\n\nfunction subfieldLowercase(sf, tag) {\n sf.value = subfieldValueLowercase(sf.value, sf.code, tag); // eslint-disable-line functional/immutable-data\n}\n\nfunction fieldLowercase(field) {\n if (skipFieldLowercase(field)) {\n return;\n }\n\n field.subfields.forEach(sf => subfieldLowercase(sf, field.tag));\n\n function skipFieldLowercase(field) {\n if (skipAllFieldNormalizations(field.tag)) {\n return true;\n }\n // Skip non-interesting fields\n if (!containsHumanName(field.tag) && !containsCorporateName(field.tag) && !['240', '245', '630'].includes(field.tag)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nfunction hack490SubfieldA(field) {\n if (field.tag !== '490') {\n return;\n }\n field.subfields.forEach(sf => removeSarja(sf));\n\n // NB! This won't work, if the punctuation has not been stripped beforehand!\n function removeSarja(subfield) {\n if (subfield.code !== 'a') {\n return;\n }\n const tmp = subfield.value.replace(/ ?-(?:[a-z]|ä|ö)*sarja$/u, '');\n if (tmp.length > 0) {\n subfield.value = tmp; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nexport function tagAndSubfieldCodeReferToIsbn(tag, subfieldCode) {\n // NB! We don't do this to 020$z!\n if (subfieldCode === 'z' && ['765', '767', '770', '772', '773', '774', '776', '777', '780', '785', '786', '787'].includes(tag)) {\n return true;\n }\n if (tag === '020' && subfieldCode === 'a') {\n return true;\n }\n return false;\n}\n\nfunction looksLikeIsbn(value) {\n // Does not check validity!\n if (value.match(/^(?:[0-9]-?){9}(?:[0-9]-?[0-9]-?[0-9]-?)?[0-9Xx]$/u)) {\n return true;\n }\n return false;\n}\n\nfunction normalizeISBN(field) {\n if (!field.subfields) {\n return;\n }\n\n //nvdebug(`ISBN-field? ${fieldToString(field)}`);\n const relevantSubfields = field.subfields.filter(sf => tagAndSubfieldCodeReferToIsbn(field.tag, sf.code) && looksLikeIsbn(sf.value));\n relevantSubfields.forEach(sf => normalizeIsbnSubfield(sf));\n\n function normalizeIsbnSubfield(sf) {\n //nvdebug(` ISBN-subfield? ${subfieldToString(sf)}`);\n sf.value = sf.value.replace(/-/ug, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/x/u, 'X'); // eslint-disable-line functional/immutable-data\n }\n\n}\n\nfunction fieldSpecificHacks(field) {\n normalizeISBN(field); // 020$a, not $z!\n hack490SubfieldA(field);\n}\n\nexport function fieldTrimSubfieldValues(field) {\n field.subfields?.forEach((sf) => {\n sf.value = sf.value.replace(/^[ \\t\\n]+/u, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/[ \\t\\n]+$/u, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/[ \\t\\n]+/gu, ' '); // eslint-disable-line functional/immutable-data\n });\n}\n\nfunction fieldRemoveDecomposedDiacritics(field) {\n // Raison d'être/motivation: \"Sirén\" and diacriticless \"Siren\" might refer to a same surname, so this normalization\n // allows us to compare authors and avoid duplicate fields.\n field.subfields.forEach((sf) => {\n sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n });\n}\n\nfunction removeDecomposedDiacritics(value = '') {\n // NB #1: Does nothing to precomposed letters. Do String.normalize('NFD') first, if you want to handle them.\n // NB #2: Finnish letters 'å', 'ä', 'ö', 'Å', Ä', and 'Ö' should be handled (=precomposed) before calling this. (= keep them as is)\n // NB #3: Calling our very own fixComposition() before this function handles both #1 and #2.\n return String(value).replace(/\\p{Diacritic}/gu, '');\n}\n\nfunction normalizeSubfieldValue(value, subfieldCode, tag) {\n // NB! For comparison of values only\n /* eslint-disable */\n value = subfieldValueLowercase(value, subfieldCode, tag);\n\n // Normalize: s. = sivut = pp.\n value = normalizePartData(value, subfieldCode, tag);\n value = value.replace(/^\\[([^[\\]]+)\\]/gu, '$1'); // eslint-disable-line functional/immutable-data, prefer-named-capture-group\n\n if (['130', '730'].includes(tag) && subfieldCode === 'a') {\n value = value.replace(' : ', ', '); // \"Halloween ends (elokuva, 2022)\" vs \"Halloween ends (elokuva : 2023)\"\n }\n /* eslint-enable */\n\n // Not going to do these in the foreseeable future, but keeping them here for discussion:\n // Possible normalizations include but are not limited to:\n // ø => ö? Might be language dependent: 041 $a fin => ö, 041 $a eng => o?\n // Ø => Ö?\n // ß => ss\n // þ => th (NB! Both upper and lower case)\n // ...\n // Probably nots:\n // ü => y (probably not, though this correlates with Finnish letter-to-sound rules)\n // w => v (OK for Finnish sorting in certain cases, but we are not here, are we?)\n // I guess we should use decomposed values in code here. (Not sure what composition my examples above use.)\n return value;\n}\n\nexport function cloneAndRemovePunctuation(field) {\n const clonedField = clone(field);\n if (fieldSkipNormalization(field)) {\n return clonedField;\n }\n fieldStripPunctuation(clonedField);\n fieldTrimSubfieldValues(clonedField);\n debugDev('PUNC');\n debugFieldComparison(field, clonedField);\n\n return clonedField;\n}\n\nfunction removeCharsThatDontCarryMeaning(value, tag, subfieldCode) {\n if (tag === '080') {\n return value;\n }\n /* eslint-disable */\n // 3\" refers to inches, but as this is for comparison only we don't mind...\n value = value.replace(/['\"]/gu, '');\n // MRA-273: Handle X00$a name initials.\n // NB #1: that we remove spaces for comparison (as it simpler), though actually space should be used. Doesn't matter as this is comparison only.\n // NB #2: we might/should eventually write a validator/fixer that adds those spaces. After that point, this expection should become obsolete.\n if (subfieldCode === 'a' && ['100', '400', '600', '700', '800'].includes(tag)) { // 400 is used in auth records. It's not a bib field at all.\n value = value.replace(/([A-Z]|Å|Ä|Ö)\\. +/ugi, '$1.');\n }\n /* eslint-enable */\n return value;\n}\n\nfunction normalizeField(field) {\n //sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n fieldStripPunctuation(field);\n fieldLowercase(field);\n fieldNormalizeControlNumbers(field); // FIN11 vs FI-MELINDA etc.\n return field;\n}\n\nexport function cloneAndNormalizeFieldForComparison(field) {\n // NB! This new field is for comparison purposes only.\n // Some of the normalizations might be considered a bit overkill for other purposes.\n const clonedField = clone(field);\n if (fieldSkipNormalization(field)) {\n return clonedField;\n }\n clonedField.subfields.forEach((sf) => { // Do this for all fields or some fields?\n sf.value = normalizeSubfieldValue(sf.value, sf.code, field.tag); // eslint-disable-line functional/immutable-data\n sf.value = removeCharsThatDontCarryMeaning(sf.value, field.tag, sf.code);// eslint-disable-line functional/immutable-data\n });\n\n normalizeField(clonedField); // eslint-disable-line functional/immutable-data\n fieldRemoveDecomposedDiacritics(clonedField);\n fieldSpecificHacks(clonedField);\n fieldTrimSubfieldValues(clonedField);\n\n\n debugFieldComparison(field, clonedField); // For debugging purposes only\n\n return clonedField;\n}\n\nfunction fieldSkipNormalization(field) {\n if (!field.subfields || ['018', '066', '080', '083'].includes(field.tag)) {\n return true;\n }\n return false;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"normalizeFieldForComparison.js","names":["_clone","_interopRequireDefault","require","_punctuation","_utils","_normalizeIdentifiers","_debug","_normalizeSubfieldValueForComparison","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","debugFieldComparison","oldField","newField","oldString","fieldToString","newString","containsHumanName","tag","subfieldCode","undefined","includes","containsCorporateName","skipAllSubfieldNormalizations","value","isControlSubfieldCode","skipSubfieldLowercase","subfieldContainsPartData","skipAllFieldNormalizations","subfieldValueLowercase","newValue","toLowerCase","subfieldLowercase","sf","code","fieldLowercase","field","skipFieldLowercase","subfields","forEach","hack490SubfieldA","removeSarja","subfield","tmp","replace","length","tagAndSubfieldCodeReferToIsbn","looksLikeIsbn","match","normalizeISBN","relevantSubfields","filter","normalizeIsbnSubfield","fieldSpecificHacks","fieldTrimSubfieldValues","fieldRemoveDecomposedDiacritics","removeDecomposedDiacritics","String","normalizeSubfieldValue","normalizePartData","cloneAndRemovePunctuation","clonedField","clone","fieldSkipNormalization","fieldStripPunctuation","removeCharsThatDontCarryMeaning","normalizeField","fieldNormalizeControlNumbers","cloneAndNormalizeFieldForComparison"],"sources":["../src/normalizeFieldForComparison.js"],"sourcesContent":["/*\n Note that this file contains very powerful normalizations and spells that are:\n - meant for comparing similarity/mergability of two fields (clone, normalize, compare),\n - and NOT for modifying the actual data!\n*/\nimport clone from 'clone';\nimport {fieldStripPunctuation} from './punctuation2';\nimport {fieldToString, isControlSubfieldCode} from './utils.js';\n\nimport {fieldNormalizeControlNumbers/*, normalizeControlSubfieldValue*/} from './normalize-identifiers';\nimport createDebugLogger from 'debug';\nimport {normalizePartData, subfieldContainsPartData} from './normalizeSubfieldValueForComparison';\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:normalize');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nfunction debugFieldComparison(oldField, newField) { // NB: Debug-only function!\n /*\n // We may drop certain subfields:\n if (oldField.subfields.length === newField.subfields.length) { // eslint-disable-line functional/no-conditional-statements\n oldField.subfields.forEach((subfield, index) => {\n const newValue = newField.subfields[index].value;\n if (subfield.value !== newValue) { // eslint-disable-line functional/no-conditional-statements\n nvdebug(`NORMALIZE SUBFIELD: '${subfield.value}' => '${newValue}'`, debugDev);\n }\n });\n }\n */\n const oldString = fieldToString(oldField);\n const newString = fieldToString(newField);\n if (oldString === newString) {\n return;\n }\n //nvdebug(`NORMALIZE FIELD:\\n '${fieldToString(oldField)}' =>\\n '${fieldToString(newField)}'`, debugDev);\n}\n\nfunction containsHumanName(tag = '???', subfieldCode = undefined) {\n // NB! This set is for bibs! Auth has 400... What else...\n if (['100', '600', '700', '800'].includes(tag)) {\n if (subfieldCode === undefined || subfieldCode === 'a') {\n return true;\n }\n }\n // Others?\n return false;\n}\n\nfunction containsCorporateName(tag = '???', subfieldCode = undefined) {\n // NB! This set is for bibs! Auth has 400... What else...\n if (['110', '610', '710', '810'].includes(tag)) {\n if (subfieldCode === undefined || subfieldCode === 'a') {\n return true;\n }\n }\n // Others?\n return false;\n}\n\nfunction skipAllSubfieldNormalizations(value, subfieldCode, tag) {\n\n\n if (subfieldCode === 'g' && value === 'ENNAKKOTIETO.') {\n return true;\n }\n\n\n if (tag === '035' && ['a', 'z'].includes(subfieldCode)) { // A\n return true;\n }\n\n if (isControlSubfieldCode(subfieldCode)) {\n return true;\n }\n return false;\n}\n\nfunction skipSubfieldLowercase(value, subfieldCode, tag) {\n // These may contain Roman Numerals...\n if (subfieldContainsPartData(tag, subfieldCode)) {\n return true;\n }\n\n return skipAllSubfieldNormalizations(value, subfieldCode, tag);\n}\n\nfunction skipAllFieldNormalizations(tag) {\n if (['LOW', 'SID'].includes(tag)) {\n return true;\n }\n return false;\n}\n\n\nfunction subfieldValueLowercase(value, subfieldCode, tag) {\n if (skipSubfieldLowercase(value, subfieldCode, tag)) {\n return value;\n }\n\n //return value.toLowerCase();\n const newValue = value.toLowerCase();\n if (newValue !== value) {\n //nvdebug(`SVL ${tag} $${subfieldCode} '${value}' =>`, debugDev);\n //nvdebug(`SVL ${tag} $${subfieldCode} '${newValue}'`, debugDev);\n return newValue;\n }\n return value;\n}\n\nfunction subfieldLowercase(sf, tag) {\n sf.value = subfieldValueLowercase(sf.value, sf.code, tag); // eslint-disable-line functional/immutable-data\n}\n\nfunction fieldLowercase(field) {\n if (skipFieldLowercase(field)) {\n return;\n }\n\n field.subfields.forEach(sf => subfieldLowercase(sf, field.tag));\n\n function skipFieldLowercase(field) {\n if (skipAllFieldNormalizations(field.tag)) {\n return true;\n }\n // Skip non-interesting fields\n if (!containsHumanName(field.tag) && !containsCorporateName(field.tag) && !['240', '245', '630'].includes(field.tag)) {\n return true;\n }\n\n return false;\n }\n}\n\n\nfunction hack490SubfieldA(field) {\n if (field.tag !== '490') {\n return;\n }\n field.subfields.forEach(sf => removeSarja(sf));\n\n // NB! This won't work, if the punctuation has not been stripped beforehand!\n function removeSarja(subfield) {\n if (subfield.code !== 'a') {\n return;\n }\n const tmp = subfield.value.replace(/ ?-(?:[a-z]|ä|ö)*sarja$/u, '');\n if (tmp.length > 0) {\n subfield.value = tmp; // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nexport function tagAndSubfieldCodeReferToIsbn(tag, subfieldCode) {\n // NB! We don't do this to 020$z!\n if (subfieldCode === 'z' && ['765', '767', '770', '772', '773', '774', '776', '777', '780', '785', '786', '787'].includes(tag)) {\n return true;\n }\n if (tag === '020' && subfieldCode === 'a') {\n return true;\n }\n return false;\n}\n\nfunction looksLikeIsbn(value) {\n // Does not check validity!\n if (value.match(/^(?:[0-9]-?){9}(?:[0-9]-?[0-9]-?[0-9]-?)?[0-9Xx]$/u)) {\n return true;\n }\n return false;\n}\n\nfunction normalizeISBN(field) {\n if (!field.subfields) {\n return;\n }\n\n //nvdebug(`ISBN-field? ${fieldToString(field)}`);\n const relevantSubfields = field.subfields.filter(sf => tagAndSubfieldCodeReferToIsbn(field.tag, sf.code) && looksLikeIsbn(sf.value));\n relevantSubfields.forEach(sf => normalizeIsbnSubfield(sf));\n\n function normalizeIsbnSubfield(sf) {\n //nvdebug(` ISBN-subfield? ${subfieldToString(sf)}`);\n sf.value = sf.value.replace(/-/ug, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/x/u, 'X'); // eslint-disable-line functional/immutable-data\n }\n\n}\n\nfunction fieldSpecificHacks(field) {\n normalizeISBN(field); // 020$a, not $z!\n hack490SubfieldA(field);\n}\n\nexport function fieldTrimSubfieldValues(field) {\n field.subfields?.forEach((sf) => {\n sf.value = sf.value.replace(/^[ \\t\\n]+/u, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/[ \\t\\n]+$/u, ''); // eslint-disable-line functional/immutable-data\n sf.value = sf.value.replace(/[ \\t\\n]+/gu, ' '); // eslint-disable-line functional/immutable-data\n });\n}\n\nfunction fieldRemoveDecomposedDiacritics(field) {\n // Raison d'être/motivation: \"Sirén\" and diacriticless \"Siren\" might refer to a same surname, so this normalization\n // allows us to compare authors and avoid duplicate fields.\n field.subfields.forEach((sf) => {\n sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n });\n}\n\nfunction removeDecomposedDiacritics(value = '') {\n // NB #1: Does nothing to precomposed letters. Do String.normalize('NFD') first, if you want to handle them.\n // NB #2: Finnish letters 'å', 'ä', 'ö', 'Å', Ä', and 'Ö' should be handled (=precomposed) before calling this. (= keep them as is)\n // NB #3: Calling our very own fixComposition() before this function handles both #1 and #2.\n return String(value).replace(/\\p{Diacritic}/gu, '');\n}\n\nfunction normalizeSubfieldValue(value, subfieldCode, tag) {\n // NB! For comparison of values only\n /* eslint-disable */\n value = subfieldValueLowercase(value, subfieldCode, tag);\n\n // Normalize: s. = sivut = pp.\n value = normalizePartData(value, subfieldCode, tag);\n value = value.replace(/^\\[([^[\\]]+)\\]/gu, '$1'); // eslint-disable-line functional/immutable-data, prefer-named-capture-group\n\n if (['130', '730'].includes(tag) && subfieldCode === 'a') {\n value = value.replace(' : ', ', '); // \"Halloween ends (elokuva, 2022)\" vs \"Halloween ends (elokuva : 2023)\"\n }\n /* eslint-enable */\n\n // Not going to do these in the foreseeable future, but keeping them here for discussion:\n // Possible normalizations include but are not limited to:\n // ø => ö? Might be language dependent: 041 $a fin => ö, 041 $a eng => o?\n // Ø => Ö?\n // ß => ss\n // þ => th (NB! Both upper and lower case)\n // ...\n // Probably nots:\n // ü => y (probably not, though this correlates with Finnish letter-to-sound rules)\n // w => v (OK for Finnish sorting in certain cases, but we are not here, are we?)\n // I guess we should use decomposed values in code here. (Not sure what composition my examples above use.)\n return value;\n}\n\nexport function cloneAndRemovePunctuation(field) {\n const clonedField = clone(field);\n if (fieldSkipNormalization(field)) {\n return clonedField;\n }\n fieldStripPunctuation(clonedField);\n fieldTrimSubfieldValues(clonedField);\n debugDev('PUNC');\n debugFieldComparison(field, clonedField);\n\n return clonedField;\n}\n\nfunction removeCharsThatDontCarryMeaning(value, tag, subfieldCode) {\n if (tag === '080') {\n return value;\n }\n /* eslint-disable */\n // 3\" refers to inches, but as this is for comparison only we don't mind...\n value = value.replace(/['\"]/gu, '');\n // MRA-273: Handle X00$a name initials.\n // NB #1: that we remove spaces for comparison (as it simpler), though actually space should be used. Doesn't matter as this is comparison only.\n // NB #2: we might/should eventually write a validator/fixer that adds those spaces. After that point, this expection should become obsolete.\n if (subfieldCode === 'a' && ['100', '400', '600', '700', '800'].includes(tag)) { // 400 is used in auth records. It's not a bib field at all.\n value = value.replace(/([A-Z]|Å|Ä|Ö)\\. +/ugi, '$1.');\n }\n /* eslint-enable */\n return value;\n}\n\nfunction normalizeField(field) {\n //sf.value = removeDecomposedDiacritics(sf.value); // eslint-disable-line functional/immutable-data\n fieldStripPunctuation(field);\n fieldLowercase(field);\n fieldNormalizeControlNumbers(field); // FIN11 vs FI-MELINDA etc.\n return field;\n}\n\nexport function cloneAndNormalizeFieldForComparison(field) {\n // NB! This new field is for comparison purposes only.\n // Some of the normalizations might be considered a bit overkill for other purposes.\n const clonedField = clone(field);\n if (fieldSkipNormalization(field)) {\n return clonedField;\n }\n clonedField.subfields.forEach((sf) => { // Do this for all fields or some fields?\n sf.value = normalizeSubfieldValue(sf.value, sf.code, field.tag); // eslint-disable-line functional/immutable-data\n sf.value = removeCharsThatDontCarryMeaning(sf.value, field.tag, sf.code);// eslint-disable-line functional/immutable-data\n });\n\n normalizeField(clonedField); // eslint-disable-line functional/immutable-data\n fieldRemoveDecomposedDiacritics(clonedField);\n fieldSpecificHacks(clonedField);\n fieldTrimSubfieldValues(clonedField);\n\n\n debugFieldComparison(field, clonedField); // For debugging purposes only\n\n return clonedField;\n}\n\nfunction fieldSkipNormalization(field) {\n if (!field.subfields || ['018', '066', '080', '083'].includes(field.tag)) {\n return true;\n }\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"normalizeSubfieldValueForComparison.js","names":["_utils","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","subfieldContainsPartData","tag","subfieldCode","includes","splitPartData","originalValue","value","replace","splitPoint","lastIndexOf","undefined","lhs","substr","rhs","normalizePartType","toLowerCase","romanNumbers","normalizePartNumber","arabicValue","nvdebug","splitAndNormalizePartData","partType","partNumber","partsAgree","value1","value2","partType1","partNumber1","partType2","partNumber2","normalizePartData"],"sources":["../src/normalizeSubfieldValueForComparison.js"],"sourcesContent":["import {nvdebug} from './utils';\nimport createDebugLogger from 'debug';\n\n// Normalizes at least 490$v and 773$g which contain information such as \"Raita 5\" vs \"5\", and \"Osa 3\" vs \"Osa III\".\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:normalizePart');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport function subfieldContainsPartData(tag, subfieldCode) {\n // NB! Used by reducers' mergeSubield.js\n if (subfieldCode === 'v' && ['490', '800', '810', '811', '830'].includes(tag)) {\n return true;\n }\n if (tag === '773' && subfieldCode === 'g') {\n return true;\n }\n return false;\n}\n\nfunction splitPartData(originalValue) {\n // Remove brackets from number-only:\n const value = originalValue.replace(/^\\[([0-9]+)\\][-.,:; ]*$/ui, '$1'); // eslint-disable-line prefer-named-capture-group\n const splitPoint = value.lastIndexOf(' '); // MRA-627: \"5, 2017\" should be split here. Think of this later on...\n if (splitPoint === -1) {\n return [undefined, value];\n }\n const lhs = value.substr(0, splitPoint);\n const rhs = value.substr(splitPoint + 1);\n return [lhs, rhs];\n}\n\nfunction normalizePartType(originalValue) {\n if (originalValue === undefined) {\n return undefined;\n }\n const value = originalValue.toLowerCase();\n\n // Return Finnish singular nominative. Choise of language is arbitrary. This is best-ish for debug purposes...\n if (['n:o', 'no', 'nr', 'nro', 'number', 'numero', 'nummer'].includes(value)) {\n return 'numero';\n }\n if (['band', 'bd', 'häfte', 'nide', 'osa', 'part', 'teil', 'vol', 'vol.', 'volume'].includes(value)) {\n return 'osa';\n }\n\n if (['p.', 'page', 'pages', 'pp.', 's.', 'sidor', 'sivu', 'sivut'].includes(value)) {\n return 'sivu';\n }\n\n return value;\n}\n\nconst romanNumbers = {'I': '1', 'II': '2', 'III': '3', 'IV': '4', 'V': '5', 'VI': '6', 'X': '10'};\n\nfunction normalizePartNumber(value) {\n // Should we handle all Roman numbers or some range of them?\n // There's probably a library for our purposes..\n if (value in romanNumbers) {\n const arabicValue = romanNumbers[value];\n nvdebug(` MAP ${value} to ${arabicValue}`, debugDev);\n return arabicValue;\n }\n return value.toLowerCase();\n}\n\nfunction splitAndNormalizePartData(value) {\n // This is just a stub. Does not handle eg. \"Levy 2, raita 15\"\n const [lhs, rhs] = splitPartData(value);\n nvdebug(` LHS: '${lhs}'`, debugDev);\n nvdebug(` RHS: '${rhs}'`, debugDev);\n const partType = normalizePartType(lhs);\n const partNumber = normalizePartNumber(rhs);\n return [partType, partNumber];\n}\n\nexport function partsAgree(value1, value2, tag, subfieldCode) {\n // Note, that parts can not be normalized away, as \"2\" can agree with \"Part 2\" and \"Raita 2\" and \"Volume 2\"...\n // NB! Used by reducers' mergeSubield.js\n if (!subfieldContainsPartData(tag, subfieldCode)) {\n return false;\n }\n const [partType1, partNumber1] = splitAndNormalizePartData(value1);\n const [partType2, partNumber2] = splitAndNormalizePartData(value2);\n if (partNumber1 !== partNumber2) {\n // MRA-627: This should/could accept 5/1997\n return false;\n }\n if (partType1 === undefined || partType2 === undefined || partType1 === partType2) {\n return true;\n }\n\n return false;\n}\n\nexport function normalizePartData(value, subfieldCode, tag) {\n // This is for normalizing values for equality comparison only!\n if (!subfieldContainsPartData(tag, subfieldCode)) {\n return value;\n }\n\n const [partType, partNumber] = splitAndNormalizePartData(value);\n if (partType === undefined) {\n return partNumber;\n }\n return `${partType} ${partNumber}`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"normalizeSubfieldValueForComparison.js","names":["_utils","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","subfieldContainsPartData","tag","subfieldCode","includes","splitPartData","originalValue","value","replace","splitPoint","lastIndexOf","undefined","lhs","substr","rhs","normalizePartType","toLowerCase","romanNumbers","normalizePartNumber","arabicValue","nvdebug","splitAndNormalizePartData","partType","partNumber","partsAgree","value1","value2","partType1","partNumber1","partType2","partNumber2","normalizePartData"],"sources":["../src/normalizeSubfieldValueForComparison.js"],"sourcesContent":["import {nvdebug} from './utils';\nimport createDebugLogger from 'debug';\n\n// Normalizes at least 490$v and 773$g which contain information such as \"Raita 5\" vs \"5\", and \"Osa 3\" vs \"Osa III\".\n\nconst debug = createDebugLogger('@natlibfi/melinda-marc-record-merge-reducers:normalizePart');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nexport function subfieldContainsPartData(tag, subfieldCode) {\n // NB! Used by reducers' mergeSubield.js\n if (subfieldCode === 'v' && ['490', '800', '810', '811', '830'].includes(tag)) {\n return true;\n }\n if (tag === '773' && subfieldCode === 'g') {\n return true;\n }\n return false;\n}\n\nfunction splitPartData(originalValue) {\n // Remove brackets from number-only:\n const value = originalValue.replace(/^\\[([0-9]+)\\][-.,:; ]*$/ui, '$1'); // eslint-disable-line prefer-named-capture-group\n const splitPoint = value.lastIndexOf(' '); // MRA-627: \"5, 2017\" should be split here. Think of this later on...\n if (splitPoint === -1) {\n return [undefined, value];\n }\n const lhs = value.substr(0, splitPoint);\n const rhs = value.substr(splitPoint + 1);\n return [lhs, rhs];\n}\n\nfunction normalizePartType(originalValue) {\n if (originalValue === undefined) {\n return undefined;\n }\n const value = originalValue.toLowerCase();\n\n // Return Finnish singular nominative. Choise of language is arbitrary. This is best-ish for debug purposes...\n if (['n:o', 'no', 'nr', 'nro', 'number', 'numero', 'nummer'].includes(value)) {\n return 'numero';\n }\n if (['band', 'bd', 'häfte', 'nide', 'osa', 'part', 'teil', 'vol', 'vol.', 'volume'].includes(value)) {\n return 'osa';\n }\n\n if (['p.', 'page', 'pages', 'pp.', 's.', 'sidor', 'sivu', 'sivut'].includes(value)) {\n return 'sivu';\n }\n\n return value;\n}\n\nconst romanNumbers = {'I': '1', 'II': '2', 'III': '3', 'IV': '4', 'V': '5', 'VI': '6', 'X': '10'};\n\nfunction normalizePartNumber(value) {\n // Should we handle all Roman numbers or some range of them?\n // There's probably a library for our purposes..\n if (value in romanNumbers) {\n const arabicValue = romanNumbers[value];\n nvdebug(` MAP ${value} to ${arabicValue}`, debugDev);\n return arabicValue;\n }\n return value.toLowerCase();\n}\n\nfunction splitAndNormalizePartData(value) {\n // This is just a stub. Does not handle eg. \"Levy 2, raita 15\"\n const [lhs, rhs] = splitPartData(value);\n nvdebug(` LHS: '${lhs}'`, debugDev);\n nvdebug(` RHS: '${rhs}'`, debugDev);\n const partType = normalizePartType(lhs);\n const partNumber = normalizePartNumber(rhs);\n return [partType, partNumber];\n}\n\nexport function partsAgree(value1, value2, tag, subfieldCode) {\n // Note, that parts can not be normalized away, as \"2\" can agree with \"Part 2\" and \"Raita 2\" and \"Volume 2\"...\n // NB! Used by reducers' mergeSubield.js\n if (!subfieldContainsPartData(tag, subfieldCode)) {\n return false;\n }\n const [partType1, partNumber1] = splitAndNormalizePartData(value1);\n const [partType2, partNumber2] = splitAndNormalizePartData(value2);\n if (partNumber1 !== partNumber2) {\n // MRA-627: This should/could accept 5/1997\n return false;\n }\n if (partType1 === undefined || partType2 === undefined || partType1 === partType2) {\n return true;\n }\n\n return false;\n}\n\nexport function normalizePartData(value, subfieldCode, tag) {\n // This is for normalizing values for equality comparison only!\n if (!subfieldContainsPartData(tag, subfieldCode)) {\n return value;\n }\n\n const [partType, partNumber] = splitAndNormalizePartData(value);\n if (partType === undefined) {\n return partNumber;\n }\n return `${partType} ${partNumber}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"prepublicationUtils.js","names":["_utils","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","KONEELLISESTI_TUOTETTU_TIETUE","TARKISTETTU_ENNAKKOTIETO","ENNAKKOTIETO","encodingLevelPreferenceArray","prepublicationLevelIndex","indexOf","prepublicationLevelIsKoneellisestiTuotettuTietueOrTarkistettuEnnakkotieto","prepublicationLevel","encodingLevelIsBetterThanPrepublication","encodingLevel","index","containsSubstringInSubfieldA","field","substring","subfields","some","sf","code","value","includes","fieldRefersToKoneellisestiTuotettuTietue","fieldRefersToTarkistettuEnnakkotieto","fieldRefersToEnnakkotieto","firstFieldHasBetterPrepubEncodingLevel","field1","field2","getRelevant5XXFields","record","f500","f594","cands","actualGetFields","filtered","filter","hasRelevantPrepubData","tag","every","get","getPrepublicationLevel","fields","f","baseHasEqualOrHigherEncodingLevel","baseEncodingLevel","sourceEncodingLevel","baseIndex","sourceIndex","hasFikkaLOW","fieldHasSubfield","hasNatLibFi042","isFikkaRecord","getEncodingLevel","leader","deleteAllPrepublicationNotesFromField500InNonPubRecord","length","nvdebug","forEach","removeField","removeWorsePrepubField500s","nvdebugFieldArray","nonBest","removeWorsePrepubField594s","fields594","isEnnakkotietoSubfield","subfield","substr","isEnnakkotietoField","isKingOfTheHill","opposingFields","opposingField"],"sources":["../src/prepublicationUtils.js"],"sourcesContent":["import {fieldHasSubfield, nvdebug, nvdebugFieldArray} from './utils';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:prepublicationUtils');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst KONEELLISESTI_TUOTETTU_TIETUE = 1; // Best\nconst TARKISTETTU_ENNAKKOTIETO = 2;\nconst ENNAKKOTIETO = 3;\n//const EI_TASOA = 4;\n\nconst encodingLevelPreferenceArray = [' ', '1', '3', '4', '5', '2', '7', 'u', 'z', '8']; // MET-145\nconst prepublicationLevelIndex = encodingLevelPreferenceArray.indexOf('8');\n\nexport function prepublicationLevelIsKoneellisestiTuotettuTietueOrTarkistettuEnnakkotieto(prepublicationLevel) {\n return prepublicationLevel === KONEELLISESTI_TUOTETTU_TIETUE || prepublicationLevel === TARKISTETTU_ENNAKKOTIETO;\n}\n\n\nexport function encodingLevelIsBetterThanPrepublication(encodingLevel) {\n const index = encodingLevelPreferenceArray.indexOf(encodingLevel);\n return index > -1 && index < prepublicationLevelIndex;\n}\n\n\nfunction containsSubstringInSubfieldA(field, substring) {\n return field.subfields.some(sf => sf.code === 'a' && sf.value.includes(substring));\n}\n\n\n// These three functions below all refer to field 500:\nexport function fieldRefersToKoneellisestiTuotettuTietue(field) {\n return containsSubstringInSubfieldA(field, 'Koneellisesti tuotettu tietue');\n}\n\n\nexport function fieldRefersToTarkistettuEnnakkotieto(field) {\n return containsSubstringInSubfieldA(field, 'TARKISTETTU ENNAKKOTIETO');\n}\n\n\nexport function fieldRefersToEnnakkotieto(field) {\n // NB! This no longer matches 'TARKISTETTU ENNAKKOTIETO' case! Bug or Feature?\n if (containsSubstringInSubfieldA(field, 'ENNAKKOTIETO') && !fieldRefersToTarkistettuEnnakkotieto(field)) {\n return true;\n }\n // MRA-420: \"EI VIELÄ ILMESTYNYT\" is a Helmet note, that is semantically similar to ENNAKKOTIETO:\n return containsSubstringInSubfieldA(field, 'EI VIELÄ ILMESTYNYT');\n}\n\n\nexport function firstFieldHasBetterPrepubEncodingLevel(field1, field2) {\n if (fieldRefersToKoneellisestiTuotettuTietue(field2)) {\n return false;\n }\n if (fieldRefersToKoneellisestiTuotettuTietue(field1)) {\n return true;\n }\n if (fieldRefersToTarkistettuEnnakkotieto(field2)) {\n return false;\n }\n if (fieldRefersToTarkistettuEnnakkotieto(field1)) {\n return true;\n }\n if (fieldRefersToEnnakkotieto(field2)) {\n return false;\n }\n if (fieldRefersToEnnakkotieto(field1)) {\n return true;\n }\n return false;\n}\n\n\n/*\nfunction hasEnnakkotietoSubfield(field) {\n return field.subfields.some(sf => ['g', '9'].includes(sf.code) && sf.value.includes('ENNAKKOTIETO'));\n}\n*/\n\n/*\nexport function isPrepublicationField6XX(field) {\n if (!field.tag.match(/^6(?:[0-4][0-9]|5[0-5])$/u)) { // Not within 600 ... 655 range\n return false;\n }\n return field.subfields.some(sf => hasEnnakkotietoSubfield(sf));\n}\n*/\n\n\nexport function getRelevant5XXFields(record, f500 = false, f594 = false) {\n const cands = actualGetFields();\n //nvdebugFieldArray(cands, 'gR5XXa: ', debugDev);\n const filtered = cands.filter(field => hasRelevantPrepubData(field));\n //nvdebugFieldArray(filtered, 'gR5XXb: ', debugDev);\n return filtered;\n\n //return actualGetFields().filter(field => hasRelevantPrepubData(field));\n\n function hasRelevantPrepubData(field) {\n // Check prepub ($a):\n if (!fieldRefersToKoneellisestiTuotettuTietue(field) && !fieldRefersToTarkistettuEnnakkotieto(field) && !fieldRefersToEnnakkotieto(field)) {\n return false;\n }\n // Check relevance (594$5):\n if (field.tag === '500') {\n return field.subfields.every(sf => sf.code !== '5'); //true;\n }\n return field.subfields.some(sf => sf.code === '5' && ['FENNI', 'FIKKA', 'VIOLA'].includes(sf.value));\n }\n\n function actualGetFields() {\n if (f500 && f594) {\n return record.get(/^(?:500|594)$/u);\n }\n if (f500) {\n return record.get(/^500$/u);\n }\n if (f594) {\n return record.get(/^594$/u);\n }\n return [];\n }\n\n}\n\n\n// Very similar to getPrepublicationLevel() in melinda-record-match-validator's getPrepublicationLevel()...\n// We should use that and not have a copy here...\nexport function getPrepublicationLevel(record, f500 = false, f594 = false) {\n // Smaller return value is better\n const fields = getRelevant5XXFields(record, f500, f594);\n\n if (!fields) {\n return null;\n }\n if (fields.some(f => fieldRefersToKoneellisestiTuotettuTietue(f))) {\n return KONEELLISESTI_TUOTETTU_TIETUE;\n }\n\n if (fields.some(f => fieldRefersToTarkistettuEnnakkotieto(f))) {\n return TARKISTETTU_ENNAKKOTIETO;\n }\n\n if (fields.some(f => fieldRefersToEnnakkotieto(f))) {\n return ENNAKKOTIETO;\n }\n\n return null;\n}\n\n\nexport function baseHasEqualOrHigherEncodingLevel(baseEncodingLevel, sourceEncodingLevel) {\n const baseIndex = encodingLevelPreferenceArray.indexOf(baseEncodingLevel);\n const sourceIndex = encodingLevelPreferenceArray.indexOf(sourceEncodingLevel);\n\n if (baseIndex === -1) {\n // Base wins if both are bad:\n return sourceIndex === -1;\n }\n return baseIndex <= sourceIndex;\n}\n\n\nfunction hasFikkaLOW(record) {\n return record.fields.some(field => field.tag === 'LOW' && fieldHasSubfield(field, 'a', 'FIKKA'));\n}\n\n\nfunction hasNatLibFi042(record) {\n return record.fields.some(field => field.tag === '042' && (fieldHasSubfield(field, 'a', 'finb') || fieldHasSubfield(field, 'a', 'finbd')));\n}\n\n\nexport function isFikkaRecord(record) {\n // NB! Does not include Humaniora. Pienpainatteet (not that they'd have duplicates)?\n return hasFikkaLOW(record) && hasNatLibFi042(record);\n}\n\n\nexport function getEncodingLevel(record) {\n return record.leader.substring(17, 18);\n}\n\n\nexport function deleteAllPrepublicationNotesFromField500InNonPubRecord(record) {\n const encodingLevel = getEncodingLevel(record);\n // Skip prepublication (or theoretically even worse) records:\n if (!encodingLevelIsBetterThanPrepublication(encodingLevel)) {\n //if (['2', '8'].includes(encodingLevel)) { // MET-306: added '2' here\n return;\n }\n\n // MET-306: keep \"koneellisesti tuotettu tietue\" if encoding level is '2':\n const f500 = getRelevant5XXFields(record, true, false).filter(field => encodingLevel === '2' ? !fieldRefersToKoneellisestiTuotettuTietue(field) : true);\n if (f500.length === 0) {\n return;\n }\n\n\n nvdebug(`Delete all ${f500.length} instance(s) of field 500`, debugDev);\n f500.forEach(field => record.removeField(field));\n}\n\n\nexport function removeWorsePrepubField500s(record) {\n // Remove lower-level entries:\n const fields = getRelevant5XXFields(record, true, false); // 500=false, 594=true\n nvdebugFieldArray(fields, ' Candidates for non-best 500 b4 filtering: ', debugDev);\n const nonBest = fields.filter(field => fields.some(field2 => firstFieldHasBetterPrepubEncodingLevel(field2, field)));\n nvdebugFieldArray(nonBest, ' Remove non-best 500: ', debugDev);\n nonBest.forEach(field => record.removeField(field));\n}\n\n\nexport function removeWorsePrepubField594s(record) {\n // Remove lower-level entries:\n const fields594 = getRelevant5XXFields(record, false, true); // 500=false, 594=true\n nvdebugFieldArray(fields594, ' Candidates for non-best 594 b4 filtering: ', debugDev);\n const nonBest = fields594.filter(field => fields594.some(field2 => firstFieldHasBetterPrepubEncodingLevel(field2, field)));\n nvdebugFieldArray(nonBest, ' Remove non-best 594: ', debugDev);\n nonBest.forEach(field => record.removeField(field));\n}\n\n\nexport function isEnnakkotietoSubfield(subfield) {\n if (subfield.code !== '9' && subfield.code !== 'g') {\n return false;\n }\n // Length <= 13 allows punctuation, but does not require it:\n if (subfield.value.substr(0, 12) === 'ENNAKKOTIETO' && subfield.value.length <= 13) {\n return true;\n }\n return false;\n}\n\nexport function isEnnakkotietoField(field) {\n return field.subfields.some(sf => isEnnakkotietoSubfield(sf));\n}\n\nexport function isKingOfTheHill(field, opposingFields) {\n // Field is no better than at least one of the opposing fields\n return opposingFields.every(opposingField => firstFieldHasBetterPrepubEncodingLevel(field, opposingField));\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"prepublicationUtils.js","names":["_utils","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","createDebugLogger","debugDev","extend","KONEELLISESTI_TUOTETTU_TIETUE","TARKISTETTU_ENNAKKOTIETO","ENNAKKOTIETO","encodingLevelPreferenceArray","prepublicationLevelIndex","indexOf","prepublicationLevelIsKoneellisestiTuotettuTietueOrTarkistettuEnnakkotieto","prepublicationLevel","encodingLevelIsBetterThanPrepublication","encodingLevel","index","containsSubstringInSubfieldA","field","substring","subfields","some","sf","code","value","includes","fieldRefersToKoneellisestiTuotettuTietue","fieldRefersToTarkistettuEnnakkotieto","fieldRefersToEnnakkotieto","firstFieldHasBetterPrepubEncodingLevel","field1","field2","getRelevant5XXFields","record","f500","f594","cands","actualGetFields","filtered","filter","hasRelevantPrepubData","tag","every","get","getPrepublicationLevel","fields","f","baseHasEqualOrHigherEncodingLevel","baseEncodingLevel","sourceEncodingLevel","baseIndex","sourceIndex","hasFikkaLOW","fieldHasSubfield","hasNatLibFi042","isFikkaRecord","getEncodingLevel","leader","deleteAllPrepublicationNotesFromField500InNonPubRecord","length","nvdebug","forEach","removeField","removeWorsePrepubField500s","nvdebugFieldArray","nonBest","removeWorsePrepubField594s","fields594","isEnnakkotietoSubfield","subfield","substr","isEnnakkotietoField","isKingOfTheHill","opposingFields","opposingField"],"sources":["../src/prepublicationUtils.js"],"sourcesContent":["import {fieldHasSubfield, nvdebug, nvdebugFieldArray} from './utils';\nimport createDebugLogger from 'debug';\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda:prepublicationUtils');\n//const debugData = debug.extend('data');\nconst debugDev = debug.extend('dev');\n\nconst KONEELLISESTI_TUOTETTU_TIETUE = 1; // Best\nconst TARKISTETTU_ENNAKKOTIETO = 2;\nconst ENNAKKOTIETO = 3;\n//const EI_TASOA = 4;\n\nconst encodingLevelPreferenceArray = [' ', '1', '3', '4', '5', '2', '7', 'u', 'z', '8']; // MET-145\nconst prepublicationLevelIndex = encodingLevelPreferenceArray.indexOf('8');\n\nexport function prepublicationLevelIsKoneellisestiTuotettuTietueOrTarkistettuEnnakkotieto(prepublicationLevel) {\n return prepublicationLevel === KONEELLISESTI_TUOTETTU_TIETUE || prepublicationLevel === TARKISTETTU_ENNAKKOTIETO;\n}\n\n\nexport function encodingLevelIsBetterThanPrepublication(encodingLevel) {\n const index = encodingLevelPreferenceArray.indexOf(encodingLevel);\n return index > -1 && index < prepublicationLevelIndex;\n}\n\n\nfunction containsSubstringInSubfieldA(field, substring) {\n return field.subfields.some(sf => sf.code === 'a' && sf.value.includes(substring));\n}\n\n\n// These three functions below all refer to field 500:\nexport function fieldRefersToKoneellisestiTuotettuTietue(field) {\n return containsSubstringInSubfieldA(field, 'Koneellisesti tuotettu tietue');\n}\n\n\nexport function fieldRefersToTarkistettuEnnakkotieto(field) {\n return containsSubstringInSubfieldA(field, 'TARKISTETTU ENNAKKOTIETO');\n}\n\n\nexport function fieldRefersToEnnakkotieto(field) {\n // NB! This no longer matches 'TARKISTETTU ENNAKKOTIETO' case! Bug or Feature?\n if (containsSubstringInSubfieldA(field, 'ENNAKKOTIETO') && !fieldRefersToTarkistettuEnnakkotieto(field)) {\n return true;\n }\n // MRA-420: \"EI VIELÄ ILMESTYNYT\" is a Helmet note, that is semantically similar to ENNAKKOTIETO:\n return containsSubstringInSubfieldA(field, 'EI VIELÄ ILMESTYNYT');\n}\n\n\nexport function firstFieldHasBetterPrepubEncodingLevel(field1, field2) {\n if (fieldRefersToKoneellisestiTuotettuTietue(field2)) {\n return false;\n }\n if (fieldRefersToKoneellisestiTuotettuTietue(field1)) {\n return true;\n }\n if (fieldRefersToTarkistettuEnnakkotieto(field2)) {\n return false;\n }\n if (fieldRefersToTarkistettuEnnakkotieto(field1)) {\n return true;\n }\n if (fieldRefersToEnnakkotieto(field2)) {\n return false;\n }\n if (fieldRefersToEnnakkotieto(field1)) {\n return true;\n }\n return false;\n}\n\n\n/*\nfunction hasEnnakkotietoSubfield(field) {\n return field.subfields.some(sf => ['g', '9'].includes(sf.code) && sf.value.includes('ENNAKKOTIETO'));\n}\n*/\n\n/*\nexport function isPrepublicationField6XX(field) {\n if (!field.tag.match(/^6(?:[0-4][0-9]|5[0-5])$/u)) { // Not within 600 ... 655 range\n return false;\n }\n return field.subfields.some(sf => hasEnnakkotietoSubfield(sf));\n}\n*/\n\n\nexport function getRelevant5XXFields(record, f500 = false, f594 = false) {\n const cands = actualGetFields();\n //nvdebugFieldArray(cands, 'gR5XXa: ', debugDev);\n const filtered = cands.filter(field => hasRelevantPrepubData(field));\n //nvdebugFieldArray(filtered, 'gR5XXb: ', debugDev);\n return filtered;\n\n //return actualGetFields().filter(field => hasRelevantPrepubData(field));\n\n function hasRelevantPrepubData(field) {\n // Check prepub ($a):\n if (!fieldRefersToKoneellisestiTuotettuTietue(field) && !fieldRefersToTarkistettuEnnakkotieto(field) && !fieldRefersToEnnakkotieto(field)) {\n return false;\n }\n // Check relevance (594$5):\n if (field.tag === '500') {\n return field.subfields.every(sf => sf.code !== '5'); //true;\n }\n return field.subfields.some(sf => sf.code === '5' && ['FENNI', 'FIKKA', 'VIOLA'].includes(sf.value));\n }\n\n function actualGetFields() {\n if (f500 && f594) {\n return record.get(/^(?:500|594)$/u);\n }\n if (f500) {\n return record.get(/^500$/u);\n }\n if (f594) {\n return record.get(/^594$/u);\n }\n return [];\n }\n\n}\n\n\n// Very similar to getPrepublicationLevel() in melinda-record-match-validator's getPrepublicationLevel()...\n// We should use that and not have a copy here...\nexport function getPrepublicationLevel(record, f500 = false, f594 = false) {\n // Smaller return value is better\n const fields = getRelevant5XXFields(record, f500, f594);\n\n if (!fields) {\n return null;\n }\n if (fields.some(f => fieldRefersToKoneellisestiTuotettuTietue(f))) {\n return KONEELLISESTI_TUOTETTU_TIETUE;\n }\n\n if (fields.some(f => fieldRefersToTarkistettuEnnakkotieto(f))) {\n return TARKISTETTU_ENNAKKOTIETO;\n }\n\n if (fields.some(f => fieldRefersToEnnakkotieto(f))) {\n return ENNAKKOTIETO;\n }\n\n return null;\n}\n\n\nexport function baseHasEqualOrHigherEncodingLevel(baseEncodingLevel, sourceEncodingLevel) {\n const baseIndex = encodingLevelPreferenceArray.indexOf(baseEncodingLevel);\n const sourceIndex = encodingLevelPreferenceArray.indexOf(sourceEncodingLevel);\n\n if (baseIndex === -1) {\n // Base wins if both are bad:\n return sourceIndex === -1;\n }\n return baseIndex <= sourceIndex;\n}\n\n\nfunction hasFikkaLOW(record) {\n return record.fields.some(field => field.tag === 'LOW' && fieldHasSubfield(field, 'a', 'FIKKA'));\n}\n\n\nfunction hasNatLibFi042(record) {\n return record.fields.some(field => field.tag === '042' && (fieldHasSubfield(field, 'a', 'finb') || fieldHasSubfield(field, 'a', 'finbd')));\n}\n\n\nexport function isFikkaRecord(record) {\n // NB! Does not include Humaniora. Pienpainatteet (not that they'd have duplicates)?\n return hasFikkaLOW(record) && hasNatLibFi042(record);\n}\n\n\nexport function getEncodingLevel(record) {\n return record.leader.substring(17, 18);\n}\n\n\nexport function deleteAllPrepublicationNotesFromField500InNonPubRecord(record) {\n const encodingLevel = getEncodingLevel(record);\n // Skip prepublication (or theoretically even worse) records:\n if (!encodingLevelIsBetterThanPrepublication(encodingLevel)) {\n //if (['2', '8'].includes(encodingLevel)) { // MET-306: added '2' here\n return;\n }\n\n // MET-306: keep \"koneellisesti tuotettu tietue\" if encoding level is '2':\n const f500 = getRelevant5XXFields(record, true, false).filter(field => encodingLevel === '2' ? !fieldRefersToKoneellisestiTuotettuTietue(field) : true);\n if (f500.length === 0) {\n return;\n }\n\n\n nvdebug(`Delete all ${f500.length} instance(s) of field 500`, debugDev);\n f500.forEach(field => record.removeField(field));\n}\n\n\nexport function removeWorsePrepubField500s(record) {\n // Remove lower-level entries:\n const fields = getRelevant5XXFields(record, true, false); // 500=false, 594=true\n nvdebugFieldArray(fields, ' Candidates for non-best 500 b4 filtering: ', debugDev);\n const nonBest = fields.filter(field => fields.some(field2 => firstFieldHasBetterPrepubEncodingLevel(field2, field)));\n nvdebugFieldArray(nonBest, ' Remove non-best 500: ', debugDev);\n nonBest.forEach(field => record.removeField(field));\n}\n\n\nexport function removeWorsePrepubField594s(record) {\n // Remove lower-level entries:\n const fields594 = getRelevant5XXFields(record, false, true); // 500=false, 594=true\n nvdebugFieldArray(fields594, ' Candidates for non-best 594 b4 filtering: ', debugDev);\n const nonBest = fields594.filter(field => fields594.some(field2 => firstFieldHasBetterPrepubEncodingLevel(field2, field)));\n nvdebugFieldArray(nonBest, ' Remove non-best 594: ', debugDev);\n nonBest.forEach(field => record.removeField(field));\n}\n\n\nexport function isEnnakkotietoSubfield(subfield) {\n if (subfield.code !== '9' && subfield.code !== 'g') {\n return false;\n }\n // Length <= 13 allows punctuation, but does not require it:\n if (subfield.value.substr(0, 12) === 'ENNAKKOTIETO' && subfield.value.length <= 13) {\n return true;\n }\n return false;\n}\n\nexport function isEnnakkotietoField(field) {\n return field.subfields.some(sf => isEnnakkotietoSubfield(sf));\n}\n\nexport function isKingOfTheHill(field, opposingFields) {\n // Field is no better than at least one of the opposing fields\n return opposingFields.every(opposingField => firstFieldHasBetterPrepubEncodingLevel(field, opposingField));\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_marcRecord","require","_debug","_interopRequireDefault","_rules","obj","__esModule","default","debug","createDebug","cloneDeep","field","r","MarcRecord","appendField","get","tag","_default","readPunctuationRulesFromJSON","recordType","json","getRules","rules","filter","row","selector","map","namePortion","description","portion","preceedingPunctuation","exceptions","RegExp","replace","trim","autRules","bibRules","fieldToString","subfields","ind1","ind2","subfield","code","value","join","validateField","element","testField","JSON","stringify","punctuated","punctuateField","isEqual","rulesForField","getRulesForField","length","currentPortion","preceedingField","inNamePortion","sub","getPortion","forEach","includes","addSubfieldPunctuation","addNamePortionPunctuation","rule","test","undefined","toUpperCase","preceedingSubfield","subfieldContainsPunctuation","nextValue","currentSubfield","punctType","getPrecedingPunctuation","exceptionsFunctions","getExceptions","isExceptionCase","some","fn","endsInPunctuation","slice","punct","Error","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"sources":["../../src/punctuation/index.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebug from 'debug';\nimport {autRules, bibRules} from './rules';\n\nconst debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation:dev');\n\nfunction cloneDeep(field) {\n const r = new MarcRecord();\n r.appendField(field);\n return r.get(field.tag)?.[0];\n}\n\nexport default function () {\n function readPunctuationRulesFromJSON(recordType) {\n const json = getRules(recordType);\n const rules = json.filter(row => row.selector !== '').map(row => {\n const {selector, namePortion, description, portion, preceedingPunctuation, exceptions} = row;\n return {\n selector: new RegExp(selector.replace(/X/ug, '.'), 'u'),\n namePortion: namePortion.replace(/\\$/ug, '').trim(),\n description, portion, preceedingPunctuation, exceptions\n };\n });\n\n return rules;\n }\n\n function getRules(recordType) {\n if (recordType === 'z') {\n return autRules;\n }\n\n return bibRules;\n }\n\n function fieldToString(field) {\n if (field && field.subfields) {\n const ind1 = field.ind1 || ' ';\n const ind2 = field.ind2 || ' ';\n const subfields = field.subfields.map(subfield => `‡${subfield.code}${subfield.value}`).join('');\n return `${field.tag} ${ind1}${ind2} ${subfields}`;\n }\n\n return `${field.tag} ${field.value}`;\n }\n\n function validateField(recordType = 'a') {\n return function (element) {\n const testField = cloneDeep(element);\n debug(`Original field: ${JSON.stringify(element)}`);\n const punctuated = punctuateField(testField, recordType);\n debug(`Punctuation result: ${JSON.stringify(punctuated)}`);\n if (!punctuated) {\n debug('No punctuation result -> true');\n return true;\n }\n\n if (MarcRecord.isEqual(punctuated, element)) {\n debug(`Original field (element): ${JSON.stringify(element)}`);\n debug('Punctuation result equals original field');\n return true;\n }\n\n return false;\n };\n }\n\n function punctuateField(field, recordType) {\n const rules = readPunctuationRulesFromJSON(recordType);\n debug(`Handling field ${field.tag}`);\n debug(`Field contents: ${fieldToString(field)}`);\n const rulesForField = getRulesForField(field.tag, rules);\n if (rulesForField.length === 0) {\n debug(`No matching rules for field ${field.tag}`);\n return;\n }\n\n let currentPortion; // eslint-disable-line functional/no-let\n let preceedingField; // eslint-disable-line functional/no-let\n let inNamePortion = true; // eslint-disable-line functional/no-let\n\n debug(`Field subfields: ${field.subfields.map(sub => sub.code)}`);\n debug(`Field portions: ${field.subfields.map(sub => getPortion(sub, rulesForField))}`);\n\n field.subfields.forEach(subfield => {\n debug(`Handling subfield ${subfield.code}`);\n let portion = getPortion(subfield, rulesForField); // eslint-disable-line functional/no-let\n\n if (portion === false) {\n return;\n }\n\n if (portion === 'CF' || portion === 'NC') {\n return;\n }\n\n if (inNamePortion && portion.includes('T', 'S')) { // eslint-disable-line functional/no-conditional-statements\n debug(`Portion changed to ${portion}. Not in name portion anymore`);\n inNamePortion = false;\n }\n\n if (inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\n portion = 'T';\n }\n\n debug(`Current portion is ${portion}.`);\n\n if (currentPortion) {\n if (currentPortion === portion) { // eslint-disable-line functional/no-conditional-statements\n debug(`Current stayed as ${portion}. Adding punctuation for subfield.`);\n addSubfieldPunctuation(preceedingField, subfield, rulesForField);\n } else {\n debug(`Current portion changed to ${portion}.`);\n if (portion !== 'S') { // eslint-disable-line functional/no-conditional-statements\n debug('Adding punctuation for portion.');\n addNamePortionPunctuation(preceedingField);\n }\n }\n }\n\n currentPortion = portion;\n preceedingField = subfield;\n });\n\n if (recordType !== 'z') { // eslint-disable-line functional/no-conditional-statements\n addNamePortionPunctuation(preceedingField);\n }\n\n debug(`After punctuation: ${fieldToString(field)}`);\n\n return field;\n }\n\n function getRulesForField(tag, rules) {\n return rules.filter(rule => rule.selector.test(tag));\n }\n\n function getPortion(subfield, rules) {\n debug(`Looking for namePortion for ${subfield.code}`);\n const [portion] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.portion);\n\n if (portion === undefined) {\n return false;\n }\n\n return portion.toUpperCase();\n }\n\n function addNamePortionPunctuation(preceedingSubfield) {\n const subfieldContainsPunctuation = (/[?\")\\].\\-!,]$/u).test(preceedingSubfield.value);\n if (!subfieldContainsPunctuation) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function addSubfieldPunctuation(preceedingSubfield, currentSubfield, rules) {\n const punctType = getPrecedingPunctuation(currentSubfield, rules);\n const exceptionsFunctions = getExceptions(currentSubfield, rules);\n\n const isExceptionCase = exceptionsFunctions.some(fn => fn(preceedingSubfield));\n\n if (isExceptionCase) {\n return;\n }\n\n const endsInPunctuation = (/[?\")\\]\\-!,]$/u).test(preceedingSubfield.value);\n debug(`addSubfieldPunctuation -- punctType: ${punctType} endsInPunctuation: ${endsInPunctuation}`);\n\n if (!endsInPunctuation) {\n if (punctType === 'PERIOD' && !(/\\.$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'COMMA') {\n if (!(/,$/u).test(preceedingSubfield.value)) {\n if (!(/^[[(]/u).test(currentSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n }\n\n if (punctType === 'COND_COMMA') {\n if (!(/[-,]$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'SPACECOLON') {\n if (!(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n if ((/[^ ]:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value.slice(0, -1)} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n }\n\n debug('addSubfieldPunctuation -- end');\n }\n\n function getPrecedingPunctuation(subfield, rules) {\n const [punct] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.preceedingPunctuation);\n\n if (punct === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return punct.toUpperCase();\n }\n\n function getExceptions(subfield, rules) {\n const [exception] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => parseExceptions(rule.exceptions));\n\n if (exception === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return exception;\n }\n\n function parseExceptions(expectionsString) {\n const exceptionRules = expectionsString.split('\\n');\n const exceptionFuncs = [];\n\n exceptionRules.forEach(exceptionRule => {\n const match = (/- (.*) if preceded by (.*)/u).exec(exceptionRule); // eslint-disable-line prefer-named-capture-group\n if (match) { // eslint-disable-line functional/no-conditional-statements\n const [, type, preceededCode] = match;\n const normalizedType = type.trim().toUpperCase().trim();\n const normalizedCode = preceededCode.replace(/\\$/ug, '').trim();\n exceptionFuncs.push(ifPrecededByException(normalizedCode, normalizedType)); // eslint-disable-line functional/immutable-data\n }\n });\n\n return exceptionFuncs;\n }\n\n function ifPrecededByException(code, type) {\n return preceedingSubfield => {\n if (code === preceedingSubfield.code) {\n debug(`Adding ${type} to ${preceedingSubfield.code}`);\n if (type === 'SEMICOLON' && !(/;$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} ;`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n if (type === 'COLON' && !(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n return true;\n }\n\n return false;\n };\n }\n\n function validate(record) {\n return {valid: record.fields.every(validateField(record.leader[6]))};\n }\n\n function fix(record) {\n record.fields.map(field => punctuateField(field, record.leader[6]));\n return true;\n }\n\n return {\n description: 'Fixes punctuation of fields',\n validate,\n fix\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_marcRecord","require","_debug","_interopRequireDefault","_rules","obj","__esModule","default","debug","createDebug","cloneDeep","field","r","MarcRecord","appendField","get","tag","_default","readPunctuationRulesFromJSON","recordType","json","getRules","rules","filter","row","selector","map","namePortion","description","portion","preceedingPunctuation","exceptions","RegExp","replace","trim","autRules","bibRules","fieldToString","subfields","ind1","ind2","subfield","code","value","join","validateField","element","testField","JSON","stringify","punctuated","punctuateField","isEqual","rulesForField","getRulesForField","length","currentPortion","preceedingField","inNamePortion","sub","getPortion","forEach","includes","addSubfieldPunctuation","addNamePortionPunctuation","rule","test","undefined","toUpperCase","preceedingSubfield","subfieldContainsPunctuation","nextValue","currentSubfield","punctType","getPrecedingPunctuation","exceptionsFunctions","getExceptions","isExceptionCase","some","fn","endsInPunctuation","slice","punct","Error","exception","parseExceptions","expectionsString","exceptionRules","split","exceptionFuncs","exceptionRule","match","exec","type","preceededCode","normalizedType","normalizedCode","push","ifPrecededByException","validate","record","valid","fields","every","leader","fix"],"sources":["../../src/punctuation/index.js"],"sourcesContent":["import {MarcRecord} from '@natlibfi/marc-record';\nimport createDebug from 'debug';\nimport {autRules, bibRules} from './rules';\n\nconst debug = createDebug('@natlibfi/marc-record-validator-melinda/punctuation:dev');\n\nfunction cloneDeep(field) {\n const r = new MarcRecord();\n r.appendField(field);\n return r.get(field.tag)?.[0];\n}\n\nexport default function () {\n function readPunctuationRulesFromJSON(recordType) {\n const json = getRules(recordType);\n const rules = json.filter(row => row.selector !== '').map(row => {\n const {selector, namePortion, description, portion, preceedingPunctuation, exceptions} = row;\n return {\n selector: new RegExp(selector.replace(/X/ug, '.'), 'u'),\n namePortion: namePortion.replace(/\\$/ug, '').trim(),\n description, portion, preceedingPunctuation, exceptions\n };\n });\n\n return rules;\n }\n\n function getRules(recordType) {\n if (recordType === 'z') {\n return autRules;\n }\n\n return bibRules;\n }\n\n function fieldToString(field) {\n if (field && field.subfields) {\n const ind1 = field.ind1 || ' ';\n const ind2 = field.ind2 || ' ';\n const subfields = field.subfields.map(subfield => `‡${subfield.code}${subfield.value}`).join('');\n return `${field.tag} ${ind1}${ind2} ${subfields}`;\n }\n\n return `${field.tag} ${field.value}`;\n }\n\n function validateField(recordType = 'a') {\n return function (element) {\n const testField = cloneDeep(element);\n debug(`Original field: ${JSON.stringify(element)}`);\n const punctuated = punctuateField(testField, recordType);\n debug(`Punctuation result: ${JSON.stringify(punctuated)}`);\n if (!punctuated) {\n debug('No punctuation result -> true');\n return true;\n }\n\n if (MarcRecord.isEqual(punctuated, element)) {\n debug(`Original field (element): ${JSON.stringify(element)}`);\n debug('Punctuation result equals original field');\n return true;\n }\n\n return false;\n };\n }\n\n function punctuateField(field, recordType) {\n const rules = readPunctuationRulesFromJSON(recordType);\n debug(`Handling field ${field.tag}`);\n debug(`Field contents: ${fieldToString(field)}`);\n const rulesForField = getRulesForField(field.tag, rules);\n if (rulesForField.length === 0) {\n debug(`No matching rules for field ${field.tag}`);\n return;\n }\n\n let currentPortion; // eslint-disable-line functional/no-let\n let preceedingField; // eslint-disable-line functional/no-let\n let inNamePortion = true; // eslint-disable-line functional/no-let\n\n debug(`Field subfields: ${field.subfields.map(sub => sub.code)}`);\n debug(`Field portions: ${field.subfields.map(sub => getPortion(sub, rulesForField))}`);\n\n field.subfields.forEach(subfield => {\n debug(`Handling subfield ${subfield.code}`);\n let portion = getPortion(subfield, rulesForField); // eslint-disable-line functional/no-let\n\n if (portion === false) {\n return;\n }\n\n if (portion === 'CF' || portion === 'NC') {\n return;\n }\n\n if (inNamePortion && portion.includes('T', 'S')) { // eslint-disable-line functional/no-conditional-statements\n debug(`Portion changed to ${portion}. Not in name portion anymore`);\n inNamePortion = false;\n }\n\n if (inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\n portion = 'N';\n }\n\n if (!inNamePortion && portion === 'NT') { // eslint-disable-line functional/no-conditional-statements\n portion = 'T';\n }\n\n debug(`Current portion is ${portion}.`);\n\n if (currentPortion) {\n if (currentPortion === portion) { // eslint-disable-line functional/no-conditional-statements\n debug(`Current stayed as ${portion}. Adding punctuation for subfield.`);\n addSubfieldPunctuation(preceedingField, subfield, rulesForField);\n } else {\n debug(`Current portion changed to ${portion}.`);\n if (portion !== 'S') { // eslint-disable-line functional/no-conditional-statements\n debug('Adding punctuation for portion.');\n addNamePortionPunctuation(preceedingField);\n }\n }\n }\n\n currentPortion = portion;\n preceedingField = subfield;\n });\n\n if (recordType !== 'z') { // eslint-disable-line functional/no-conditional-statements\n addNamePortionPunctuation(preceedingField);\n }\n\n debug(`After punctuation: ${fieldToString(field)}`);\n\n return field;\n }\n\n function getRulesForField(tag, rules) {\n return rules.filter(rule => rule.selector.test(tag));\n }\n\n function getPortion(subfield, rules) {\n debug(`Looking for namePortion for ${subfield.code}`);\n const [portion] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.portion);\n\n if (portion === undefined) {\n return false;\n }\n\n return portion.toUpperCase();\n }\n\n function addNamePortionPunctuation(preceedingSubfield) {\n const subfieldContainsPunctuation = (/[?\")\\].\\-!,]$/u).test(preceedingSubfield.value);\n if (!subfieldContainsPunctuation) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n function addSubfieldPunctuation(preceedingSubfield, currentSubfield, rules) {\n const punctType = getPrecedingPunctuation(currentSubfield, rules);\n const exceptionsFunctions = getExceptions(currentSubfield, rules);\n\n const isExceptionCase = exceptionsFunctions.some(fn => fn(preceedingSubfield));\n\n if (isExceptionCase) {\n return;\n }\n\n const endsInPunctuation = (/[?\")\\]\\-!,]$/u).test(preceedingSubfield.value);\n debug(`addSubfieldPunctuation -- punctType: ${punctType} endsInPunctuation: ${endsInPunctuation}`);\n\n if (!endsInPunctuation) {\n if (punctType === 'PERIOD' && !(/\\.$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value}.`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'COMMA') {\n if (!(/,$/u).test(preceedingSubfield.value)) {\n if (!(/^[[(]/u).test(currentSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n }\n\n if (punctType === 'COND_COMMA') {\n if (!(/[-,]$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value},`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n }\n\n if (punctType === 'SPACECOLON') {\n if (!(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n if ((/[^ ]:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value.slice(0, -1)} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n }\n\n debug('addSubfieldPunctuation -- end');\n }\n\n function getPrecedingPunctuation(subfield, rules) {\n const [punct] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => rule.preceedingPunctuation);\n\n if (punct === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return punct.toUpperCase();\n }\n\n function getExceptions(subfield, rules) {\n const [exception] = rules.filter(rule => rule.namePortion === subfield.code).map(rule => parseExceptions(rule.exceptions));\n\n if (exception === undefined) {\n throw new Error(`Unknown subfield code ${subfield.code}`);\n }\n\n return exception;\n }\n\n function parseExceptions(expectionsString) {\n const exceptionRules = expectionsString.split('\\n');\n const exceptionFuncs = [];\n\n exceptionRules.forEach(exceptionRule => {\n const match = (/- (.*) if preceded by (.*)/u).exec(exceptionRule); // eslint-disable-line prefer-named-capture-group\n if (match) { // eslint-disable-line functional/no-conditional-statements\n const [, type, preceededCode] = match;\n const normalizedType = type.trim().toUpperCase().trim();\n const normalizedCode = preceededCode.replace(/\\$/ug, '').trim();\n exceptionFuncs.push(ifPrecededByException(normalizedCode, normalizedType)); // eslint-disable-line functional/immutable-data\n }\n });\n\n return exceptionFuncs;\n }\n\n function ifPrecededByException(code, type) {\n return preceedingSubfield => {\n if (code === preceedingSubfield.code) {\n debug(`Adding ${type} to ${preceedingSubfield.code}`);\n if (type === 'SEMICOLON' && !(/;$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} ;`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n if (type === 'COLON' && !(/:$/u).test(preceedingSubfield.value)) { // eslint-disable-line functional/no-conditional-statements\n const nextValue = `${preceedingSubfield.value} :`;\n debug(`Updated subfield ${preceedingSubfield.code} from '${preceedingSubfield.value}' to '${nextValue}'`);\n preceedingSubfield.value = nextValue; // eslint-disable-line functional/immutable-data\n }\n\n return true;\n }\n\n return false;\n };\n }\n\n function validate(record) {\n return {valid: record.fields.every(validateField(record.leader[6]))};\n }\n\n function fix(record) {\n record.fields.map(field => punctuateField(field, record.leader[6]));\n return true;\n }\n\n return {\n description: 'Fixes punctuation of fields',\n validate,\n fix\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"aut.js","names":["autRules","selector","namePortion","description","portion","preceedingPunctuation","exceptions","_default","exports","default"],"sources":["../../../src/punctuation/rules/aut.js"],"sourcesContent":["const autRules =\n[\n {\n selector: '[1457]00',\n namePortion: '$a',\n description: 'Personal name (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]10',\n namePortion: '$a',\n description: 'Corporate name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$a',\n description: 'Meeting name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$b',\n description: 'Numeration (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]10',\n namePortion: '$b',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$c',\n description: 'Titles and words associated with a name (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$c',\n description: 'Location of meeting (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $d\\n- semicolon if preceded by $c'\n },\n {\n selector: '[1457]00',\n namePortion: '$d',\n description: 'Dates associated with a name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $n'\n },\n {\n selector: '[1457]11',\n namePortion: '$d',\n description: 'Date of meeting (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$e',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'cond_comma',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$e',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$j',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$j',\n description: 'Attribution qualifier (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$q',\n description: 'Fuller form of name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$q',\n description: 'Name of meeting following jurisdiction name entry element (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|11)',\n namePortion: '$u',\n description: 'Affiliation (NR)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '?'\n },\n {\n selector: '[1457]10',\n namePortion: '$u',\n description: 'Affiliation (NR) or Address',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '- period, if address'\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$4',\n description: 'Relator code (R)',\n portion: 'NC',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$f',\n description: 'Date of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$h',\n description: 'Medium (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[457](00|10|11)',\n namePortion: '$i',\n description: 'Relationship information (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$k',\n description: 'Form subheading (R)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$l',\n description: 'Language of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma / period',\n exceptions: '- Finnish MARC21 comma,\\n- MARC21 period'\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$m',\n description: 'Medium of performance for music',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$n',\n description: 'Number of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period',\n exceptions: ' - depends on data?\\n- period, if preceded by $k, $m, $t\\n- comma, if preceded by $b, $m'\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$o',\n description: 'Arranged statement for music (NR)',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$p',\n description: 'Name of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period, none',\n exceptions: '- depends on data?\\n- period if preceded by $t, $n, $p\\n- comma, if preceded by $n\\n- none, if preceded by $k'\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$r',\n description: 'Key for music (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$s',\n description: 'Version (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$t',\n description: 'Title of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'none',\n exceptions: '- usually first in section -> period'\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$d',\n description: 'Date of meeting or treaty signing (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$g',\n description: 'Miscellaneous information (NR)',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: '- colon, if preceded by $d'\n },\n {\n selector: '[1457]10',\n namePortion: '$g',\n description: 'Miscellaneous information (NR), other party to treaties.',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: '- colon, if preceded by $d\\n- period, if preceded by $t'\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$n',\n description: 'Number of part/section/meeting (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$v',\n description: 'Form subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$x',\n description: 'General subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$y',\n description: 'Chronological subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$z',\n description: 'Geographic subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[457](00|10|11)',\n namePortion: '$w',\n description: '',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$0',\n description: 'Authority record control number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '7(00|10|11)',\n namePortion: '$2',\n description: 'Source of heading or term (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$5',\n description: 'Institution to which field applies (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$6',\n description: 'Linkage (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$7',\n description: 'Control subfield (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$8',\n description: 'Field link and sequence number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$9',\n description: 'Local control subfield',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n }\n];\nexport default autRules;\n"],"mappings":"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"}
1
+ {"version":3,"file":"aut.js","names":["autRules","selector","namePortion","description","portion","preceedingPunctuation","exceptions","_default","exports","default"],"sources":["../../../src/punctuation/rules/aut.js"],"sourcesContent":["const autRules =\n[\n {\n selector: '[1457]00',\n namePortion: '$a',\n description: 'Personal name (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]10',\n namePortion: '$a',\n description: 'Corporate name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$a',\n description: 'Meeting name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$b',\n description: 'Numeration (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457]10',\n namePortion: '$b',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$c',\n description: 'Titles and words associated with a name (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$c',\n description: 'Location of meeting (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $d\\n- semicolon if preceded by $c'\n },\n {\n selector: '[1457]00',\n namePortion: '$d',\n description: 'Dates associated with a name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $n'\n },\n {\n selector: '[1457]11',\n namePortion: '$d',\n description: 'Date of meeting (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$e',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'cond_comma',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$e',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$j',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$j',\n description: 'Attribution qualifier (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]00',\n namePortion: '$q',\n description: 'Fuller form of name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457]11',\n namePortion: '$q',\n description: 'Name of meeting following jurisdiction name entry element (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|11)',\n namePortion: '$u',\n description: 'Affiliation (NR)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '?'\n },\n {\n selector: '[1457]10',\n namePortion: '$u',\n description: 'Affiliation (NR) or Address',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '- period, if address'\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$4',\n description: 'Relator code (R)',\n portion: 'NC',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$f',\n description: 'Date of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$h',\n description: 'Medium (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[457](00|10|11)',\n namePortion: '$i',\n description: 'Relationship information (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$k',\n description: 'Form subheading (R)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$l',\n description: 'Language of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma / period',\n exceptions: '- Finnish MARC21 comma,\\n- MARC21 period'\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$m',\n description: 'Medium of performance for music',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$n',\n description: 'Number of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period',\n exceptions: ' - depends on data?\\n- period, if preceded by $k, $m, $t\\n- comma, if preceded by $b, $m'\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$o',\n description: 'Arranged statement for music (NR)',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$p',\n description: 'Name of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period, none',\n exceptions: '- depends on data?\\n- period if preceded by $t, $n, $p\\n- comma, if preceded by $n\\n- none, if preceded by $k'\n },\n {\n selector: '[1457](00|10)',\n namePortion: '$r',\n description: 'Key for music (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$s',\n description: 'Version (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$t',\n description: 'Title of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'none',\n exceptions: '- usually first in section -> period'\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$d',\n description: 'Date of meeting or treaty signing (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$g',\n description: 'Miscellaneous information (NR)',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: '- colon, if preceded by $d'\n },\n {\n selector: '[1457]10',\n namePortion: '$g',\n description: 'Miscellaneous information (NR), other party to treaties.',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: '- colon, if preceded by $d\\n- period, if preceded by $t'\n },\n {\n selector: '[1457](10|11)',\n namePortion: '$n',\n description: 'Number of part/section/meeting (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$v',\n description: 'Form subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$x',\n description: 'General subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$y',\n description: 'Chronological subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$z',\n description: 'Geographic subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[457](00|10|11)',\n namePortion: '$w',\n description: '',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$0',\n description: 'Authority record control number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '7(00|10|11)',\n namePortion: '$2',\n description: 'Source of heading or term (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$5',\n description: 'Institution to which field applies (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$6',\n description: 'Linkage (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$7',\n description: 'Control subfield (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$8',\n description: 'Field link and sequence number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1457](00|10|11)',\n namePortion: '$9',\n description: 'Local control subfield',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n }\n];\nexport default autRules;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"bib.js","names":["bibRules","selector","namePortion","description","portion","preceedingPunctuation","exceptions","_default","exports","default"],"sources":["../../../src/punctuation/rules/bib.js"],"sourcesContent":["const bibRules =\n[\n {\n selector: '[1678]00',\n namePortion: '$a',\n description: 'Personal name (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$a',\n description: 'Corporate name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$a',\n description: 'Meeting name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '264',\n namePortion: '$a',\n description: 'Place of producer, publisher, distributor, manufacturer (R)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$b',\n description: 'Numeration (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$b',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '264',\n namePortion: '$b',\n description: 'Name of producer, publisher, distributor, manufacturer (R)',\n portion: 'N',\n preceedingPunctuation: 'spacecolon',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$c',\n description: 'Titles and words associated with a name (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678](10|11)',\n namePortion: '$c',\n description: 'Location of meeting (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $d\\n- semicolon if preceded by $c'\n },\n {\n selector: '264',\n namePortion: '$c',\n description: 'Date of production, publication, distribution, manufacture, or copyright notice (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$d',\n description: 'Dates associated with a name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $n'\n },\n {\n selector: '[1678]11',\n namePortion: '$d',\n description: 'Date of meeting (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678](00|10)',\n namePortion: '$e',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'cond_comma',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$e',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$j',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$j',\n description: 'Attribution qualifier (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$q',\n description: 'Fuller form of name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$q',\n description: 'Name of meeting following jurisdiction name entry element (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678](00|11)',\n namePortion: '$u',\n description: 'Affiliation (NR)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '?'\n },\n {\n selector: '[1678]10',\n namePortion: '$u',\n description: 'Affiliation (NR) or Address',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '- period, if address'\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$4',\n description: 'Relator code (R)',\n portion: 'NC',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$f',\n description: 'Date of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$h',\n description: 'Medium (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '7(00|10|11)',\n namePortion: '$i',\n description: 'Relationship information [700] (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$k',\n description: 'Form subheading (R)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$l',\n description: 'Language of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma / period',\n exceptions: '- Finnish MARC21 comma,\\n- MARC21 period'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$m',\n description: 'Medium of performance for music (R) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$n',\n description: 'Number of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period',\n exceptions: ' - depends on data?\\n- period, if preceded by $k, $m, $t\\n- comma, if preceded by $b, $m'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$o',\n description: 'Arranged statement for music (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$p',\n description: 'Name of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period, none',\n exceptions: '- depends on data?\\n- period if preceded by $t, $n, $p\\n- comma, if preceded by $n\\n- none, if preceded by $k'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$r',\n description: 'Key for music (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$s',\n description: 'Version (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$t',\n description: 'Title of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'none',\n exceptions: '- usually first in section -> period'\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$v',\n description: 'Volume/sequential designation (NR) [800]',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[78](00|10|11)',\n namePortion: '$x',\n description: 'International Standard Serial Number (NR) [700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$d',\n description: 'Date of meeting or treaty signing (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678][10]0',\n namePortion: '$g',\n description: 'Miscellaneous information (NR)',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: ' - colon, if preceded by $d'\n },\n {\n selector: '[1678]10',\n namePortion: '$g',\n description: ' Miscellaneous information (NR), other party to treaties.',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: ' - colon, if preceded by $d\\n- period, if preceded by $t'\n },\n {\n selector: '[1678]1[01]',\n namePortion: '$n',\n description: 'Number of part/section/meeting (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$v',\n description: 'Form subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$x',\n description: 'General subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$y',\n description: 'Chronological subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$z',\n description: 'Geographic subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$w',\n description: 'Bibliographic record control number (R) [800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$0',\n description: 'Authority record control number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$2',\n description: 'Source of heading or term (NR) [600]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$3',\n description: 'Materials specified (NR) [600/700/800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[78](00|10|11)',\n namePortion: '$5',\n description: 'Institution to which field applies (NR) [700/800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$6',\n description: 'Linkage (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$7',\n description: 'Control subfield (NR) [800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$8',\n description: 'Field link and sequence number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$9',\n description: 'Local control subfield',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n }\n];\nexport default bibRules;\n"],"mappings":"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"}
1
+ {"version":3,"file":"bib.js","names":["bibRules","selector","namePortion","description","portion","preceedingPunctuation","exceptions","_default","exports","default"],"sources":["../../../src/punctuation/rules/bib.js"],"sourcesContent":["const bibRules =\n[\n {\n selector: '[1678]00',\n namePortion: '$a',\n description: 'Personal name (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$a',\n description: 'Corporate name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$a',\n description: 'Meeting name or jurisdiction name as entry element (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '264',\n namePortion: '$a',\n description: 'Place of producer, publisher, distributor, manufacturer (R)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$b',\n description: 'Numeration (NR)',\n portion: 'N',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$b',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '264',\n namePortion: '$b',\n description: 'Name of producer, publisher, distributor, manufacturer (R)',\n portion: 'N',\n preceedingPunctuation: 'spacecolon',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$c',\n description: 'Titles and words associated with a name (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678](10|11)',\n namePortion: '$c',\n description: 'Location of meeting (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $d\\n- semicolon if preceded by $c'\n },\n {\n selector: '264',\n namePortion: '$c',\n description: 'Date of production, publication, distribution, manufacture, or copyright notice (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$d',\n description: 'Dates associated with a name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: '- colon if preceded by $n'\n },\n {\n selector: '[1678]11',\n namePortion: '$d',\n description: 'Date of meeting (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678](00|10)',\n namePortion: '$e',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'cond_comma',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$e',\n description: 'Subordinate unit (R)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$j',\n description: 'Relator term (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$j',\n description: 'Attribution qualifier (R)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]00',\n namePortion: '$q',\n description: 'Fuller form of name (NR)',\n portion: 'N',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678]11',\n namePortion: '$q',\n description: 'Name of meeting following jurisdiction name entry element (NR)',\n portion: 'N',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678](00|11)',\n namePortion: '$u',\n description: 'Affiliation (NR)',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '?'\n },\n {\n selector: '[1678]10',\n namePortion: '$u',\n description: 'Affiliation (NR) or Address',\n portion: 'N',\n preceedingPunctuation: 'period',\n exceptions: '- period, if address'\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$4',\n description: 'Relator code (R)',\n portion: 'NC',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$f',\n description: 'Date of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$h',\n description: 'Medium (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '7(00|10|11)',\n namePortion: '$i',\n description: 'Relationship information [700] (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$k',\n description: 'Form subheading (R)',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$l',\n description: 'Language of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'comma / period',\n exceptions: '- Finnish MARC21 comma,\\n- MARC21 period'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$m',\n description: 'Medium of performance for music (R) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$n',\n description: 'Number of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period',\n exceptions: ' - depends on data?\\n- period, if preceded by $k, $m, $t\\n- comma, if preceded by $b, $m'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$o',\n description: 'Arranged statement for music (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$p',\n description: 'Name of part/section of a work (R)',\n portion: 'T',\n preceedingPunctuation: 'comma, period, none',\n exceptions: '- depends on data?\\n- period if preceded by $t, $n, $p\\n- comma, if preceded by $n\\n- none, if preceded by $k'\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$r',\n description: 'Key for music (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'comma',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$s',\n description: 'Version (NR) [600/700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$t',\n description: 'Title of a work (NR)',\n portion: 'T',\n preceedingPunctuation: 'none',\n exceptions: '- usually first in section -> period'\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$v',\n description: 'Volume/sequential designation (NR) [800]',\n portion: 'T',\n preceedingPunctuation: 'semicolon',\n exceptions: ''\n },\n {\n selector: '[78](00|10|11)',\n namePortion: '$x',\n description: 'International Standard Serial Number (NR) [700/800]',\n portion: 'T',\n preceedingPunctuation: 'period',\n exceptions: ''\n },\n {\n selector: '[1678]10',\n namePortion: '$d',\n description: 'Date of meeting or treaty signing (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '[1678][10]0',\n namePortion: '$g',\n description: 'Miscellaneous information (NR)',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: ' - colon, if preceded by $d'\n },\n {\n selector: '[1678]10',\n namePortion: '$g',\n description: ' Miscellaneous information (NR), other party to treaties.',\n portion: 'NT',\n preceedingPunctuation: 'comma',\n exceptions: ' - colon, if preceded by $d\\n- period, if preceded by $t'\n },\n {\n selector: '[1678]1[01]',\n namePortion: '$n',\n description: 'Number of part/section/meeting (R)',\n portion: 'NT',\n preceedingPunctuation: '',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$v',\n description: 'Form subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$x',\n description: 'General subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$y',\n description: 'Chronological subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$z',\n description: 'Geographic subdivision (R) [600]',\n portion: 'S',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$w',\n description: 'Bibliographic record control number (R) [800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$0',\n description: 'Authority record control number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '6(00|10|11)',\n namePortion: '$2',\n description: 'Source of heading or term (NR) [600]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[678](00|10|11)',\n namePortion: '$3',\n description: 'Materials specified (NR) [600/700/800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[78](00|10|11)',\n namePortion: '$5',\n description: 'Institution to which field applies (NR) [700/800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$6',\n description: 'Linkage (NR)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '8(00|10|11)',\n namePortion: '$7',\n description: 'Control subfield (NR) [800]',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$8',\n description: 'Field link and sequence number (R)',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n },\n {\n selector: '[1678](00|10|11)',\n namePortion: '$9',\n description: 'Local control subfield',\n portion: 'cf',\n preceedingPunctuation: 'none',\n exceptions: ''\n }\n];\nexport default bibRules;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_bib","_interopRequireDefault","require","_aut","obj","__esModule","default"],"sources":["../../../src/punctuation/rules/index.js"],"sourcesContent":["import bibRules from './bib';\nimport autRules from './aut';\n\nexport {\n bibRules,\n autRules\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA6B,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA"}
1
+ {"version":3,"file":"index.js","names":["_bib","_interopRequireDefault","require","_aut","obj","__esModule","default"],"sources":["../../../src/punctuation/rules/index.js"],"sourcesContent":["import bibRules from './bib';\nimport autRules from './aut';\n\nexport {\n bibRules,\n autRules\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AAA6B,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"punctuation.spec.js","names":["_chai","require","_marcRecord","_punctuation","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/punctuation.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './punctuation/';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'punctuation'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,CAAC;EACvDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,2DAA2D,CAAC;AAE5F,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC"}
1
+ {"version":3,"file":"punctuation.spec.js","names":["_chai","require","_marcRecord","_punctuation","_interopRequireDefault","_fixura","_fixugen","_debug","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","enabled","fix","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/punctuation.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './punctuation/';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'punctuation'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, enabled = true, fix = false}) {\n if (enabled === false) {\n debug('TEST SKIPPED!');\n return;\n }\n\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AACA,IAAAM,MAAA,GAAAH,sBAAA,CAAAH,OAAA;AAAsC,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtC,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,aAAa,CAAC;EACvDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AACF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,2DAA2D,CAAC;AAE5F,eAAeF,oBAAoBA,CAAA,EAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQA,CAAC;EAAC2B,UAAU;EAAEC,OAAO,GAAG,IAAI;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EACjE,IAAID,OAAO,KAAK,KAAK,EAAE;IACrBhB,KAAK,CAAC,eAAe,CAAC;IACtB;EACF;EAEA,MAAME,SAAS,GAAG,MAAM,IAAAC,oBAAgB,EAAC,CAAC;EAC1C,MAAMe,MAAM,GAAG,IAAIC,sBAAU,CAACJ,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMK,cAAc,GAAGL,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACE,GAAG,EAAE;IACR,MAAMI,MAAM,GAAG,MAAMnB,SAAS,CAACY,QAAQ,CAACI,MAAM,CAAC;IAC/C,IAAAd,YAAM,EAACiB,MAAM,CAAC,CAAChB,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMlB,SAAS,CAACe,GAAG,CAACC,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}