@natlibfi/marc-record-validators-melinda 9.0.14 → 9.1.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 (133) hide show
  1. package/dist/access-rights.js +1 -9
  2. package/dist/access-rights.js.map +1 -1
  3. package/dist/access-rights.spec.js +4 -7
  4. package/dist/access-rights.spec.js.map +1 -1
  5. package/dist/double-commas.js +0 -1
  6. package/dist/double-commas.js.map +1 -1
  7. package/dist/double-commas.spec.js +0 -4
  8. package/dist/double-commas.spec.js.map +1 -1
  9. package/dist/duplicates-ind1.js +3 -8
  10. package/dist/duplicates-ind1.js.map +1 -1
  11. package/dist/duplicates-ind1.spec.js +38 -102
  12. package/dist/duplicates-ind1.spec.js.map +1 -1
  13. package/dist/empty-fields.js +0 -11
  14. package/dist/empty-fields.js.map +1 -1
  15. package/dist/empty-fields.spec.js +0 -4
  16. package/dist/empty-fields.spec.js.map +1 -1
  17. package/dist/ending-punctuation-conf.js +6 -9
  18. package/dist/ending-punctuation-conf.js.map +1 -1
  19. package/dist/ending-punctuation.js +36 -59
  20. package/dist/ending-punctuation.js.map +1 -1
  21. package/dist/ending-punctuation.spec.js +115 -65
  22. package/dist/ending-punctuation.spec.js.map +1 -1
  23. package/dist/field-exclusion.js +38 -37
  24. package/dist/field-exclusion.js.map +1 -1
  25. package/dist/field-exclusion.spec.js +16 -26
  26. package/dist/field-exclusion.spec.js.map +1 -1
  27. package/dist/field-structure.js +36 -39
  28. package/dist/field-structure.js.map +1 -1
  29. package/dist/field-structure.spec.js +8 -15
  30. package/dist/field-structure.spec.js.map +1 -1
  31. package/dist/fields-present.js +0 -4
  32. package/dist/fields-present.js.map +1 -1
  33. package/dist/fields-present.spec.js +0 -8
  34. package/dist/fields-present.spec.js.map +1 -1
  35. package/dist/fixed-fields.js +0 -14
  36. package/dist/fixed-fields.js.map +1 -1
  37. package/dist/fixed-fields.spec.js +0 -7
  38. package/dist/fixed-fields.spec.js.map +1 -1
  39. package/dist/identical-fields.js +1 -5
  40. package/dist/identical-fields.js.map +1 -1
  41. package/dist/identical-fields.spec.js +0 -4
  42. package/dist/identical-fields.spec.js.map +1 -1
  43. package/dist/index.js +0 -20
  44. package/dist/index.js.map +1 -1
  45. package/dist/indicator-fixes.js +23 -59
  46. package/dist/indicator-fixes.js.map +1 -1
  47. package/dist/indicator-fixes.spec.js +2 -12
  48. package/dist/indicator-fixes.spec.js.map +1 -1
  49. package/dist/isbn-issn.js +20 -91
  50. package/dist/isbn-issn.js.map +1 -1
  51. package/dist/isbn-issn.spec.js +8 -11
  52. package/dist/isbn-issn.spec.js.map +1 -1
  53. package/dist/item-language.js +1 -33
  54. package/dist/item-language.js.map +1 -1
  55. package/dist/item-language.spec.js +0 -8
  56. package/dist/item-language.spec.js.map +1 -1
  57. package/dist/mergeField500Lisapainokset.js +156 -0
  58. package/dist/mergeField500Lisapainokset.js.map +1 -0
  59. package/dist/mergeField500Lisapainokset.spec.js +51 -0
  60. package/dist/mergeField500Lisapainokset.spec.js.map +1 -0
  61. package/dist/normalize-identifiers.js +20 -46
  62. package/dist/normalize-identifiers.js.map +1 -1
  63. package/dist/normalize-identifiers.spec.js +2 -12
  64. package/dist/normalize-identifiers.spec.js.map +1 -1
  65. package/dist/normalize-utf8-diacritics.js +20 -29
  66. package/dist/normalize-utf8-diacritics.js.map +1 -1
  67. package/dist/normalize-utf8-diacritics.spec.js +2 -12
  68. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  69. package/dist/punctuation/index.js +1 -54
  70. package/dist/punctuation/index.js.map +1 -1
  71. package/dist/punctuation/rules/aut.js.map +1 -1
  72. package/dist/punctuation/rules/bib.js.map +1 -1
  73. package/dist/punctuation/rules/index.js +0 -3
  74. package/dist/punctuation/rules/index.js.map +1 -1
  75. package/dist/punctuation.spec.js +2 -12
  76. package/dist/punctuation.spec.js.map +1 -1
  77. package/dist/resolvable-ext-references-melinda.js +8 -18
  78. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  79. package/dist/resolvable-ext-references-melinda.spec.js +2 -22
  80. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  81. package/dist/sort-tags.js +0 -10
  82. package/dist/sort-tags.js.map +1 -1
  83. package/dist/sort-tags.spec.js +0 -4
  84. package/dist/sort-tags.spec.js.map +1 -1
  85. package/dist/subfield-exclusion.js +28 -29
  86. package/dist/subfield-exclusion.js.map +1 -1
  87. package/dist/subfield-exclusion.spec.js +8 -17
  88. package/dist/subfield-exclusion.spec.js.map +1 -1
  89. package/dist/unicode-decomposition.js +0 -9
  90. package/dist/unicode-decomposition.js.map +1 -1
  91. package/dist/unicode-decomposition.spec.js +0 -7
  92. package/dist/unicode-decomposition.spec.js.map +1 -1
  93. package/dist/urn.js +73 -29
  94. package/dist/urn.js.map +1 -1
  95. package/dist/urn.spec.js +104 -12
  96. package/dist/urn.spec.js.map +1 -1
  97. package/dist/utils.js +0 -1
  98. package/dist/utils.js.map +1 -1
  99. package/package.json +17 -17
  100. package/src/access-rights.spec.js +5 -2
  101. package/src/duplicates-ind1.js +1 -1
  102. package/src/duplicates-ind1.spec.js +39 -85
  103. package/src/mergeField500Lisapainokset.js +154 -0
  104. package/src/mergeField500Lisapainokset.spec.js +52 -0
  105. package/src/urn.js +82 -16
  106. package/src/urn.spec.js +95 -4
  107. package/test-fixtures/duplicates-ind1/01/expectedResult.json +4 -0
  108. package/test-fixtures/duplicates-ind1/01/metadata.json +4 -0
  109. package/test-fixtures/duplicates-ind1/01/record.json +16 -0
  110. package/test-fixtures/duplicates-ind1/02/expectedResult.json +6 -0
  111. package/test-fixtures/duplicates-ind1/02/metadata.json +4 -0
  112. package/test-fixtures/duplicates-ind1/02/record.json +16 -0
  113. package/test-fixtures/duplicates-ind1/03/expectedResult.json +13 -0
  114. package/test-fixtures/duplicates-ind1/03/metadata.json +6 -0
  115. package/test-fixtures/duplicates-ind1/03/record.json +16 -0
  116. package/test-fixtures/lisapainokset/fixer/01/expectedResult.json +37 -0
  117. package/test-fixtures/lisapainokset/fixer/01/metadata.json +6 -0
  118. package/test-fixtures/lisapainokset/fixer/01/record.json +61 -0
  119. package/test-fixtures/lisapainokset/fixer/02/expectedResult.json +44 -0
  120. package/test-fixtures/lisapainokset/fixer/02/metadata.json +6 -0
  121. package/test-fixtures/lisapainokset/fixer/02/record.json +45 -0
  122. package/test-fixtures/lisapainokset/fixer/03/expectedResult.json +21 -0
  123. package/test-fixtures/lisapainokset/fixer/03/metadata.json +6 -0
  124. package/test-fixtures/lisapainokset/fixer/03/record.json +45 -0
  125. package/test-fixtures/lisapainokset/validator/01/expectedResult.json +7 -0
  126. package/test-fixtures/lisapainokset/validator/01/metadata.json +6 -0
  127. package/test-fixtures/lisapainokset/validator/01/record.json +45 -0
  128. package/test-fixtures/lisapainokset/validator/02/expectedResult.json +6 -0
  129. package/test-fixtures/lisapainokset/validator/02/metadata.json +6 -0
  130. package/test-fixtures/lisapainokset/validator/02/record.json +61 -0
  131. package/test-fixtures/lisapainokset/validator/03/expectedResult.json +4 -0
  132. package/test-fixtures/lisapainokset/validator/03/metadata.json +6 -0
  133. package/test-fixtures/lisapainokset/validator/03/record.json +37 -0
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  var _utils = require("./utils");
9
-
10
8
  function _default() {
11
9
  const sf506 = [{
12
10
  code: 'a',
@@ -16,9 +14,9 @@ function _default() {
16
14
  code: 'c',
17
15
  value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui
18
16
  }];
19
-
20
17
  function fix(record) {
21
18
  // If printed do nothing
19
+
22
20
  // If material is electronic add theis if missing
23
21
  if (!hasTag(record, '506', sf506)) {
24
22
  // eslint-disable-line functional/no-conditional-statement
@@ -43,7 +41,6 @@ function _default() {
43
41
  }]
44
42
  });
45
43
  }
46
-
47
44
  if (!hasTag(record, '540', sf540)) {
48
45
  // eslint-disable-line functional/no-conditional-statement
49
46
  record.insertField({
@@ -69,10 +66,8 @@ function _default() {
69
66
  }]
70
67
  });
71
68
  }
72
-
73
69
  return true;
74
70
  }
75
-
76
71
  function validate(record) {
77
72
  // if not electronic skip this validator
78
73
  if (!(0, _utils.isElectronicMaterial)(record)) {
@@ -80,18 +75,15 @@ function _default() {
80
75
  valid: true
81
76
  };
82
77
  }
83
-
84
78
  return {
85
79
  valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)
86
80
  };
87
81
  }
88
-
89
82
  return {
90
83
  description: 'Adds access rights fields for a record (if not existing)',
91
84
  validate,
92
85
  fix
93
86
  };
94
-
95
87
  function hasTag(rec, tag, sfcv) {
96
88
  return rec.fields.some(f => f.tag === tag && sfcv.every(({
97
89
  code,
@@ -1 +1 @@
1
- {"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","isElectronicMaterial","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function () {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n if (!hasTag(record, '540', sf540)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEe,oBAAY;EACzB,MAAMA,KAAK,GAAG,CAAC;IAACC,IAAI,EAAE,GAAP;IAAYC,KAAK,EAAE;EAAnB,CAAD,CAAd;EACA,MAAMC,KAAK,GAAG,CAAC;IAACF,IAAI,EAAE,GAAP;IAAYC,KAAK,EAAE;EAAnB,CAAD,CAAd;;EAEA,SAASE,GAAT,CAAaC,MAAb,EAAqB;IACnB;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBL,KAAhB,CAAX,EAAmC;MAAE;MACnCK,MAAM,CAACE,WAAP,CAAmB;QACjBC,GAAG,EAAE,KADY;QAEjBC,IAAI,EAAE,GAFW;QAGjBC,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GADR;UAEEC,KAAK,EAAE;QAFT,CADS,EAIN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAJM,EAON;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAPM,EAUN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAVM,EAaN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAbM;MAHM,CAAnB;IAsBD;;IAED,IAAI,CAACI,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBF,KAAhB,CAAX,EAAmC;MAAE;MACnCE,MAAM,CAACE,WAAP,CAAmB;QACjBC,GAAG,EAAE,KADY;QAEjBE,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GADR;UAEEC,KAAK,EAAE;QAFT,CADS,EAIN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAJM,EAON;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAPM,EAUN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAVM,EAaN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAbM,EAgBN;UACDD,IAAI,EAAE,GADL;UAEDC,KAAK,EAAE;QAFN,CAhBM;MAFM,CAAnB;IAwBD;;IAED,OAAO,IAAP;EACD;;EAED,SAASS,QAAT,CAAkBN,MAAlB,EAA0B;IACxB;IACA,IAAI,CAAC,IAAAO,2BAAA,EAAqBP,MAArB,CAAL,EAAmC;MACjC,OAAO;QAACQ,KAAK,EAAE;MAAR,CAAP;IACD;;IAED,OAAO;MAACA,KAAK,EAAEP,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBL,KAAhB,CAAN,IAAgCM,MAAM,CAACD,MAAD,EAAS,KAAT,EAAgBF,KAAhB;IAA9C,CAAP;EACD;;EAED,OAAO;IACLW,WAAW,EAAE,0DADR;IAELH,QAFK;IAGLP;EAHK,CAAP;;EAMA,SAASE,MAAT,CAAgBS,GAAhB,EAAqBP,GAArB,EAA0BQ,IAA1B,EAAgC;IAC9B,OAAOD,GAAG,CAACE,MAAJ,CAAWC,IAAX,CAAgBC,CAAC,IAAIA,CAAC,CAACX,GAAF,KAAUA,GAAV,IAAiBQ,IAAI,CAACI,KAAL,CAAW,CAAC;MAACnB,IAAD;MAAOC;IAAP,CAAD,KAAmBiB,CAAC,CAACT,SAAF,CAAYQ,IAAZ,CAAiBG,EAAE,IAAIA,EAAE,CAACpB,IAAH,KAAYA,IAAZ,IAAoBC,KAAK,CAACoB,IAAN,CAAWD,EAAE,CAACnB,KAAd,CAA3C,CAA9B,CAAtC,CAAP;EACD;AACF"}
1
+ {"version":3,"file":"access-rights.js","names":["sf506","code","value","sf540","fix","record","hasTag","insertField","tag","ind1","subfields","validate","isElectronicMaterial","valid","description","rec","sfcv","fields","some","f","every","sf","test"],"sources":["../src/access-rights.js"],"sourcesContent":["import {isElectronicMaterial} from './utils';\n\nexport default function () {\n const sf506 = [{code: 'a', value: /aineisto on käytettävissä vapaakappalekirjastoissa/ui}];\n const sf540 = [{code: 'c', value: /laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä/ui}];\n\n function fix(record) {\n // If printed do nothing\n\n // If material is electronic add theis if missing\n if (!hasTag(record, '506', sf506)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '506',\n ind1: '1',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'\n }, {\n code: 'f',\n value: 'Online access with authorization'\n }, {\n code: '2',\n value: 'star'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n if (!hasTag(record, '540', sf540)) { // eslint-disable-line functional/no-conditional-statement\n record.insertField({\n tag: '540',\n subfields: [\n {\n code: 'a',\n value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'\n }, {\n code: 'b',\n value: 'Kansalliskirjasto;'\n }, {\n code: 'c',\n value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'\n }, {\n code: 'u',\n value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'\n }, {\n code: '5',\n value: 'FI-Vapaa'\n }, {\n code: '9',\n value: 'FENNI<KEEP>'\n }\n ]\n });\n }\n\n return true;\n }\n\n function validate(record) {\n // if not electronic skip this validator\n if (!isElectronicMaterial(record)) {\n return {valid: true};\n }\n\n return {valid: hasTag(record, '506', sf506) && hasTag(record, '540', sf540)};\n }\n\n return {\n description: 'Adds access rights fields for a record (if not existing)',\n validate,\n fix\n };\n\n function hasTag(rec, tag, sfcv) {\n return rec.fields.some(f => f.tag === tag && sfcv.every(({code, value}) => f.subfields.some(sf => sf.code === code && value.test(sf.value))));\n }\n}\n"],"mappings":";;;;;;AAAA;AAEe,oBAAY;EACzB,MAAMA,KAAK,GAAG,CAAC;IAACC,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAsD,CAAC,CAAC;EAC1F,MAAMC,KAAK,GAAG,CAAC;IAACF,IAAI,EAAE,GAAG;IAAEC,KAAK,EAAE;EAAgE,CAAC,CAAC;EAEpG,SAASE,GAAG,CAACC,MAAM,EAAE;IACnB;;IAEA;IACA,IAAI,CAACC,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,EAAE;MAAE;MACnCK,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVC,IAAI,EAAE,GAAG;QACTC,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,IAAI,CAACI,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK,CAAC,EAAE;MAAE;MACnCE,MAAM,CAACE,WAAW,CAAC;QACjBC,GAAG,EAAE,KAAK;QACVE,SAAS,EAAE,CACT;UACET,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC,EAAE;UACDD,IAAI,EAAE,GAAG;UACTC,KAAK,EAAE;QACT,CAAC;MAEL,CAAC,CAAC;IACJ;IAEA,OAAO,IAAI;EACb;EAEA,SAASS,QAAQ,CAACN,MAAM,EAAE;IACxB;IACA,IAAI,CAAC,IAAAO,2BAAoB,EAACP,MAAM,CAAC,EAAE;MACjC,OAAO;QAACQ,KAAK,EAAE;MAAI,CAAC;IACtB;IAEA,OAAO;MAACA,KAAK,EAAEP,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEL,KAAK,CAAC,IAAIM,MAAM,CAACD,MAAM,EAAE,KAAK,EAAEF,KAAK;IAAC,CAAC;EAC9E;EAEA,OAAO;IACLW,WAAW,EAAE,0DAA0D;IACvEH,QAAQ;IACRP;EACF,CAAC;EAED,SAASE,MAAM,CAACS,GAAG,EAAEP,GAAG,EAAEQ,IAAI,EAAE;IAC9B,OAAOD,GAAG,CAACE,MAAM,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACX,GAAG,KAAKA,GAAG,IAAIQ,IAAI,CAACI,KAAK,CAAC,CAAC;MAACnB,IAAI;MAAEC;IAAK,CAAC,KAAKiB,CAAC,CAACT,SAAS,CAACQ,IAAI,CAACG,EAAE,IAAIA,EAAE,CAACpB,IAAI,KAAKA,IAAI,IAAIC,KAAK,CAACoB,IAAI,CAACD,EAAE,CAACnB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC/I;AACF"}
@@ -1,13 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  var _chai = require("chai");
4
-
5
4
  var _marcRecord = require("@natlibfi/marc-record");
6
-
7
5
  var _accessRights = _interopRequireDefault(require("../src/access-rights"));
8
-
9
6
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
7
  describe('access-rights', async () => {
12
8
  // Fields
13
9
  const f337 = {
@@ -99,8 +95,9 @@ describe('access-rights', async () => {
99
95
  (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
100
96
  (0, _chai.expect)(validator.description).to.be.a('string');
101
97
  (0, _chai.expect)(validator.validate).to.be.a('function');
102
- }); // Tests
98
+ });
103
99
 
100
+ // Tests
104
101
  const test = await (async () => {
105
102
  const validator = await (0, _accessRights.default)();
106
103
  return {
@@ -143,10 +140,10 @@ describe('access-rights', async () => {
143
140
  await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);
144
141
  });
145
142
  it('5061 but missing 540; Adds 540', async () => {
146
- await test.fix([ldf5061, f540], [ldf5061, f540, ldf540]);
143
+ await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);
147
144
  });
148
145
  it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {
149
- await test.fix([f5060, f540], [f5060, ldf5061, f540, ldf540]);
146
+ await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);
150
147
  });
151
148
  });
152
149
  });
@@ -1 +1 @@
1
- {"version":3,"file":"access-rights.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","test","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record"],"sources":["../src/access-rights.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/access-rights';\n\ndescribe('access-rights', async () => {\n // Fields\n const f337 = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'c'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061 = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'},\n {code: 'f', value: 'Online access with authorization'},\n {code: '2', value: 'star'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const ldf540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'},\n {code: 'b', value: 'Kansalliskirjasto;'},\n {code: 'c', value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'},\n {code: 'u', value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const f5060 = {\n tag: '506',\n ind1: '0',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on vapaasti saatavissa.'},\n {code: 'f', value: 'Unrestricted online access'},\n {code: '2', value: 'star'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n const f540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'c', value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'}]\n };\n\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n // Tests\n const test = await (async () => {\n const validator = await validatorFactory();\n return {\n validate: async (valid, ...recfields) => {\n const result = await validator.validate(new MarcRecord({fields: recfields}));\n expect(result).to.eql({valid});\n },\n\n fix: async (recfields, resfields) => {\n const record = new MarcRecord({fields: recfields});\n await validator.fix(record);\n expect(record.fields).to.eql(resfields);\n }\n };\n })();\n\n describe('#validate', () => {\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, ldf5061, ldf540);\n });\n\n it('Finds the record invalid; Missing 5061', async () => {\n await test.validate(false, f337, f5060, ldf540);\n });\n\n it('Finds the record invalid; Missing 540', async () => {\n await test.validate(false, f337, ldf5061, f540);\n });\n\n it('Finds the record invalid; Missing 5061 and 540', async () => {\n await test.validate(false, f337, f5060, f540);\n });\n });\n\n describe('#fix', () => {\n it('Legal deposit fields 5061 and 540; Nothing to add', async () => {\n await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061, f540], [ldf5061, f540, ldf540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061, f540, ldf540]);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"access-rights.spec.js","names":["describe","f337","tag","ind1","ind2","subfields","code","value","ldf5061","ldf540","f5060","f540","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","test","valid","recfields","result","MarcRecord","fields","eql","fix","resfields","record"],"sources":["../src/access-rights.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/access-rights';\n\ndescribe('access-rights', async () => {\n // Fields\n const f337 = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'b', value: 'c'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061 = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappalekirjastoissa.'},\n {code: 'f', value: 'Online access with authorization'},\n {code: '2', value: 'star'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const ldf540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä tutkimus- ja muihin tarkoituksiin;'},\n {code: 'b', value: 'Kansalliskirjasto;'},\n {code: 'c', value: 'Laki kulttuuriaineistojen tallettamisesta ja säilyttämisestä'},\n {code: 'u', value: 'http://www.finlex.fi/fi/laki/ajantasa/2007/20071433'},\n {code: '5', value: 'FI-Vapaa'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f5060 = {\n tag: '506',\n ind1: '0',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on vapaasti saatavissa.'},\n {code: 'f', value: 'Unrestricted online access'},\n {code: '2', value: 'star'},\n {code: '9', value: 'FENNI<KEEP>'}\n ]\n };\n\n const f540 = {\n tag: '540',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'c', value: 'This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.'}]\n };\n\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n // Tests\n const test = await (async () => {\n const validator = await validatorFactory();\n return {\n validate: async (valid, ...recfields) => {\n const result = await validator.validate(new MarcRecord({fields: recfields}));\n expect(result).to.eql({valid});\n },\n\n fix: async (recfields, resfields) => {\n const record = new MarcRecord({fields: recfields});\n await validator.fix(record);\n expect(record.fields).to.eql(resfields);\n }\n };\n })();\n\n describe('#validate', () => {\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, ldf5061, ldf540);\n });\n\n it('Finds the record invalid; Missing 5061', async () => {\n await test.validate(false, f337, f5060, ldf540);\n });\n\n it('Finds the record invalid; Missing 540', async () => {\n await test.validate(false, f337, ldf5061, f540);\n });\n\n it('Finds the record invalid; Missing 5061 and 540', async () => {\n await test.validate(false, f337, f5060, f540);\n });\n });\n\n describe('#fix', () => {\n it('Legal deposit fields 5061 and 540; Nothing to add', async () => {\n await test.fix([ldf5061, ldf540], [ldf5061, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061, f540], [ldf5061, ldf540, f540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061, ldf540, f540]);\n });\n });\n});\n"],"mappings":"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"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  function _default() {
9
8
  return {
10
9
  description: 'Handle double commas in 700$e-subfields',
@@ -1 +1 @@
1
- {"version":3,"file":"double-commas.js","names":["description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"sources":["../src/double-commas.js"],"sourcesContent":["export default function () {\n return {\n description: 'Handle double commas in 700$e-subfields',\n validate: record => ({\n valid: !record\n .get(/^700$/u)\n .some(f => f.subfields.every(sf => sf.code === 'e' && (/,,/u).test(sf.value)))\n }),\n fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data\n }))\n };\n}\n"],"mappings":";;;;;;;AAAe,oBAAY;EACzB,OAAO;IACLA,WAAW,EAAE,yCADR;IAELC,QAAQ,EAAEC,MAAM,KAAK;MACnBC,KAAK,EAAE,CAACD,MAAM,CACXE,GADK,CACD,QADC,EAELC,IAFK,CAEAC,CAAC,IAAIA,CAAC,CAACC,SAAF,CAAYC,KAAZ,CAAkBC,EAAE,IAAIA,EAAE,CAACC,IAAH,KAAY,GAAZ,IAAoB,KAAD,CAAQC,IAAR,CAAaF,EAAE,CAACG,KAAhB,CAA3C,CAFL;IADW,CAAL,CAFX;IAOLC,GAAG,EAAEX,MAAM,IAAIA,MAAM,CAACE,GAAP,CAAW,QAAX,EAAqBU,OAArB,CAA6BR,CAAC,IAAIA,CAAC,CAACC,SAAF,CAAYQ,MAAZ,CAAmBN,EAAE,IAAIA,EAAE,CAACC,IAAH,KAAY,GAArC,EAA0CI,OAA1C,CAAkDL,EAAE,IAAI;MACvGA,EAAE,CAACG,KAAH,GAAWH,EAAE,CAACG,KAAH,CAASI,OAAT,CAAiB,KAAjB,EAAwB,GAAxB,CAAX,CADuG,CAC9D;IAC1C,CAFgD,CAAlC;EAPV,CAAP;AAWD"}
1
+ {"version":3,"file":"double-commas.js","names":["description","validate","record","valid","get","some","f","subfields","every","sf","code","test","value","fix","forEach","filter","replace"],"sources":["../src/double-commas.js"],"sourcesContent":["export default function () {\n return {\n description: 'Handle double commas in 700$e-subfields',\n validate: record => ({\n valid: !record\n .get(/^700$/u)\n .some(f => f.subfields.every(sf => sf.code === 'e' && (/,,/u).test(sf.value)))\n }),\n fix: record => record.get(/^700$/u).forEach(f => f.subfields.filter(sf => sf.code === 'e').forEach(sf => {\n sf.value = sf.value.replace(/,,/u, ','); // eslint-disable-line functional/immutable-data\n }))\n };\n}\n"],"mappings":";;;;;;AAAe,oBAAY;EACzB,OAAO;IACLA,WAAW,EAAE,yCAAyC;IACtDC,QAAQ,EAAEC,MAAM,KAAK;MACnBC,KAAK,EAAE,CAACD,MAAM,CACXE,GAAG,CAAC,QAAQ,CAAC,CACbC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACC,KAAK,CAACC,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,IAAK,KAAK,CAAEC,IAAI,CAACF,EAAE,CAACG,KAAK,CAAC,CAAC;IACjF,CAAC,CAAC;IACFC,GAAG,EAAEX,MAAM,IAAIA,MAAM,CAACE,GAAG,CAAC,QAAQ,CAAC,CAACU,OAAO,CAACR,CAAC,IAAIA,CAAC,CAACC,SAAS,CAACQ,MAAM,CAACN,EAAE,IAAIA,EAAE,CAACC,IAAI,KAAK,GAAG,CAAC,CAACI,OAAO,CAACL,EAAE,IAAI;MACvGA,EAAE,CAACG,KAAK,GAAGH,EAAE,CAACG,KAAK,CAACI,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC;EACJ,CAAC;AACH"}
@@ -1,13 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  var _chai = require("chai");
4
-
5
4
  var _marcRecord = require("@natlibfi/marc-record");
6
-
7
5
  var _doubleCommas = _interopRequireDefault(require("../src/double-commas"));
8
-
9
6
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
7
  describe('double-commas', () => {
12
8
  it('Creates a validator', async () => {
13
9
  const validator = await (0, _doubleCommas.default)();
@@ -1 +1 @@
1
- {"version":3,"file":"double-commas.spec.js","names":["describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":";;AAAA;;AACA;;AACA;;;;AAEAA,QAAQ,CAAC,eAAD,EAAkB,MAAM;EAC9BC,EAAE,CAAC,qBAAD,EAAwB,YAAY;IACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAA,GAAxB;IAEA,IAAAC,YAAA,EAAOF,SAAP,EACGG,EADH,CACMC,EADN,CACSC,EADT,CACY,QADZ,EAEGC,IAFH,CAEQC,GAFR,CAEYC,GAFZ,CAEgBC,IAFhB,CAEqB,aAFrB,EAEoC,UAFpC;IAIA,IAAAP,YAAA,EAAOF,SAAS,CAACU,WAAjB,EAA8BP,EAA9B,CAAiCC,EAAjC,CAAoCO,CAApC,CAAsC,QAAtC;IACA,IAAAT,YAAA,EAAOF,SAAS,CAACY,QAAjB,EAA2BT,EAA3B,CAA8BC,EAA9B,CAAiCO,CAAjC,CAAmC,UAAnC;EACD,CATC,CAAF;EAWAb,QAAQ,CAAC,WAAD,EAAc,MAAM;IAC1BC,EAAE,CAAC,wBAAD,EAA2B,YAAY;MACvC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAA,GAAxB;MACA,MAAMY,MAAM,GAAG,IAAIC,sBAAJ,CAAe;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAN;UAAaC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAP;YAAYC,KAAK,EAAE;UAAnB,CAAD;QAAxB,CAAD;MADoB,CAAf,CAAf;MAGA,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAV,CAAmBC,MAAnB,CAArB;MAEA,IAAAX,YAAA,EAAOkB,MAAP,EAAejB,EAAf,CAAkBkB,GAAlB,CAAsB;QAACC,KAAK,EAAE;MAAR,CAAtB;IACD,CARC,CAAF;IASAvB,EAAE,CAAC,0BAAD,EAA6B,YAAY;MACzC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAA,GAAxB;MACA,MAAMY,MAAM,GAAG,IAAIC,sBAAJ,CAAe;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAN;UAAaC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAP;YAAYC,KAAK,EAAE;UAAnB,CAAD;QAAxB,CAAD;MADoB,CAAf,CAAf;MAGA,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAV,CAAmBC,MAAnB,CAArB;MAEA,IAAAX,YAAA,EAAOkB,MAAP,EAAejB,EAAf,CAAkBkB,GAAlB,CAAsB;QAACC,KAAK,EAAE;MAAR,CAAtB;IACD,CARC,CAAF;EASD,CAnBO,CAAR;EAqBAxB,QAAQ,CAAC,MAAD,EAAS,MAAM;IACrBC,EAAE,CAAC,kBAAD,EAAqB,YAAY;MACjC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAA,GAAxB;MACA,MAAMY,MAAM,GAAG,IAAIC,sBAAJ,CAAe;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAN;UAAaC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAP;YAAYC,KAAK,EAAE;UAAnB,CAAD;QAAxB,CAAD;MADoB,CAAf,CAAf;MAGA,MAAMnB,SAAS,CAACuB,GAAV,CAAcV,MAAd,CAAN;MAEA,IAAAX,YAAA,EAAOW,MAAM,CAACE,MAAd,EAAsBZ,EAAtB,CAAyBkB,GAAzB,CAA6B,CAC3B;QACEL,GAAG,EAAE,KADP;QAEEQ,IAAI,EAAE,GAFR;QAGEC,IAAI,EAAE,GAHR;QAIER,SAAS,EAAE,CAAC;UAACC,IAAI,EAAE,GAAP;UAAYC,KAAK,EAAE;QAAnB,CAAD;MAJb,CAD2B,CAA7B;IAQD,CAfC,CAAF;EAgBD,CAjBO,CAAR;AAkBD,CAnDO,CAAR"}
1
+ {"version":3,"file":"double-commas.spec.js","names":["describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","subfields","code","value","result","eql","valid","fix","ind1","ind2"],"sources":["../src/double-commas.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/double-commas';\n\ndescribe('double-commas', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false});\n });\n });\n\n describe('#fix', () => {\n it('Fixes the record', async () => {\n const validator = await validatorFactory();\n const record = new MarcRecord({\n fields: [{tag: '700', subfields: [{code: 'e', value: 'foo,,bar'}]}]\n });\n await validator.fix(record);\n\n expect(record.fields).to.eql([\n {\n tag: '700',\n ind1: ' ',\n ind2: ' ',\n subfields: [{code: 'e', value: 'foo,bar'}]\n }\n ]);\n });\n });\n});\n"],"mappings":";;AAAA;AACA;AACA;AAAoD;AAEpDA,QAAQ,CAAC,eAAe,EAAE,MAAM;EAC9BC,EAAE,CAAC,qBAAqB,EAAE,YAAY;IACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;IAE1C,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;IAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;IAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAChD,CAAC,CAAC;EAEFb,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC1BC,EAAE,CAAC,wBAAwB,EAAE,YAAY;MACvC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAS,CAAC;QAAC,CAAC;MACnE,CAAC,CAAC;MACF,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACC,MAAM,CAAC;MAE/C,IAAAX,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAAC;QAACC,KAAK,EAAE;MAAI,CAAC,CAAC;IACtC,CAAC,CAAC;IACFvB,EAAE,CAAC,0BAA0B,EAAE,YAAY;MACzC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAU,CAAC;QAAC,CAAC;MACpE,CAAC,CAAC;MACF,MAAMC,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACC,MAAM,CAAC;MAE/C,IAAAX,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAAC;QAACC,KAAK,EAAE;MAAK,CAAC,CAAC;IACvC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFxB,QAAQ,CAAC,MAAM,EAAE,MAAM;IACrBC,EAAE,CAAC,kBAAkB,EAAE,YAAY;MACjC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qBAAgB,GAAE;MAC1C,MAAMY,MAAM,GAAG,IAAIC,sBAAU,CAAC;QAC5BC,MAAM,EAAE,CAAC;UAACC,GAAG,EAAE,KAAK;UAAEC,SAAS,EAAE,CAAC;YAACC,IAAI,EAAE,GAAG;YAAEC,KAAK,EAAE;UAAU,CAAC;QAAC,CAAC;MACpE,CAAC,CAAC;MACF,MAAMnB,SAAS,CAACuB,GAAG,CAACV,MAAM,CAAC;MAE3B,IAAAX,YAAM,EAACW,MAAM,CAACE,MAAM,CAAC,CAACZ,EAAE,CAACkB,GAAG,CAAC,CAC3B;QACEL,GAAG,EAAE,KAAK;QACVQ,IAAI,EAAE,GAAG;QACTC,IAAI,EAAE,GAAG;QACTR,SAAS,EAAE,CAAC;UAACC,IAAI,EAAE,GAAG;UAAEC,KAAK,EAAE;QAAS,CAAC;MAC3C,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = _default;
7
-
8
7
  function _default(tagPattern) {
9
8
  if (tagPattern instanceof RegExp) {
10
9
  return {
@@ -13,9 +12,7 @@ function _default(tagPattern) {
13
12
  fix
14
13
  };
15
14
  }
16
-
17
15
  throw new Error('No tagPattern provided');
18
-
19
16
  function validate(record) {
20
17
  const invalid = iterateFields(record).find(obj => obj.validation === true);
21
18
  return invalid ? {
@@ -26,26 +23,24 @@ function _default(tagPattern) {
26
23
  messages: []
27
24
  };
28
25
  }
29
-
30
26
  function fix(record) {
31
27
  iterateFields(record).filter(item => item.validation === false).map(({
32
28
  validation,
33
29
  ...item
34
30
  }) => item) // eslint-disable-line no-unused-vars
35
- .forEach(field => record.removeField(field));
31
+ .forEach(({
32
+ obj
33
+ }) => record.removeField(obj));
36
34
  }
37
-
38
35
  function iterateFields(record) {
39
36
  return record.fields.map(obj => ({
40
37
  validation: matches(obj, record.fields),
41
38
  obj
42
39
  }));
43
40
  }
44
-
45
41
  function matches(field, fields) {
46
42
  return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);
47
43
  }
48
-
49
44
  function hasDuplicate(fieldA, fields) {
50
45
  return fields.some(fieldB => fieldA !== fieldB && fieldA.tag === fieldB.tag && fieldA.ind1 !== fieldB.ind1 && fieldA.subfields.length === fieldB.subfields.length && fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));
51
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"duplicates-ind1.js","names":["tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","field","removeField","fields","matches","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(field => record.removeField(field));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;;AAAe,kBAAUA,UAAV,EAAsB;EACnC,IAAIA,UAAU,YAAYC,MAA1B,EAAkC;IAChC,OAAO;MACLC,WAAW,EACT,6DAFG;MAGLC,QAHK;MAILC;IAJK,CAAP;EAMD;;EAED,MAAM,IAAIC,KAAJ,CAAU,wBAAV,CAAN;;EAEA,SAASF,QAAT,CAAkBG,MAAlB,EAA0B;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAD,CAAb,CACbG,IADa,CACRC,GAAG,IAAIA,GAAG,CAACC,UAAJ,KAAmB,IADlB,CAAhB;IAEA,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAR;MAAeC,QAAQ,EAAE,CAAE,YAAWN,OAAO,CAACG,GAAR,CAAYI,GAAI,kDAA7B;IAAzB,CAAH,GAA+G;MAACF,KAAK,EAAE,IAAR;MAAcC,QAAQ,EAAE;IAAxB,CAA7H;EACD;;EAED,SAAST,GAAT,CAAaE,MAAb,EAAqB;IACnBE,aAAa,CAACF,MAAD,CAAb,CACGS,MADH,CACUC,IAAI,IAAIA,IAAI,CAACL,UAAL,KAAoB,KADtC,EAEGM,GAFH,CAEO,CAAC;MAACN,UAAD;MAAa,GAAGK;IAAhB,CAAD,KAA2BA,IAFlC,EAEwC;IAFxC,CAGGE,OAHH,CAGWC,KAAK,IAAIb,MAAM,CAACc,WAAP,CAAmBD,KAAnB,CAHpB;EAID;;EAED,SAASX,aAAT,CAAuBF,MAAvB,EAA+B;IAC7B,OAAOA,MAAM,CAACe,MAAP,CAAcJ,GAAd,CAAkBP,GAAG,KAAK;MAACC,UAAU,EAAEW,OAAO,CAACZ,GAAD,EAAMJ,MAAM,CAACe,MAAb,CAApB;MAA0CX;IAA1C,CAAL,CAArB,CAAP;EACD;;EAED,SAASY,OAAT,CAAiBH,KAAjB,EAAwBE,MAAxB,EAAgC;IAC9B,OAAOrB,UAAU,CAACuB,IAAX,CAAgBJ,KAAK,CAACL,GAAtB,KAA8BK,KAAK,CAACK,IAAN,KAAe,GAA7C,IAAoDC,YAAY,CAACN,KAAD,EAAQE,MAAR,CAAvE;EACD;;EAED,SAASI,YAAT,CAAsBC,MAAtB,EAA8BL,MAA9B,EAAsC;IACpC,OAAOA,MAAM,CAACM,IAAP,CAAYC,MAAM,IAAIF,MAAM,KAAKE,MAAX,IAC3BF,MAAM,CAACZ,GAAP,KAAec,MAAM,CAACd,GADK,IAE3BY,MAAM,CAACF,IAAP,KAAgBI,MAAM,CAACJ,IAFI,IAG3BE,MAAM,CAACG,SAAP,CAAiBC,MAAjB,KAA4BF,MAAM,CAACC,SAAP,CAAiBC,MAHlB,IAI3BJ,MAAM,CAACG,SAAP,CAAiBE,KAAjB,CAAuBC,GAAG,IAAIJ,MAAM,CAACC,SAAP,CAAiBF,IAAjB,CAAsBM,GAAG,IAAID,GAAG,CAACE,IAAJ,KAAaD,GAAG,CAACC,IAAjB,IAAyBF,GAAG,CAACG,KAAJ,KAAcF,GAAG,CAACE,KAAxE,CAA9B,CAJK,CAAP;EAKD;AACF"}
1
+ {"version":3,"file":"duplicates-ind1.js","names":["tagPattern","RegExp","description","validate","fix","Error","record","invalid","iterateFields","find","obj","validation","valid","messages","tag","filter","item","map","forEach","removeField","fields","matches","field","test","ind1","hasDuplicate","fieldA","some","fieldB","subfields","length","every","aSf","bSf","code","value"],"sources":["../src/duplicates-ind1.js"],"sourcesContent":["export default function (tagPattern) {\n if (tagPattern instanceof RegExp) {\n return {\n description:\n 'Handles data fields that only differ in the first indicator',\n validate,\n fix\n };\n }\n\n throw new Error('No tagPattern provided');\n\n function validate(record) {\n const invalid = iterateFields(record)\n .find(obj => obj.validation === true);\n return invalid ? {valid: false, messages: [`Multiple ${invalid.obj.tag} fields which only differ in the first indicator`]} : {valid: true, messages: []};\n }\n\n function fix(record) {\n iterateFields(record)\n .filter(item => item.validation === false)\n .map(({validation, ...item}) => item) // eslint-disable-line no-unused-vars\n .forEach(({obj}) => record.removeField(obj));\n }\n\n function iterateFields(record) {\n return record.fields.map(obj => ({validation: matches(obj, record.fields), obj}));\n }\n\n function matches(field, fields) {\n return tagPattern.test(field.tag) && field.ind1 === ' ' && hasDuplicate(field, fields);\n }\n\n function hasDuplicate(fieldA, fields) {\n return fields.some(fieldB => fieldA !== fieldB &&\n fieldA.tag === fieldB.tag &&\n fieldA.ind1 !== fieldB.ind1 &&\n fieldA.subfields.length === fieldB.subfields.length &&\n fieldA.subfields.every(aSf => fieldB.subfields.some(bSf => aSf.code === bSf.code && aSf.value === bSf.value)));\n }\n}\n"],"mappings":";;;;;;AAAe,kBAAUA,UAAU,EAAE;EACnC,IAAIA,UAAU,YAAYC,MAAM,EAAE;IAChC,OAAO;MACLC,WAAW,EACT,6DAA6D;MAC/DC,QAAQ;MACRC;IACF,CAAC;EACH;EAEA,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAEzC,SAASF,QAAQ,CAACG,MAAM,EAAE;IACxB,MAAMC,OAAO,GAAGC,aAAa,CAACF,MAAM,CAAC,CAClCG,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACC,UAAU,KAAK,IAAI,CAAC;IACvC,OAAOJ,OAAO,GAAG;MAACK,KAAK,EAAE,KAAK;MAAEC,QAAQ,EAAE,CAAE,YAAWN,OAAO,CAACG,GAAG,CAACI,GAAI,kDAAiD;IAAC,CAAC,GAAG;MAACF,KAAK,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAE,CAAC;EAC1J;EAEA,SAAST,GAAG,CAACE,MAAM,EAAE;IACnBE,aAAa,CAACF,MAAM,CAAC,CAClBS,MAAM,CAACC,IAAI,IAAIA,IAAI,CAACL,UAAU,KAAK,KAAK,CAAC,CACzCM,GAAG,CAAC,CAAC;MAACN,UAAU;MAAE,GAAGK;IAAI,CAAC,KAAKA,IAAI,CAAC,CAAC;IAAA,CACrCE,OAAO,CAAC,CAAC;MAACR;IAAG,CAAC,KAAKJ,MAAM,CAACa,WAAW,CAACT,GAAG,CAAC,CAAC;EAChD;EAEA,SAASF,aAAa,CAACF,MAAM,EAAE;IAC7B,OAAOA,MAAM,CAACc,MAAM,CAACH,GAAG,CAACP,GAAG,KAAK;MAACC,UAAU,EAAEU,OAAO,CAACX,GAAG,EAAEJ,MAAM,CAACc,MAAM,CAAC;MAAEV;IAAG,CAAC,CAAC,CAAC;EACnF;EAEA,SAASW,OAAO,CAACC,KAAK,EAAEF,MAAM,EAAE;IAC9B,OAAOpB,UAAU,CAACuB,IAAI,CAACD,KAAK,CAACR,GAAG,CAAC,IAAIQ,KAAK,CAACE,IAAI,KAAK,GAAG,IAAIC,YAAY,CAACH,KAAK,EAAEF,MAAM,CAAC;EACxF;EAEA,SAASK,YAAY,CAACC,MAAM,EAAEN,MAAM,EAAE;IACpC,OAAOA,MAAM,CAACO,IAAI,CAACC,MAAM,IAAIF,MAAM,KAAKE,MAAM,IAC5CF,MAAM,CAACZ,GAAG,KAAKc,MAAM,CAACd,GAAG,IACzBY,MAAM,CAACF,IAAI,KAAKI,MAAM,CAACJ,IAAI,IAC3BE,MAAM,CAACG,SAAS,CAACC,MAAM,KAAKF,MAAM,CAACC,SAAS,CAACC,MAAM,IACnDJ,MAAM,CAACG,SAAS,CAACE,KAAK,CAACC,GAAG,IAAIJ,MAAM,CAACC,SAAS,CAACF,IAAI,CAACM,GAAG,IAAID,GAAG,CAACE,IAAI,KAAKD,GAAG,CAACC,IAAI,IAAIF,GAAG,CAACG,KAAK,KAAKF,GAAG,CAACE,KAAK,CAAC,CAAC,CAAC;EAClH;AACF"}
@@ -1,109 +1,45 @@
1
1
  "use strict";
2
2
 
3
3
  var _chai = require("chai");
4
-
5
4
  var _marcRecord = require("@natlibfi/marc-record");
6
-
7
- var _duplicatesInd = _interopRequireDefault(require("../src/duplicates-ind1"));
8
-
5
+ var _duplicatesInd = _interopRequireDefault(require("./duplicates-ind1"));
6
+ var _fixura = require("@natlibfi/fixura");
7
+ var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
+ var _debug = _interopRequireDefault(require("debug"));
9
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
-
11
- describe('duplicates-ind1', () => {
12
- it('Creates a validator', async () => {
13
- const validator = await (0, _duplicatesInd.default)(/^245$/u);
14
- (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
15
- (0, _chai.expect)(validator.description).to.be.a('string');
16
- (0, _chai.expect)(validator.validate).to.be.a('function');
17
- });
18
- describe('#validate', () => {
19
- it('Finds the record valid', async () => {
20
- const validator = await (0, _duplicatesInd.default)(/^500$/u);
21
- const record = new _marcRecord.MarcRecord({
22
- fields: [{
23
- tag: '500',
24
- ind1: ' ',
25
- ind2: '0',
26
- subfields: [{
27
- code: 'a',
28
- value: 'foo'
29
- }]
30
- }, {
31
- tag: '500',
32
- ind1: ' ',
33
- ind2: '0',
34
- subfields: [{
35
- code: 'a',
36
- value: 'foo'
37
- }]
38
- }]
39
- });
40
- const result = await validator.validate(record);
41
- (0, _chai.expect)(result).to.eql({
42
- valid: true,
43
- messages: []
44
- });
45
- });
46
- it('Finds the record invalid', async () => {
47
- const validator = await (0, _duplicatesInd.default)(/^500$/u);
48
- const record = new _marcRecord.MarcRecord({
49
- fields: [{
50
- tag: '500',
51
- ind1: ' ',
52
- ind2: '0',
53
- subfields: [{
54
- code: 'a',
55
- value: 'foo'
56
- }]
57
- }, {
58
- tag: '500',
59
- ind1: '1',
60
- ind2: '0',
61
- subfields: [{
62
- code: 'a',
63
- value: 'foo'
64
- }]
65
- }]
66
- });
67
- const result = await validator.validate(record);
68
- (0, _chai.expect)(result).to.eql({
69
- valid: false,
70
- messages: ['Multiple 500 fields which only differ in the first indicator']
71
- });
72
- });
73
- });
74
- describe('#fix', () => {
75
- it('Removes duplicate values', async () => {
76
- const validator = await (0, _duplicatesInd.default)(/^500$/u);
77
- const record = new _marcRecord.MarcRecord({
78
- fields: [{
79
- tag: '500',
80
- ind1: ' ',
81
- ind2: '0',
82
- subfields: [{
83
- code: 'a',
84
- value: 'foo'
85
- }]
86
- }, {
87
- tag: '500',
88
- ind1: '1',
89
- ind2: '0',
90
- subfields: [{
91
- code: 'a',
92
- value: 'foo'
93
- }]
94
- }]
95
- });
96
- await validator.fix(record);
97
- (0, _chai.expect)(record.fields).to.eql([{
98
- tag: '500',
99
- ind1: ' ',
100
- ind2: '0',
101
- subfields: [{
102
- code: 'a',
103
- value: 'foo'
104
- }]
105
- }]);
106
- });
107
- });
10
+ (0, _fixugen.default)({
11
+ callback,
12
+ path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],
13
+ useMetadataFile: true,
14
+ recurse: false,
15
+ fixura: {
16
+ reader: _fixura.READERS.JSON
17
+ },
18
+ mocha: {
19
+ before: () => testValidatorFactory()
20
+ }
108
21
  });
22
+ const debug = (0, _debug.default)('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');
23
+ async function testValidatorFactory() {
24
+ const validator = await (0, _duplicatesInd.default)(/^500$/u);
25
+ (0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
26
+ (0, _chai.expect)(validator.description).to.be.a('string');
27
+ (0, _chai.expect)(validator.validate).to.be.a('function');
28
+ }
29
+ async function callback({
30
+ getFixture,
31
+ tagPattern,
32
+ fix = false
33
+ }) {
34
+ const validator = await (0, _duplicatesInd.default)(new RegExp(tagPattern, 'u'));
35
+ const record = new _marcRecord.MarcRecord(getFixture('record.json'));
36
+ const expectedResult = getFixture('expectedResult.json');
37
+ if (!fix) {
38
+ const result = await validator.validate(record);
39
+ return (0, _chai.expect)(result).to.eql(expectedResult);
40
+ }
41
+ const fixedRecord = await validator.fix(record);
42
+ debug(fixedRecord);
43
+ (0, _chai.expect)(record.fields).to.eql(expectedResult);
44
+ }
109
45
  //# sourceMappingURL=duplicates-ind1.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"duplicates-ind1.spec.js","names":["describe","it","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","record","MarcRecord","fields","tag","ind1","ind2","subfields","code","value","result","eql","valid","messages","fix"],"sources":["../src/duplicates-ind1.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from '../src/duplicates-ind1';\n\ndescribe('duplicates-ind1', () => {\n it('Creates a validator', async () => {\n const validator = await validatorFactory(/^245$/u);\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n });\n\n describe('#validate', () => {\n it('Finds the record valid', async () => {\n const validator = await validatorFactory(/^500$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n it('Finds the record invalid', async () => {\n const validator = await validatorFactory(/^500$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '500',\n ind1: '1',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Multiple 500 fields which only differ in the first indicator']});\n });\n });\n\n describe('#fix', () => {\n it('Removes duplicate values', async () => {\n const validator = await validatorFactory(/^500$/u);\n const record = new MarcRecord({\n fields: [\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n },\n {\n tag: '500',\n ind1: '1',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]\n });\n await validator.fix(record);\n expect(record.fields).to.eql([\n {\n tag: '500',\n ind1: ' ',\n ind2: '0',\n subfields: [{code: 'a', value: 'foo'}]\n }\n ]);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"duplicates-ind1.spec.js","names":["generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","debug","createDebugLogger","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","getFixture","tagPattern","fix","RegExp","record","MarcRecord","expectedResult","result","eql","fixedRecord","fields"],"sources":["../src/duplicates-ind1.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './duplicates-ind1';\n\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\nimport createDebugLogger from 'debug';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'duplicates-ind1'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nconst debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/duplicates-ind1:test');\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory(/^500$/u);\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n}\n\nasync function callback({getFixture, tagPattern, fix = false}) {\n const validator = await validatorFactory(new RegExp(tagPattern, 'u'));\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n\n if (!fix) {\n const result = await validator.validate(record);\n return expect(result).to.eql(expectedResult);\n }\n\n const fixedRecord = await validator.fix(record);\n debug(fixedRecord);\n expect(record.fields).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA;AACA;AACA;AAEA;AACA;AACA;AAAsC;AAEtC,IAAAA,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC;EAC3DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAE,MAAMC,oBAAoB;EACpC;AACF,CAAC,CAAC;AAEF,MAAMC,KAAK,GAAG,IAAAC,cAAiB,EAAC,+DAA+D,CAAC;AAEhG,eAAeF,oBAAoB,GAAG;EACpC,MAAMG,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,QAAQ,CAAC;EAElD,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAChD;AAEA,eAAezB,QAAQ,CAAC;EAAC2B,UAAU;EAAEC,UAAU;EAAEC,GAAG,GAAG;AAAK,CAAC,EAAE;EAC7D,MAAMf,SAAS,GAAG,MAAM,IAAAC,sBAAgB,EAAC,IAAIe,MAAM,CAACF,UAAU,EAAE,GAAG,CAAC,CAAC;EACrE,MAAMG,MAAM,GAAG,IAAIC,sBAAU,CAACL,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMM,cAAc,GAAGN,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACE,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMpB,SAAS,CAACY,QAAQ,CAACK,MAAM,CAAC;IAC/C,OAAO,IAAAf,YAAM,EAACkB,MAAM,CAAC,CAACjB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;EAC9C;EAEA,MAAMG,WAAW,GAAG,MAAMtB,SAAS,CAACe,GAAG,CAACE,MAAM,CAAC;EAC/CnB,KAAK,CAACwB,WAAW,CAAC;EAClB,IAAApB,YAAM,EAACe,MAAM,CAACM,MAAM,CAAC,CAACpB,EAAE,CAACkB,GAAG,CAACF,cAAc,CAAC;AAC9C"}
@@ -8,17 +8,14 @@ const ERRORS = {
8
8
  EMPTY_SUBFIELDS: 2,
9
9
  MISSING_SUBFIELD_VALUES: 3
10
10
  };
11
-
12
11
  function _default() {
13
12
  return {
14
13
  description: 'Handles empty fields',
15
14
  validate,
16
15
  fix
17
16
  };
18
-
19
17
  function validate(record) {
20
18
  const errors = findErrors(record.fields);
21
-
22
19
  if (errors.length > 0) {
23
20
  return {
24
21
  valid: false,
@@ -27,21 +24,17 @@ function _default() {
27
24
  switch (error.code) {
28
25
  case ERRORS.EMPTY_SUBFIELDS:
29
26
  return `Field ${error.field.tag} has no subfields`;
30
-
31
27
  case ERRORS.MISSING_SUBFIELD_VALUES:
32
28
  return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;
33
-
34
29
  default:
35
30
  }
36
31
  })
37
32
  };
38
33
  }
39
-
40
34
  return {
41
35
  valid: true
42
36
  };
43
37
  }
44
-
45
38
  function fix(record) {
46
39
  const errors = findErrors(record.fields);
47
40
  errors.forEach(error => {
@@ -62,7 +55,6 @@ function _default() {
62
55
  }
63
56
  });
64
57
  }
65
-
66
58
  function findErrors(fields) {
67
59
  return fields.reduce((errors, field) => {
68
60
  if (field.subfields) {
@@ -72,9 +64,7 @@ function _default() {
72
64
  code: ERRORS.EMPTY_SUBFIELDS
73
65
  });
74
66
  }
75
-
76
67
  const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);
77
-
78
68
  if (subfieldsWithoutValue.length > 0) {
79
69
  return errors.concat({
80
70
  field,
@@ -83,7 +73,6 @@ function _default() {
83
73
  });
84
74
  }
85
75
  }
86
-
87
76
  return errors;
88
77
  }, []);
89
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statement\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statement\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,CADJ;EAEbC,uBAAuB,EAAE;AAFZ,CAAf;;AAKe,oBAAY;EACzB,OAAO;IACLC,WAAW,EAAE,sBADR;IAELC,QAFK;IAGLC;EAHK,CAAP;;EAMA,SAASD,QAAT,CAAkBE,MAAlB,EAA0B;IACxB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAR,CAAzB;;IACA,IAAIF,MAAM,CAACG,MAAP,GAAgB,CAApB,EAAuB;MACrB,OAAO;QACLC,KAAK,EAAE,KADF;QAELC,QAAQ,EAAEL,MAAM,CAACM,GAAP,CAAWC,KAAK,IAAI;UAAE;UAC9B,QAAQA,KAAK,CAACC,IAAd;YACA,KAAKf,MAAM,CAACC,eAAZ;cACE,OAAQ,SAAQa,KAAK,CAACE,KAAN,CAAYC,GAAI,mBAAhC;;YACF,KAAKjB,MAAM,CAACE,uBAAZ;cACE,OAAQ,SAAQY,KAAK,CAACE,KAAN,CAAYC,GAAI,iCAAgCH,KAAK,CAACI,cAAN,CAAqBL,GAArB,CAAyBM,EAAE,IAAIA,EAAE,CAACJ,IAAlC,EAAwCK,IAAxC,EAA+C,EAA/G;;YACF;UALA;QAOD,CARS;MAFL,CAAP;IAYD;;IAED,OAAO;MAACT,KAAK,EAAE;IAAR,CAAP;EACD;;EAED,SAASN,GAAT,CAAaC,MAAb,EAAqB;IACnB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAR,CAAzB;IACAF,MAAM,CAACc,OAAP,CAAeP,KAAK,IAAI;MACtB,IAAIA,KAAK,CAACC,IAAN,KAAef,MAAM,CAACE,uBAA1B,EAAmD;QAAE;QACnD,IAAIY,KAAK,CAACI,cAAN,CAAqBR,MAArB,KAAgCI,KAAK,CAACE,KAAN,CAAYM,SAAZ,CAAsBZ,MAA1D,EAAkE;UAAE;UAClEJ,MAAM,CAACiB,WAAP,CAAmBT,KAAK,CAACE,KAAzB;QACD,CAFD,MAEO;UAAE;UACPF,KAAK,CAACI,cAAN,CAAqBG,OAArB,CAA6BF,EAAE,IAAI;YACjCb,MAAM,CAACkB,cAAP,CAAsBL,EAAtB,EAA0BL,KAAK,CAACE,KAAhC;UACD,CAFD;QAGD;MACF,CARD,MAQO;QAAE;QACPV,MAAM,CAACiB,WAAP,CAAmBT,KAAK,CAACE,KAAzB;MACD;IACF,CAZD;EAaD;;EAED,SAASR,UAAT,CAAoBC,MAApB,EAA4B;IAC1B,OAAOA,MAAM,CAACgB,MAAP,CAAc,CAAClB,MAAD,EAASS,KAAT,KAAmB;MACtC,IAAIA,KAAK,CAACM,SAAV,EAAqB;QACnB,IAAIN,KAAK,CAACM,SAAN,CAAgBZ,MAAhB,KAA2B,CAA/B,EAAkC;UAChC,OAAOH,MAAM,CAACmB,MAAP,CAAc;YAACV,KAAD;YAAQD,IAAI,EAAEf,MAAM,CAACC;UAArB,CAAd,CAAP;QACD;;QAED,MAAM0B,qBAAqB,GAAGX,KAAK,CAACM,SAAN,CAAgBM,MAAhB,CAAuBT,EAAE,IAAI,CAACA,EAAE,CAACU,KAAjC,CAA9B;;QAEA,IAAIF,qBAAqB,CAACjB,MAAtB,GAA+B,CAAnC,EAAsC;UACpC,OAAOH,MAAM,CAACmB,MAAP,CAAc;YACnBV,KADmB;YAEnBE,cAAc,EAAES,qBAFG;YAGnBZ,IAAI,EAAEf,MAAM,CAACE;UAHM,CAAd,CAAP;QAKD;MACF;;MAED,OAAOK,MAAP;IACD,CAlBM,EAkBJ,EAlBI,CAAP;EAmBD;AACF"}
1
+ {"version":3,"file":"empty-fields.js","names":["ERRORS","EMPTY_SUBFIELDS","MISSING_SUBFIELD_VALUES","description","validate","fix","record","errors","findErrors","fields","length","valid","messages","map","error","code","field","tag","emptySubfields","sf","join","forEach","subfields","removeField","removeSubfield","reduce","concat","subfieldsWithoutValue","filter","value"],"sources":["../src/empty-fields.js"],"sourcesContent":["const ERRORS = {\n EMPTY_SUBFIELDS: 2,\n MISSING_SUBFIELD_VALUES: 3\n};\n\nexport default function () {\n return {\n description: 'Handles empty fields',\n validate,\n fix\n };\n\n function validate(record) {\n const errors = findErrors(record.fields);\n if (errors.length > 0) {\n return {\n valid: false,\n messages: errors.map(error => { // eslint-disable-line array-callback-return\n switch (error.code) {\n case ERRORS.EMPTY_SUBFIELDS:\n return `Field ${error.field.tag} has no subfields`;\n case ERRORS.MISSING_SUBFIELD_VALUES:\n return `Field ${error.field.tag} has missing subfield values: ${error.emptySubfields.map(sf => sf.code).join()}`;\n default:\n }\n })\n };\n }\n\n return {valid: true};\n }\n\n function fix(record) {\n const errors = findErrors(record.fields);\n errors.forEach(error => {\n if (error.code === ERRORS.MISSING_SUBFIELD_VALUES) { // eslint-disable-line functional/no-conditional-statement\n if (error.emptySubfields.length === error.field.subfields.length) { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n } else { // eslint-disable-line functional/no-conditional-statement\n error.emptySubfields.forEach(sf => {\n record.removeSubfield(sf, error.field);\n });\n }\n } else { // eslint-disable-line functional/no-conditional-statement\n record.removeField(error.field);\n }\n });\n }\n\n function findErrors(fields) {\n return fields.reduce((errors, field) => {\n if (field.subfields) {\n if (field.subfields.length === 0) {\n return errors.concat({field, code: ERRORS.EMPTY_SUBFIELDS});\n }\n\n const subfieldsWithoutValue = field.subfields.filter(sf => !sf.value);\n\n if (subfieldsWithoutValue.length > 0) {\n return errors.concat({\n field,\n emptySubfields: subfieldsWithoutValue,\n code: ERRORS.MISSING_SUBFIELD_VALUES\n });\n }\n }\n\n return errors;\n }, []);\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,MAAM,GAAG;EACbC,eAAe,EAAE,CAAC;EAClBC,uBAAuB,EAAE;AAC3B,CAAC;AAEc,oBAAY;EACzB,OAAO;IACLC,WAAW,EAAE,sBAAsB;IACnCC,QAAQ;IACRC;EACF,CAAC;EAED,SAASD,QAAQ,CAACE,MAAM,EAAE;IACxB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxC,IAAIF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAE;MACrB,OAAO;QACLC,KAAK,EAAE,KAAK;QACZC,QAAQ,EAAEL,MAAM,CAACM,GAAG,CAACC,KAAK,IAAI;UAAE;UAC9B,QAAQA,KAAK,CAACC,IAAI;YAClB,KAAKf,MAAM,CAACC,eAAe;cACzB,OAAQ,SAAQa,KAAK,CAACE,KAAK,CAACC,GAAI,mBAAkB;YACpD,KAAKjB,MAAM,CAACE,uBAAuB;cACjC,OAAQ,SAAQY,KAAK,CAACE,KAAK,CAACC,GAAI,iCAAgCH,KAAK,CAACI,cAAc,CAACL,GAAG,CAACM,EAAE,IAAIA,EAAE,CAACJ,IAAI,CAAC,CAACK,IAAI,EAAG,EAAC;YAClH;UAAQ;QAEV,CAAC;MACH,CAAC;IACH;IAEA,OAAO;MAACT,KAAK,EAAE;IAAI,CAAC;EACtB;EAEA,SAASN,GAAG,CAACC,MAAM,EAAE;IACnB,MAAMC,MAAM,GAAGC,UAAU,CAACF,MAAM,CAACG,MAAM,CAAC;IACxCF,MAAM,CAACc,OAAO,CAACP,KAAK,IAAI;MACtB,IAAIA,KAAK,CAACC,IAAI,KAAKf,MAAM,CAACE,uBAAuB,EAAE;QAAE;QACnD,IAAIY,KAAK,CAACI,cAAc,CAACR,MAAM,KAAKI,KAAK,CAACE,KAAK,CAACM,SAAS,CAACZ,MAAM,EAAE;UAAE;UAClEJ,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;QACjC,CAAC,MAAM;UAAE;UACPF,KAAK,CAACI,cAAc,CAACG,OAAO,CAACF,EAAE,IAAI;YACjCb,MAAM,CAACkB,cAAc,CAACL,EAAE,EAAEL,KAAK,CAACE,KAAK,CAAC;UACxC,CAAC,CAAC;QACJ;MACF,CAAC,MAAM;QAAE;QACPV,MAAM,CAACiB,WAAW,CAACT,KAAK,CAACE,KAAK,CAAC;MACjC;IACF,CAAC,CAAC;EACJ;EAEA,SAASR,UAAU,CAACC,MAAM,EAAE;IAC1B,OAAOA,MAAM,CAACgB,MAAM,CAAC,CAAClB,MAAM,EAAES,KAAK,KAAK;MACtC,IAAIA,KAAK,CAACM,SAAS,EAAE;QACnB,IAAIN,KAAK,CAACM,SAAS,CAACZ,MAAM,KAAK,CAAC,EAAE;UAChC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YAACV,KAAK;YAAED,IAAI,EAAEf,MAAM,CAACC;UAAe,CAAC,CAAC;QAC7D;QAEA,MAAM0B,qBAAqB,GAAGX,KAAK,CAACM,SAAS,CAACM,MAAM,CAACT,EAAE,IAAI,CAACA,EAAE,CAACU,KAAK,CAAC;QAErE,IAAIF,qBAAqB,CAACjB,MAAM,GAAG,CAAC,EAAE;UACpC,OAAOH,MAAM,CAACmB,MAAM,CAAC;YACnBV,KAAK;YACLE,cAAc,EAAES,qBAAqB;YACrCZ,IAAI,EAAEf,MAAM,CAACE;UACf,CAAC,CAAC;QACJ;MACF;MAEA,OAAOK,MAAM;IACf,CAAC,EAAE,EAAE,CAAC;EACR;AACF"}