@natlibfi/marc-record-validators-melinda 11.2.2-alpha.2 → 11.3.0-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.
- package/dist/cyrillux-usemarcon-replacement.js +5 -2
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
- package/dist/cyrillux.js +197 -0
- package/dist/cyrillux.js.map +1 -0
- package/dist/cyrillux.spec.js +46 -0
- package/dist/cyrillux.spec.js.map +1 -0
- package/dist/fix-33X.js +23 -2
- package/dist/fix-33X.js.map +1 -1
- package/dist/fixRelatorTerms.js +5 -1
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/subfield6Utils.js +4 -1
- package/dist/subfield6Utils.js.map +1 -1
- package/dist/utils.js +15 -0
- package/dist/utils.js.map +1 -1
- package/package.json +9 -6
- package/src/cyrillux-usemarcon-replacement.js +6 -4
- package/src/cyrillux.js +173 -0
- package/src/cyrillux.spec.js +46 -0
- package/src/fix-33X.js +18 -2
- package/src/fixRelatorTerms.js +5 -2
- package/src/index.js +2 -0
- package/src/subfield6Utils.js +4 -3
- package/src/utils.js +13 -0
- package/test-fixtures/cyrillux/f01/expectedResult.json +23 -0
- package/test-fixtures/cyrillux/f01/metadata.json +5 -0
- package/test-fixtures/cyrillux/f01/record.json +8 -0
- package/test-fixtures/cyrillux/f02/expectedResult.json +30 -0
- package/test-fixtures/cyrillux/f02/metadata.json +10 -0
- package/test-fixtures/cyrillux/f02/record.json +14 -0
- package/test-fixtures/cyrillux/f03/expectedResult.json +13 -0
- package/test-fixtures/cyrillux/f03/metadata.json +10 -0
- package/test-fixtures/cyrillux/f03/record.json +11 -0
- package/test-fixtures/cyrillux/f04/expectedResult.json +13 -0
- package/test-fixtures/cyrillux/f04/metadata.json +10 -0
- package/test-fixtures/cyrillux/f04/record.json +11 -0
- package/test-fixtures/cyrillux/f05/expectedResult.json +20 -0
- package/test-fixtures/cyrillux/f05/metadata.json +5 -0
- package/test-fixtures/cyrillux/f05/record.json +18 -0
- package/test-fixtures/cyrillux/v01/expectedResult.json +7 -0
- package/test-fixtures/cyrillux/v01/metadata.json +5 -0
- package/test-fixtures/cyrillux/v01/record.json +8 -0
- package/test-fixtures/cyrillux/v02/expectedResult.json +5 -0
- package/test-fixtures/cyrillux/v02/metadata.json +5 -0
- package/test-fixtures/cyrillux/v02/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f15/expectedResult.json +38 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f15/metadata.json +5 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f15/record.json +35 -0
- package/test-fixtures/fix-relator-terms/f03/expectedResult.json +15 -0
- package/test-fixtures/fix-relator-terms/f03/metadata.json +5 -0
- package/test-fixtures/fix-relator-terms/f03/record.json +14 -0
- package/test-fixtures/sort-fields/12/input.json +60 -0
- package/test-fixtures/sort-fields/12/metadata.json +5 -0
- package/test-fixtures/sort-fields/12/result.json +61 -0
|
@@ -59,12 +59,15 @@ function _default() {
|
|
|
59
59
|
if (isAlephRecord(record)) {
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
+
|
|
62
63
|
// Update LDR/17 to '4'
|
|
63
64
|
record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data
|
|
64
65
|
|
|
65
66
|
// Remove unwanted fields:
|
|
66
67
|
record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data
|
|
67
68
|
|
|
69
|
+
(0, _utils.removeSubfield)(record, '020', 'c');
|
|
70
|
+
|
|
68
71
|
// Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)
|
|
69
72
|
record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data
|
|
70
73
|
|
|
@@ -123,12 +126,12 @@ function _default() {
|
|
|
123
126
|
const f028 = record.fields.filter(f => f.tag === '028');
|
|
124
127
|
f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
|
|
125
128
|
(0, _addMissingField.default)().fix(record);
|
|
126
|
-
(0, _fixRelatorTerms.default)().fix(record);
|
|
127
129
|
}
|
|
128
130
|
function realFixAll2(record) {
|
|
129
131
|
(0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
|
|
130
132
|
|
|
131
133
|
// Cyrillux specific code might change 040$b and thus affect these rules:
|
|
134
|
+
(0, _fixRelatorTerms.default)().fix(record);
|
|
132
135
|
(0, _fix33X.default)().fix(record); // 33X$a => 33X$a$b$2
|
|
133
136
|
(0, _addMissingField2.default)().fix(record);
|
|
134
137
|
(0, _addMissingField3.default)().fix(record);
|
|
@@ -172,7 +175,7 @@ function _default() {
|
|
|
172
175
|
}
|
|
173
176
|
}
|
|
174
177
|
function fixField040(record) {
|
|
175
|
-
const f040 = record.
|
|
178
|
+
const f040 = record.get('040');
|
|
176
179
|
const subfieldsBE = [{
|
|
177
180
|
code: 'b',
|
|
178
181
|
value: 'mul'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","fixRelatorTerms","realFixAll2","fixQualifyingInformation","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields]; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n add041().fix(record);\n\n fixRelatorTerms().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.fields.filter(f => f.tag === '040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d\\]?) с\\./gui, '$1 sivua'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d) см/gui, '$1 cm'). // eslint-disable-line prefer-named-capture-group\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_addMissingField4","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","e","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","realFixNonAleph","isAlephRecord","leader","substring","fields","filter","f","includes","tag","removeSubfield","subfields","some","sf","code","value","fieldSpecificStuff","field","rest","undefined","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixField040","fieldSpecificStuff2","removeSubfieldH","field100eKirjoittaja","fieldHasSubfield","isBK","sortAdjacentSubfields","field260To264s","field410To490And810","field440To490And830","realFixAll1","fixLeader","fixCountryCodes","fixLanguageCodes","recordRemoveValuelessSubfields","f028","forEach","add041","realFixAll2","fixQualifyingInformation","fixRelatorTerms","fix33X","add336","add337","add338","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","get","subfieldsBE","length","data","ind1","ind2","insertField","fixField040Subfields","push","match","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add041} from './addMissingField041';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n// import createDebugLogger from 'debug';\nimport {fieldHasSubfield, nvdebug, recordRemoveValuelessSubfields, recordToString, removeSubfield} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\n// 017, 044... et al are LL additions from 2019 (via USEMARCON-RDA)\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '017', '019', '025', '029', '032', '035', '036', '037', '038', '042', '044', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '751', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFixNonAleph(record) {\n if (isAlephRecord(record)) {\n return;\n }\n\n // Update LDR/17 to '4'\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n removeSubfield(record, '020', 'c');\n\n // Remove 084 fields that don't have $2 ykl (based on USEMARCON-RDA/bw_rda_kyril.rul code by LL 2019)\n record.fields = record.fields.filter(f => f.tag !== '084' || f.subfields.some(sf => sf.code === '2' && sf.value === 'ykl')); // eslint-disable-line functional/immutable-data\n\n fieldSpecificStuff(record.fields);\n\n function fieldSpecificStuff(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n\n return fieldSpecificStuff(rest);\n }\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fieldSpecificStuff2(record.fields);\n\n function fieldSpecificStuff2(fields) {\n const [field, ...rest] = fields;\n\n if (field === undefined) {\n return;\n }\n\n removeSubfieldH(field); // NB! Do this only after 33X creation, as 245$h might be useful there!\n\n field100eKirjoittaja(field);\n\n function field100eKirjoittaja(f) { // LL 2019 USEMARCON-RDA rule\n if (f.tag === '100' && !fieldHasSubfield(f, 'e') && record.isBK()) {\n f.subfields = [{code: 'e', value: 'kirjoittaja.'}, ...f.subfields]; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(f);\n // Punctuation will be done later on...\n return;\n }\n }\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n return fieldSpecificStuff2(rest);\n }\n\n }\n\n function realFixAll1(record) {\n fixLeader(record); // Fix defaults, esp. LDR/18=i\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n recordRemoveValuelessSubfields(record);\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n add041().fix(record);\n\n }\n\n function realFixAll2(record) {\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Cyrillux specific code might change 040$b and thus affect these rules:\n fixRelatorTerms().fix(record);\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n // The fixer below implements Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n }\n\n function realFix(record) {\n realFixAll1(record);\n\n realFixNonAleph(record);\n\n realFixAll2(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.get('040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n if (!field.tag.match(/^(?:240|65[0135]|[1678](?:00|10|11|30))$/u)) {\n return;\n }\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\nfunction isAlephRecord(record) {\n // Records that are already in Aleph are not processed as aggressively as genuinely new ones:\n return record.fields.some(field => ['CAT', 'LKR', 'LOW', 'SID'].includes(field.tag));\n}\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\b1 hr\\./gui, '1 hour').\n replace(/\\bhr\\./gui, 'hours').\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bpdf\\b/gui, 'PDF').\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some col[s.])\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bbilaga\\b/gui, 'liite').\n replace(/\\bbilagor\\b/gui, 'liitettä').\n // https://github.com/NatLibFi/USEMARCON-BOOKWHERE-RDA/blob/master/bw_rda_kyril.rul#L365\n replace(/(\\b1\\]?) с\\./gui, '$1 sivu'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d\\]?) с\\./gui, '$1 sivua'). // eslint-disable-line prefer-named-capture-group\n replace(/(\\d) см/gui, '$1 cm'). // eslint-disable-line prefer-named-capture-group\n\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace(/\\bcirca\\b/gui, 'noin').\n replace(/coil[- ]?bound/gui, 'kierreselkä').\n replace('color illustrations', 'värikuvitus').\n replace(/comb[- ]?bound/gui, 'kierreselkä').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace('(flera nummersviter)', '(useita numerointijaksoja)').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bfärgillustratione[nr]\\b/gui, 'värikuvitus').\n replace(/\\bhard(?:back|cover)\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace(/\\bi flera nummersviter/gui, 'useina numerointijaksoina').\n replace('illustrated', 'kuvitettu').\n replace(/illustrations?\\b/gui, 'kuvitettu'). // Based on usemacron-bookwhere (NB! usemarcon-cyrillux had kuvitus/kuvitettu)\n replace(/\\binbunden\\b/gui, 'kovakantinen'). // swe\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace(/\\bin various pagings/gui, 'useina numerointijaksoina').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bljudskiva\\b/gui, 'äänilevy').\n replace(/\\bljudskivor\\b/gui, 'äänilevyä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('mjuka pärmar', 'pehmeäkantinen').\n replace('online resource', 'verkkoaineisto').\n replace('onlineresurs', 'verkkoaineisto').\n replace('onumrerade', 'numeroimatonta').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bSeiten\\b/gu, 'sivua').\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace(/sound disc\\b/gui, 'äänilevy').\n replace(/(?:spiral[- ]?bound|spiralrygg)/gui, 'kierreselkä').\n replace('svartvit', 'mustavalkoinen').\n replace('unnumbered', 'numeroimatonta').\n replace('(various pagings)', '(useita numerointijaksoja)').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/cyrillux.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _clone = _interopRequireDefault(require("clone"));
|
|
8
|
+
var _utils = require("./utils");
|
|
9
|
+
var iso9 = _interopRequireWildcard(require("iso9_1995"));
|
|
10
|
+
var _subfield6Utils = require("./subfield6Utils");
|
|
11
|
+
var _xregexp = _interopRequireDefault(require("xregexp"));
|
|
12
|
+
var sfs4900 = _interopRequireWildcard(require("sfs4900"));
|
|
13
|
+
var _sortFields = _interopRequireDefault(require("./sortFields"));
|
|
14
|
+
var _reindexSubfield6OccurenceNumbers = _interopRequireDefault(require("./reindexSubfield6OccurenceNumbers"));
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
+
//import createDebugLogger from 'debug';
|
|
19
|
+
|
|
20
|
+
function _default(config = {}) {
|
|
21
|
+
return {
|
|
22
|
+
description: 'Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)',
|
|
23
|
+
validate,
|
|
24
|
+
fix
|
|
25
|
+
};
|
|
26
|
+
function preprocessConfig() {
|
|
27
|
+
config.doISO9Transliteration = typeof config.doISO9Transliteration === 'undefined' ? true : config.doISO9Transliteration; // eslint-disable-line functional/immutable-data
|
|
28
|
+
config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === 'undefined' ? true : config.doSFS4900Transliteration; // eslint-disable-line functional/immutable-data
|
|
29
|
+
}
|
|
30
|
+
function fix(record) {
|
|
31
|
+
// Fix always succeeds
|
|
32
|
+
const res = {
|
|
33
|
+
message: [],
|
|
34
|
+
fix: [],
|
|
35
|
+
valid: true
|
|
36
|
+
};
|
|
37
|
+
preprocessConfig(config);
|
|
38
|
+
const nBefore = record.fields.length;
|
|
39
|
+
record.fields = processFields(record.fields); // eslint-disable-line functional/immutable-data
|
|
40
|
+
|
|
41
|
+
if (nBefore < record.fields.length) {
|
|
42
|
+
// eslint-disable-line functional/no-conditional-statements
|
|
43
|
+
(0, _reindexSubfield6OccurenceNumbers.default)().fix(record);
|
|
44
|
+
(0, _sortFields.default)().fix(record);
|
|
45
|
+
}
|
|
46
|
+
function processFields(input, output = []) {
|
|
47
|
+
const [currField, ...remainingInput] = input;
|
|
48
|
+
if (!currField) {
|
|
49
|
+
return output;
|
|
50
|
+
}
|
|
51
|
+
const fakeRecord = {
|
|
52
|
+
fields: output
|
|
53
|
+
};
|
|
54
|
+
const createdMax = (0, _subfield6Utils.recordGetMaxSubfield6OccurrenceNumberAsInteger)(fakeRecord);
|
|
55
|
+
const result = processField(currField, record, createdMax);
|
|
56
|
+
return processFields(remainingInput, [...output, ...result]);
|
|
57
|
+
}
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
function validate(record) {
|
|
61
|
+
const res = {
|
|
62
|
+
message: [],
|
|
63
|
+
valid: true
|
|
64
|
+
};
|
|
65
|
+
preprocessConfig(config);
|
|
66
|
+
record.fields?.forEach(field => {
|
|
67
|
+
validateField(field, res, record);
|
|
68
|
+
});
|
|
69
|
+
res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
|
|
70
|
+
return res;
|
|
71
|
+
}
|
|
72
|
+
function validateField(field, res, record) {
|
|
73
|
+
const orig = (0, _utils.fieldToString)(field);
|
|
74
|
+
const normalizedFields = processField((0, _clone.default)(field), record);
|
|
75
|
+
const mod = (0, _utils.fieldsToString)(normalizedFields).replace(/\t__SEPARATOR__\t/ug, ', ').replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, ' $1-NN'); // eslint-disable-line prefer-named-capture-group
|
|
76
|
+
if (orig !== mod) {
|
|
77
|
+
// Fail as the input is "broken"/"crap"/sumthing
|
|
78
|
+
res.message.push(`CHANGE: ${orig} => ${mod}`); // eslint-disable-line functional/immutable-data
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
function isCyrillicCharacter(char) {
|
|
84
|
+
return (0, _xregexp.default)('[\\p{Cyrillic}]').test(char); // eslint-disable-line new-cap
|
|
85
|
+
}
|
|
86
|
+
function containsCyrillicCharacters(str) {
|
|
87
|
+
// from melinda-ui-cyrillux
|
|
88
|
+
if (!str) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return str.split('').some(isCyrillicCharacter);
|
|
92
|
+
}
|
|
93
|
+
function fieldContainsCyrillicCharacters(field) {
|
|
94
|
+
// based on melinda-ui-cyrillux
|
|
95
|
+
return field.subfields && field.subfields.some(sf => subfieldShouldTransliterateToIso9(sf));
|
|
96
|
+
}
|
|
97
|
+
function subfieldShouldTransliterateToIso9(subfield) {
|
|
98
|
+
if ((0, _utils.isControlSubfieldCode)(subfield.code)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return containsCyrillicCharacters(subfield.value);
|
|
102
|
+
}
|
|
103
|
+
function fieldShouldTransliterateToIso9(field) {
|
|
104
|
+
// Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well)
|
|
105
|
+
if (['336', '337', '338', '880'].includes(field.tag)) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
// Skip control fields and fields that already have a translitteration
|
|
109
|
+
if (!field.subfields || field.subfields.some(sf => sf.code === '6')) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
return fieldContainsCyrillicCharacters(field);
|
|
113
|
+
}
|
|
114
|
+
function mapSubfieldToIso9(subfield) {
|
|
115
|
+
const value = subfieldShouldTransliterateToIso9(subfield) ? iso9.convertToLatin(subfield.value) : subfield.value;
|
|
116
|
+
return {
|
|
117
|
+
code: subfield.code,
|
|
118
|
+
value
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
function mapSubfieldToSfs4900(subfield) {
|
|
122
|
+
const value = subfieldShouldTransliterateToIso9(subfield) ? sfs4900.convertToLatin(subfield.value).result : subfield.value;
|
|
123
|
+
return {
|
|
124
|
+
code: subfield.code,
|
|
125
|
+
value
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function mapFieldToIso9(field, occurrenceNumber) {
|
|
129
|
+
const subfield6 = {
|
|
130
|
+
code: '6',
|
|
131
|
+
value: `880-${occurrenceNumber}`
|
|
132
|
+
};
|
|
133
|
+
const subfield9 = {
|
|
134
|
+
code: '9',
|
|
135
|
+
value: 'ISO9 <TRANS>'
|
|
136
|
+
};
|
|
137
|
+
const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));
|
|
138
|
+
if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {
|
|
139
|
+
// Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either
|
|
140
|
+
return {
|
|
141
|
+
tag: field.tag,
|
|
142
|
+
ind1: field.ind1,
|
|
143
|
+
ind2: field.ind2,
|
|
144
|
+
subfields
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
tag: field.tag,
|
|
149
|
+
ind1: field.ind1,
|
|
150
|
+
ind2: field.ind2,
|
|
151
|
+
subfields: [subfield6, ...subfields, subfield9]
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function mapFieldToCyrillicField880(field, occurrenceNumber) {
|
|
155
|
+
const subfields = [{
|
|
156
|
+
code: '6',
|
|
157
|
+
value: `${field.tag}-${occurrenceNumber}`
|
|
158
|
+
}, ...field.subfields.map(sf => (0, _clone.default)(sf)), {
|
|
159
|
+
code: '9',
|
|
160
|
+
value: 'CYRILLIC <TRANS>'
|
|
161
|
+
}];
|
|
162
|
+
return {
|
|
163
|
+
tag: '880',
|
|
164
|
+
ind1: field.ind1,
|
|
165
|
+
ind2: field.ind2,
|
|
166
|
+
subfields
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function mapFieldToSfs4900Field880(field, occurrenceNumber) {
|
|
170
|
+
const subfields = [{
|
|
171
|
+
code: '6',
|
|
172
|
+
value: `${field.tag}-${occurrenceNumber}`
|
|
173
|
+
}, ...field.subfields.map(sf => mapSubfieldToSfs4900(sf)), {
|
|
174
|
+
code: '9',
|
|
175
|
+
value: 'SFS4900 <TRANS>'
|
|
176
|
+
}];
|
|
177
|
+
return {
|
|
178
|
+
tag: '880',
|
|
179
|
+
ind1: field.ind1,
|
|
180
|
+
ind2: field.ind2,
|
|
181
|
+
subfields
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {
|
|
185
|
+
if (!fieldShouldTransliterateToIso9(originalField)) {
|
|
186
|
+
return [originalField];
|
|
187
|
+
}
|
|
188
|
+
const newOccurrenceNumberAsInt = maxCreatedOccurrenceNumber ? maxCreatedOccurrenceNumber + 1 : (0, _subfield6Utils.recordGetMaxSubfield6OccurrenceNumberAsInteger)(record) + 1;
|
|
189
|
+
const newOccurrenceNumberAsString = (0, _subfield6Utils.intToOccurrenceNumberString)(newOccurrenceNumberAsInt);
|
|
190
|
+
const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9
|
|
191
|
+
const newCyrillicField = config.doISO9Transliteration ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC
|
|
192
|
+
const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900Field880(originalField, newOccurrenceNumberAsString) : undefined; /// SFS-4900
|
|
193
|
+
|
|
194
|
+
return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=cyrillux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cyrillux.js","names":["_clone","_interopRequireDefault","require","_utils","iso9","_interopRequireWildcard","_subfield6Utils","_xregexp","sfs4900","_sortFields","_reindexSubfield6OccurenceNumbers","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_default","config","description","validate","fix","preprocessConfig","doISO9Transliteration","doSFS4900Transliteration","record","res","message","valid","nBefore","fields","length","processFields","reindexSubfield6OccurenceNumbers","sortFields","input","output","currField","remainingInput","fakeRecord","createdMax","recordGetMaxSubfield6OccurrenceNumberAsInteger","result","processField","forEach","field","validateField","orig","fieldToString","normalizedFields","clone","mod","fieldsToString","replace","push","isCyrillicCharacter","char","XRegExp","test","containsCyrillicCharacters","str","split","some","fieldContainsCyrillicCharacters","subfields","sf","subfieldShouldTransliterateToIso9","subfield","isControlSubfieldCode","code","value","fieldShouldTransliterateToIso9","includes","tag","mapSubfieldToIso9","convertToLatin","mapSubfieldToSfs4900","mapFieldToIso9","occurrenceNumber","subfield6","subfield9","map","ind1","ind2","mapFieldToCyrillicField880","mapFieldToSfs4900Field880","originalField","maxCreatedOccurrenceNumber","newOccurrenceNumberAsInt","newOccurrenceNumberAsString","intToOccurrenceNumberString","newMainField","newCyrillicField","undefined","newSFS4900Field","filter","f"],"sources":["../src/cyrillux.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport clone from 'clone';\nimport {fieldToString, fieldsToString, isControlSubfieldCode} from './utils';\nimport * as iso9 from 'iso9_1995';\nimport {intToOccurrenceNumberString, recordGetMaxSubfield6OccurrenceNumberAsInteger} from './subfield6Utils';\n\nimport XRegExp from 'xregexp';\nimport * as sfs4900 from 'sfs4900';\nimport {default as sortFields} from './sortFields';\nimport {default as reindexSubfield6OccurenceNumbers} from './reindexSubfield6OccurenceNumbers';\n\nexport default function (config = {}) {\n\n return {\n description: 'Cyrillux functionality: convert original field to latinitsa (ISO-9) and add 880s for original cyrillic and latinitsa (SFS-4900)',\n validate, fix\n };\n\n function preprocessConfig() {\n config.doISO9Transliteration = typeof config.doISO9Transliteration === 'undefined' ? true : config.doISO9Transliteration; // eslint-disable-line functional/immutable-data\n config.doSFS4900Transliteration = typeof config.doSFS4900Transliteration === 'undefined' ? true : config.doSFS4900Transliteration; // eslint-disable-line functional/immutable-data\n }\n\n function fix(record) {\n // Fix always succeeds\n const res = {message: [], fix: [], valid: true};\n\n preprocessConfig(config);\n\n const nBefore = record.fields.length;\n\n record.fields = processFields(record.fields); // eslint-disable-line functional/immutable-data\n\n if (nBefore < record.fields.length) { // eslint-disable-line functional/no-conditional-statements\n reindexSubfield6OccurenceNumbers().fix(record);\n sortFields().fix(record);\n }\n\n function processFields(input, output = []) {\n const [currField, ...remainingInput] = input;\n if (!currField) {\n return output;\n }\n\n const fakeRecord = {fields: output};\n const createdMax = recordGetMaxSubfield6OccurrenceNumberAsInteger(fakeRecord);\n const result = processField(currField, record, createdMax);\n\n return processFields(remainingInput, [...output, ...result]);\n }\n\n return res;\n }\n\n function validate(record) {\n const res = {message: [], valid: true};\n\n preprocessConfig(config);\n\n record.fields?.forEach(field => {\n validateField(field, res, record);\n });\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function validateField(field, res, record) {\n const orig = fieldToString(field);\n\n const normalizedFields = processField(clone(field), record);\n const mod = fieldsToString(normalizedFields).replace(/\\t__SEPARATOR__\\t/ug, ', ').replace(/ (‡6 [0-9][0-9][0-9])-[0-9][0-9]+/gu, ' $1-NN'); // eslint-disable-line prefer-named-capture-group\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`CHANGE: ${orig} => ${mod}`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n\n function isCyrillicCharacter(char) {\n return XRegExp('[\\\\p{Cyrillic}]').test(char); // eslint-disable-line new-cap\n }\n\n function containsCyrillicCharacters(str) { // from melinda-ui-cyrillux\n if (!str) {\n return false;\n }\n return str.split('').some(isCyrillicCharacter);\n }\n\n function fieldContainsCyrillicCharacters(field) { // based on melinda-ui-cyrillux\n return field.subfields && field.subfields.some(sf => subfieldShouldTransliterateToIso9(sf));\n }\n\n function subfieldShouldTransliterateToIso9(subfield) {\n if (isControlSubfieldCode(subfield.code)) {\n return false;\n }\n return containsCyrillicCharacters(subfield.value);\n }\n\n function fieldShouldTransliterateToIso9(field) {\n // Skip certain tags ('880' is the actual skip-me beef here, but we have seen other no-nos as well)\n if (['336', '337', '338', '880'].includes(field.tag)) {\n return false;\n }\n // Skip control fields and fields that already have a translitteration\n if (!field.subfields || field.subfields.some(sf => sf.code === '6')) {\n return false;\n }\n return fieldContainsCyrillicCharacters(field);\n }\n\n function mapSubfieldToIso9(subfield) {\n const value = subfieldShouldTransliterateToIso9(subfield) ? iso9.convertToLatin(subfield.value) : subfield.value;\n return {code: subfield.code, value};\n }\n\n function mapSubfieldToSfs4900(subfield) {\n const value = subfieldShouldTransliterateToIso9(subfield) ? sfs4900.convertToLatin(subfield.value).result : subfield.value;\n return {code: subfield.code, value};\n }\n\n\n function mapFieldToIso9(field, occurrenceNumber) {\n const subfield6 = {code: '6', value: `880-${occurrenceNumber}`};\n const subfield9 = {code: '9', value: 'ISO9 <TRANS>'};\n\n const subfields = field.subfields.map(sf => mapSubfieldToIso9(sf));\n\n if (!config.doISO9Transliteration && !config.doSFS4900Transliteration) {\n // Just converts the field to ISO-9 latinitsa, does not create any field-880s, so don't bother with $6 or $9 either\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields};\n }\n\n return {tag: field.tag, ind1: field.ind1, ind2: field.ind2, subfields: [subfield6, ...subfields, subfield9]};\n }\n\n function mapFieldToCyrillicField880(field, occurrenceNumber) {\n const subfields = [\n {code: '6', value: `${field.tag}-${occurrenceNumber}`},\n ...field.subfields.map(sf => clone(sf)),\n {code: '9', value: 'CYRILLIC <TRANS>'}\n ];\n\n return {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n }\n\n function mapFieldToSfs4900Field880(field, occurrenceNumber) {\n\n const subfields = [\n {code: '6', value: `${field.tag}-${occurrenceNumber}`},\n ...field.subfields.map(sf => mapSubfieldToSfs4900(sf)),\n {code: '9', value: 'SFS4900 <TRANS>'}\n ];\n\n return {tag: '880', ind1: field.ind1, ind2: field.ind2, subfields};\n }\n\n function processField(originalField, record, maxCreatedOccurrenceNumber = 0) {\n if (!fieldShouldTransliterateToIso9(originalField)) {\n return [originalField];\n }\n const newOccurrenceNumberAsInt = maxCreatedOccurrenceNumber ? maxCreatedOccurrenceNumber + 1 : recordGetMaxSubfield6OccurrenceNumberAsInteger(record) + 1;\n const newOccurrenceNumberAsString = intToOccurrenceNumberString(newOccurrenceNumberAsInt);\n\n const newMainField = mapFieldToIso9(originalField, newOccurrenceNumberAsString); // ISO-9\n const newCyrillicField = config.doISO9Transliteration ? mapFieldToCyrillicField880(originalField, newOccurrenceNumberAsString) : undefined; // CYRILLIC\n const newSFS4900Field = config.doSFS4900Transliteration ? mapFieldToSfs4900Field880(originalField, newOccurrenceNumberAsString) : undefined; /// SFS-4900\n\n return [newMainField, newCyrillicField, newSFS4900Field].filter(f => f);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chai = require("chai");
|
|
4
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
|
+
var _cyrillux = _interopRequireDefault(require("./cyrillux"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
(0, _fixugen.default)({
|
|
10
|
+
callback,
|
|
11
|
+
path: [__dirname, '..', 'test-fixtures', 'cyrillux'],
|
|
12
|
+
useMetadataFile: true,
|
|
13
|
+
recurse: false,
|
|
14
|
+
fixura: {
|
|
15
|
+
reader: _fixura.READERS.JSON
|
|
16
|
+
},
|
|
17
|
+
mocha: {
|
|
18
|
+
before: () => testValidatorFactory()
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
async function testValidatorFactory() {
|
|
22
|
+
const validator = await (0, _cyrillux.default)();
|
|
23
|
+
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
24
|
+
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
25
|
+
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
26
|
+
(0, _chai.expect)(validator.fix).to.be.a('function');
|
|
27
|
+
}
|
|
28
|
+
async function callback({
|
|
29
|
+
getFixture,
|
|
30
|
+
fix = false,
|
|
31
|
+
config = {}
|
|
32
|
+
}) {
|
|
33
|
+
const validator = await (0, _cyrillux.default)(config);
|
|
34
|
+
const record = new _marcRecord.MarcRecord(getFixture('record.json'));
|
|
35
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
36
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
37
|
+
|
|
38
|
+
if (!fix) {
|
|
39
|
+
const result = await validator.validate(record);
|
|
40
|
+
(0, _chai.expect)(result).to.eql(expectedResult);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
await validator.fix(record);
|
|
44
|
+
(0, _chai.expect)(record).to.eql(expectedResult);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=cyrillux.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cyrillux.spec.js","names":["_chai","require","_marcRecord","_cyrillux","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","config","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/cyrillux.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './cyrillux';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'cyrillux'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false, config = {}}) {\n const validator = await validatorFactory(config);\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,SAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC;EACpDC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,iBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG,KAAK;EAAEE,MAAM,GAAG,CAAC;AAAC,CAAC,EAAE;EAC9D,MAAMf,SAAS,GAAG,MAAM,IAAAC,iBAAgB,EAACc,MAAM,CAAC;EAChD,MAAMC,MAAM,GAAG,IAAIC,sBAAU,CAACH,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMI,cAAc,GAAGJ,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMM,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,CAACa,GAAG,CAACG,MAAM,CAAC;EAC3B,IAAAd,YAAM,EAACc,MAAM,CAAC,CAACb,EAAE,CAACiB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
|
package/dist/fix-33X.js
CHANGED
|
@@ -153,7 +153,20 @@ const map336 = {
|
|
|
153
153
|
'unbewegtes Bild': 'sti',
|
|
154
154
|
'unspecified': 'zzz',
|
|
155
155
|
'Ääni': 'snd',
|
|
156
|
-
'ääni': 'snd'
|
|
156
|
+
'ääni': 'snd',
|
|
157
|
+
'Электронная программа': 'cop',
|
|
158
|
+
// computer program
|
|
159
|
+
'Изображение (картографическое)': 'cri',
|
|
160
|
+
'Музыка (знаковая)': 'ntm',
|
|
161
|
+
// notated music
|
|
162
|
+
'Музыка (исполнительская)': 'prm',
|
|
163
|
+
// performed music
|
|
164
|
+
'Устная речь': 'spw',
|
|
165
|
+
'Изображение (неподвижное)': 'sti',
|
|
166
|
+
'Изображение (движущееся)': 'tdi',
|
|
167
|
+
// 2D moving image
|
|
168
|
+
'Текст': 'txt',
|
|
169
|
+
'Текст (визуальный)': 'txt'
|
|
157
170
|
};
|
|
158
171
|
const map337 = {
|
|
159
172
|
'Computermedien': 'c',
|
|
@@ -199,7 +212,15 @@ const map337 = {
|
|
|
199
212
|
'unspecified': 'z',
|
|
200
213
|
'useita mediatyyppejä': 'z',
|
|
201
214
|
'video': 'v',
|
|
202
|
-
'övrig': 'x'
|
|
215
|
+
'övrig': 'x',
|
|
216
|
+
// Cyrillic (sorted by result):
|
|
217
|
+
'электронн': 'c',
|
|
218
|
+
'электронный': 'c',
|
|
219
|
+
'непосредственн': 'n',
|
|
220
|
+
'непосредственный': 'n',
|
|
221
|
+
'аудио': 's',
|
|
222
|
+
// audio
|
|
223
|
+
'видео': 'v'
|
|
203
224
|
};
|
|
204
225
|
const map338 = {
|
|
205
226
|
'aperture card': 'ha',
|