NatLibFi/marc-record-validators-melinda

View on GitHub
src/field33XUtils.js

Summary

Maintainability
A
2 hrs
Test Coverage

export const field336Mappings = [
  {'code': 'crd', 'fin': 'kartografinen data', 'swe': 'kartografisk data', 'eng': 'cartographic dataset'},
  {'code': 'cri', 'fin': 'kartografinen kuva', 'swe': 'kartografisk bild', 'eng': 'cartographic image'},
  {'code': 'crm', 'fin': 'kartografinen liikkuva kuva', 'swe': 'kartografisk rörlig bild', 'eng': 'cartographic moving image'},
  {'code': 'crt', 'fin': 'kartografinen taktiili kuva', 'swe': 'kartografisk taktil bild', 'eng': 'cartographic tactile image'},
  {'code': 'crn', 'fin': 'kartografinen taktiili kolmiulotteinen muoto', 'swe': 'kartografisk taktil tredimensionell form', 'eng': 'cartographic tactile three-dimensional form'},
  {'code': 'crf', 'fin': 'kartografinen kolmiulotteinen muoto', 'swe': 'kartografisk tredimensionell form', 'eng': 'cartographic three-dimensional form'},
  {'code': 'cod', 'fin': 'digitaalinen data', 'swe': 'digitalt dataset', 'eng': 'computer dataset'},
  {'code': 'cop', 'fin': 'tietokoneohjelma', 'swe': 'datorprogram', 'eng': 'computer program'},
  {'code': 'ntv', 'fin': 'liikenotaatio', 'swe': 'rörelsenotation', 'eng': 'notated movement'},
  {'code': 'ntm', 'fin': 'nuottikirjoitus', 'swe': 'noterad musik', 'eng': 'notated music'},
  {'code': 'prm', 'fin': 'esitetty musiikki', 'swe': 'framförd musik', 'eng': 'performed music'},
  {'code': 'snd', 'fin': 'ääni', 'swe': 'ljud', 'eng': 'sounds', 'ger': 'Geräusche'},
  {'code': 'spw', 'fin': 'puhe', 'swe': 'tal', 'eng': 'spoken word', 'ger': 'gesprochenes Wort'},
  {'code': 'sti', 'fin': 'stillkuva', 'swe': 'stillbild', 'eng': 'still image', 'ger': 'unbewegtes Bild'},
  {'code': 'tci', 'fin': 'taktiili kuva', 'swe': 'taktil bild', 'eng': 'tactile image'},
  {'code': 'tcm', 'fin': 'taktiili nuottikirjoitus', 'swe': 'taktil musiknotation', 'eng': 'tactile notated music'},
  {'code': 'tcn', 'fin': 'taktiili liikenotaatio', 'swe': 'taktil noterad rörelse', 'eng': 'tactile notated movement'},
  {'code': 'tct', 'fin': 'taktiili teksti', 'swe': 'taktil text', 'eng': 'tactile text', 'fre': 'texte tactile'},
  {'code': 'tcf', 'fin': 'taktiili kolmiulotteinen muoto', 'swe': 'taktil tredimensionell form', 'eng': 'tactile three-dimensional form'},
  {'code': 'txt', 'fin': 'teksti', 'swe': 'text', 'eng': 'text', 'ger': 'Text', 'fre': 'texte'},
  {'code': 'tdf', 'fin': 'kolmiulotteinen muoto', 'swe': 'tredimensionell form', 'eng': 'three-dimensional form'},
  {'code': 'tdm', 'fin': 'kolmiulotteinen liikkuva kuva', 'swe': 'tredimensionell rörlig bild', 'eng': 'three-dimensional moving image'},
  {'code': 'tdi', 'fin': 'kaksiulotteinen liikkuva kuva', 'swe': 'tvådimensionell rörlig bild', 'eng': 'two-dimensional moving image'},
  {'code': 'xxx', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'zzz', 'fin': 'määrittelemätön', 'swe': 'ospecificerad', 'eng': 'unspecified'}
];

export const field337Mappings = [
  {'code': 's', 'fin': 'audio', 'swe': 'audio', 'eng': 'audio'},
  {'code': 'c', 'fin': 'tietokonekäyttöinen', 'swe': 'dator', 'eng': 'computer'},
  {'code': 'h', 'fin': 'mikromuoto', 'swe': 'mikroform', 'eng': 'microform'},
  {'code': 'p', 'fin': 'mikroskooppinen', 'swe': 'mikroskopisk', 'eng': 'microscopic'},
  {'code': 'g', 'fin': 'heijastettava', 'swe': 'projicerad', 'eng': 'projected'},
  {'code': 'e', 'fin': 'stereografinen', 'swe': 'stereografisk', 'eng': 'stereographic'},
  {'code': 'n', 'fin': 'käytettävissä ilman laitetta', 'swe': 'omedierad', 'eng': 'unmediated'},
  {'code': 'v', 'fin': 'video', 'swe': 'video', 'eng': 'video'},
  {'code': 'x', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'z', 'fin': 'määrittelemätön', 'swe': 'ospecificerad', 'eng': 'unspecified'}
];

export const field338Mappings = [
  {'code': 'ca', 'fin': 'tietonauhan silmukkakasetti', 'swe': 'datorbandmagasin', 'eng': 'computer tape cartridge'},
  {'code': 'cb', 'fin': 'piirikotelo', 'swe': 'datorminnesmodul', 'eng': 'computer cartridge'},
  {'code': 'cd', 'fin': 'tietolevy', 'swe': 'datorskiva', 'eng': 'computer disc'},
  {'code': 'ce', 'fin': 'tietolevykotelo', 'swe': 'datorskivmagasin', 'eng': 'computer disc cartridge'},
  {'code': 'cf', 'fin': 'tietokasetti', 'swe': 'datorkassett', 'eng': 'computer tape cassette'},
  {'code': 'ch', 'fin': 'tietonauhakela', 'swe': 'datorbandspole', 'eng': 'computer tape reel'},
  {'code': 'ck', 'fin': 'muistikortti', 'swe': 'datorkort', 'eng': 'computer card'},
  {'code': 'cr', 'fin': 'verkkoaineisto', 'swe': 'onlineresurs', 'eng': 'online resource'},
  {'code': 'cz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'eh', 'fin': 'stereografinen kortti', 'swe': 'stereografiskt kort', 'eng': 'stereograph card'},
  {'code': 'es', 'fin': 'stereografinen levy', 'swe': 'stereografisk skiva', 'eng': 'stereograph disc'},
  {'code': 'ez', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'gc', 'fin': 'rainakasetti', 'swe': 'bildbandsmagasin', 'eng': 'filmstrip cartridge'},
  {'code': 'gd', 'fin': 'filmiliuska', 'swe': 'filmremsa', 'eng': 'filmslip'},
  {'code': 'gf', 'fin': 'raina', 'swe': 'bildband', 'eng': 'filmstrip'},
  {'code': 'gs', 'fin': 'dia', 'swe': 'diabild', 'eng': 'slide'},
  {'code': 'gt', 'fin': 'piirtoheitinkalvo', 'swe': 'transparang', 'eng': 'overhead transparency'},
  {'code': 'ha', 'fin': 'ikkunakortti', 'swe': 'fönsterkort', 'eng': 'aperture card'},
  {'code': 'hb', 'fin': 'mikrofilmisilmukkakasetti', 'swe': 'mikrofilmsmagasin', 'eng': 'microfilm cartridge'},
  {'code': 'hc', 'fin': 'mikrofilmikasetti', 'swe': 'mikrofilmskassett', 'eng': 'microfilm cassette'},
  {'code': 'hd', 'fin': 'mikrofilmikela', 'swe': 'mikrofilmsspole', 'eng': 'microfilm reel'},
  {'code': 'he', 'fin': 'mikrokortti', 'swe': 'mikrofiche', 'eng': 'microfiche'},
  {'code': 'hf', 'fin': 'mikrokorttikasetti', 'swe': 'mikrofichekassett', 'eng': 'microfiche cassette'},
  {'code': 'hg', 'fin': 'mikrokortti (läpinäkymätön)', 'swe': 'mikrofiche (ogenomskinlig)', 'eng': 'microopaque'},
  {'code': 'hh', 'fin': 'mikrofilmiliuska', 'swe': 'mikrofilmsremsa', 'eng': 'microfilm slip'},
  {'code': 'hj', 'fin': 'mikrofilmirulla', 'swe': 'mikrofilmsrulle', 'eng': 'microfilm roll'},
  {'code': 'hz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'mc', 'fin': 'filmisilmukkakasetti', 'swe': 'filmmagasin', 'eng': 'film cartridge'},
  {'code': 'mf', 'fin': 'filmikasetti', 'swe': 'filmkassett', 'eng': 'film cassette'},
  {'code': 'mo', 'fin': 'filmirulla', 'swe': 'filmrulle', 'eng': 'film roll'},
  {'code': 'mr', 'fin': 'filmikela', 'swe': 'filmspole', 'eng': 'film reel'},
  {'code': 'mz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'na', 'fin': 'rulla', 'swe': 'rulle', 'eng': 'roll'},
  {'code': 'nb', 'fin': 'arkki', 'swe': 'ark', 'eng': 'sheet'},
  {'code': 'nc', 'fin': 'nide', 'swe': 'volym', 'eng': 'volume'},
  {'code': 'nn', 'fin': 'lehtiötaulu', 'swe': 'blädderblock', 'eng': 'flipchart'},
  {'code': 'no', 'fin': 'kortti', 'swe': 'kort', 'eng': 'card'},
  {'code': 'nr', 'fin': 'objekti', 'swe': 'föremål', 'eng': 'object'},
  {'code': 'nz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'pp', 'fin': 'preparaattilasi', 'swe': 'mikroskoperingspreparat', 'eng': 'microscope slide'},
  {'code': 'pz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'sb', 'fin': 'äänihihna', 'swe': 'ljudslinga', 'eng': 'audio belt'},
  {'code': 'sd', 'fin': 'äänilevy', 'swe': 'ljudskiva', 'eng': 'audio disc'},
  {'code': 'se', 'fin': 'äänisylinteri', 'swe': 'ljudcylinder', 'eng': 'audio cylinder'},
  {'code': 'sg', 'fin': 'äänisilmukkakasetti', 'swe': 'ljudmagasin', 'eng': 'audio cartridge'},
  {'code': 'si', 'fin': 'ääniraitakela', 'swe': 'filmljudspole', 'eng': 'sound-track reel'},
  {'code': 'sq', 'fin': 'äänirulla', 'swe': 'ljudrulle', 'eng': 'audio roll'},
  {'code': 'ss', 'fin': 'äänikasetti', 'swe': 'ljudkassett', 'eng': 'audiocassette'},
  {'code': 'st', 'fin': 'äänikela', 'swe': 'ljudspole', 'eng': 'audiotape reel'},
  {'code': 'sw', 'fin': 'äänilankakela', 'swe': 'ljudtråd', 'eng': 'audio wire reel'},
  {'code': 'sz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'vc', 'fin': 'videosilmukkakasetti', 'swe': 'videomagasin', 'eng': 'video cartridge'},
  {'code': 'vd', 'fin': 'videolevy', 'swe': 'videoskiva', 'eng': 'videodisc'},
  {'code': 'vf', 'fin': 'videokasetti', 'swe': 'videokassett', 'eng': 'videocassette'},
  {'code': 'vr', 'fin': 'videokela', 'swe': 'videospole', 'eng': 'videotape reel'},
  {'code': 'vz', 'fin': 'muu', 'swe': 'annan', 'eng': 'other'},
  {'code': 'zu', 'fin': 'määrittelemätön', 'swe': 'ospecificerad', 'eng': 'unspecified'}
];


function map33XCodeToTerm(mapping, catLang = 'fin') {
  if (!mapping) {
    return undefined;
  }
  if (catLang in mapping) {
    return mapping[catLang];
  }
  if ('fin' in mapping) {
    return mapping.fin; // Default to Finnish (which should be complete, knock-knock)
  }
  return undefined;
}

export function map336CodeToTerm(code, catLang = 'fin') {
  const [mapping] = field336Mappings.filter(m => m.code === code);
  return map33XCodeToTerm(mapping, catLang);
}

export function map337CodeToTerm(code, catLang = 'fin') {
  const [mapping] = field337Mappings.filter(m => m.code === code);
  return map33XCodeToTerm(mapping, catLang);
}

export function map338CodeToTerm(code, catLang = 'fin') {
  const [mapping] = field338Mappings.filter(m => m.code === code);
  return map33XCodeToTerm(mapping, catLang);
}

export function getFormOfItem(record) {
  const [f008Value] = record.get('008').map(field => field.value);
  if (f008Value && f008Value.length === 40) {
    const pos = getFormOfItemPosition(record);
    return f008Value[pos];
  }
  return '|';
}

export function getFormOfItemPosition(record) {
  if (record.isMP() || record.isVM()) {
    return 29;
  }
  return 23;
}

export function getTitleMedium(record) {
  // Get 245$h. Very old and deprecated practise...
  const [f245] = record.get('245');
  if (!f245) {
    return undefined;
  }
  const [h] = f245.subfields.filter(sf => sf.code === 'h');
  return h ? h.value : undefined;
}