@natlibfi/marc-record-merge 6.0.0-beta.1 → 6.0.0-beta.10

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 (246) hide show
  1. package/.github/CODEOWNERS +9 -0
  2. package/.github/dependabot.yml +41 -0
  3. package/.github/workflows/melinda-node-tests.yml +60 -0
  4. package/LICENSE +21 -0
  5. package/README.md +122 -2
  6. package/dist/index.js +42 -43
  7. package/dist/index.js.map +1 -1
  8. package/dist/reducers/copy.js +232 -83
  9. package/dist/reducers/copy.js.map +1 -1
  10. package/dist/reducers/copy.spec.js +57 -72
  11. package/dist/reducers/copy.spec.js.map +1 -1
  12. package/dist/reducers/index.js +13 -24
  13. package/dist/reducers/index.js.map +1 -1
  14. package/dist/reducers/select.js +33 -51
  15. package/dist/reducers/select.js.map +1 -1
  16. package/dist/reducers/select.spec.js +45 -92
  17. package/dist/reducers/select.spec.js.map +1 -1
  18. package/package.json +33 -32
  19. package/src/index.js +30 -32
  20. package/src/reducers/copy.js +242 -79
  21. package/src/reducers/copy.spec.js +50 -48
  22. package/src/reducers/index.js +3 -30
  23. package/src/reducers/select.js +27 -34
  24. package/src/reducers/select.spec.js +41 -56
  25. package/test-fixtures/reducers/copy/{01/base.json → 01 - copy/01/base.json } +1 -1
  26. package/test-fixtures/reducers/copy/{01 → 01 - copy/01}/merged.json +0 -0
  27. package/test-fixtures/reducers/copy/01 - copy/01/metadata.json +4 -0
  28. package/test-fixtures/reducers/copy/{01 → 01 - copy/01}/source.json +0 -0
  29. package/test-fixtures/reducers/copy/{02/source.json → 01 - copy/02/base.json} +0 -0
  30. package/test-fixtures/reducers/copy/{02 → 01 - copy/02}/merged.json +0 -0
  31. package/test-fixtures/reducers/copy/01 - copy/02/metadata.json +4 -0
  32. package/test-fixtures/reducers/copy/{02/base.json → 01 - copy/02/source.json } +1 -1
  33. package/test-fixtures/reducers/copy/{03/base.json → 01 - copy/03/base.json } +1 -1
  34. package/test-fixtures/reducers/copy/{03 → 01 - copy/03}/merged.json +0 -0
  35. package/test-fixtures/reducers/copy/01 - copy/03/metadata.json +4 -0
  36. package/test-fixtures/reducers/copy/{03 → 01 - copy/03}/source.json +0 -0
  37. package/test-fixtures/reducers/copy/{05/base.json → 01 - copy/04/base.json } +1 -1
  38. package/test-fixtures/reducers/copy/{04/merged.json → 01 - copy/04/merged.json } +1 -1
  39. package/test-fixtures/reducers/copy/01 - copy/04/metadata.json +4 -0
  40. package/test-fixtures/reducers/copy/{04/source.json → 01 - copy/04/source.json } +1 -1
  41. package/test-fixtures/reducers/copy/{04/base.json → 01 - copy/05/base.json } +1 -1
  42. package/test-fixtures/reducers/copy/01 - copy/05/merged.json +77 -0
  43. package/test-fixtures/reducers/copy/01 - copy/05/metadata.json +4 -0
  44. package/test-fixtures/reducers/copy/01 - copy/05/source.json +62 -0
  45. package/test-fixtures/reducers/copy/01 - copy/06/base.json +24 -0
  46. package/test-fixtures/reducers/copy/01 - copy/06/merged.json +39 -0
  47. package/test-fixtures/reducers/copy/01 - copy/06/metadata.json +4 -0
  48. package/test-fixtures/reducers/copy/01 - copy/06/source.json +24 -0
  49. package/test-fixtures/reducers/copy/01 - copy/07/base.json +39 -0
  50. package/test-fixtures/reducers/copy/01 - copy/07/merged.json +39 -0
  51. package/test-fixtures/reducers/copy/01 - copy/07/metadata.json +5 -0
  52. package/test-fixtures/reducers/copy/01 - copy/07/source.json +24 -0
  53. package/test-fixtures/reducers/copy/01 - copy/08/base.json +28 -0
  54. package/test-fixtures/reducers/copy/01 - copy/08/merged.json +28 -0
  55. package/test-fixtures/reducers/copy/01 - copy/08/metadata.json +4 -0
  56. package/test-fixtures/reducers/copy/01 - copy/08/source.json +24 -0
  57. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/base.json +17 -0
  58. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/merged.json +20 -0
  59. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/metadata.json +6 -0
  60. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/01/source.json +20 -0
  61. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/base.json +9 -0
  62. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/merged.json +20 -0
  63. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/metadata.json +6 -0
  64. package/test-fixtures/reducers/copy/02 - doNotCopyIfFieldPresent/02/source.json +20 -0
  65. package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/base.json +24 -0
  66. package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/merged.json +24 -0
  67. package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/metadata.json +5 -0
  68. package/test-fixtures/reducers/copy/03 - compareTagsOnly/01/source.json +24 -0
  69. package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/base.json +24 -0
  70. package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/merged.json +100 -0
  71. package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/metadata.json +5 -0
  72. package/test-fixtures/reducers/copy/03 - compareTagsOnly/02/source.json +100 -0
  73. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/base.json +24 -0
  74. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/merged.json +24 -0
  75. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/metadata.json +5 -0
  76. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/01/source.json +24 -0
  77. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/base.json +24 -0
  78. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/merged.json +39 -0
  79. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/metadata.json +5 -0
  80. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/02/source.json +24 -0
  81. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/03/metadata.json +6 -0
  82. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/base.json +20 -0
  83. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/merged.json +31 -0
  84. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/metadata.json +5 -0
  85. package/test-fixtures/reducers/copy/04 - compareWithoutIndicators/04/source.json +20 -0
  86. package/test-fixtures/reducers/copy/05 - copyUnless/01/base.json +9 -0
  87. package/test-fixtures/reducers/copy/05 - copyUnless/01/merged.json +24 -0
  88. package/test-fixtures/reducers/copy/05 - copyUnless/01/metadata.json +5 -0
  89. package/test-fixtures/reducers/copy/05 - copyUnless/01/source.json +47 -0
  90. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/base.json +24 -0
  91. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/merged.json +39 -0
  92. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/metadata.json +5 -0
  93. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/01/source.json +24 -0
  94. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/base.json +24 -0
  95. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/merged.json +24 -0
  96. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/metadata.json +5 -0
  97. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/02/source.json +24 -0
  98. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/base.json +28 -0
  99. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/merged.json +43 -0
  100. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/metadata.json +5 -0
  101. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/03/source.json +24 -0
  102. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/base.json +28 -0
  103. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/merged.json +28 -0
  104. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/metadata.json +5 -0
  105. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/04/source.json +24 -0
  106. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/base.json +20 -0
  107. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/merged.json +35 -0
  108. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/metadata.json +5 -0
  109. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/05/source.json +24 -0
  110. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/base.json +20 -0
  111. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/merged.json +35 -0
  112. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/metadata.json +5 -0
  113. package/test-fixtures/reducers/copy/06 - subfieldsMustBeIdentical/06/source.json +24 -0
  114. package/test-fixtures/reducers/copy/07 - excludeSubfields/01/base.json +39 -0
  115. package/test-fixtures/reducers/copy/07 - excludeSubfields/01/merged.json +39 -0
  116. package/test-fixtures/reducers/copy/07 - excludeSubfields/01/metadata.json +8 -0
  117. package/test-fixtures/reducers/copy/{05/source.json → 07 - excludeSubfields/01/source.json } +1 -1
  118. package/test-fixtures/reducers/copy/07 - excludeSubfields/02/base.json +39 -0
  119. package/test-fixtures/reducers/copy/{05/merged.json → 07 - excludeSubfields/02/merged.json } +5 -5
  120. package/test-fixtures/reducers/copy/07 - excludeSubfields/02/metadata.json +5 -0
  121. package/test-fixtures/reducers/copy/07 - excludeSubfields/02/source.json +43 -0
  122. package/test-fixtures/reducers/copy/08 - dropSubfields/01/base.json +35 -0
  123. package/test-fixtures/reducers/copy/08 - dropSubfields/01/merged.json +54 -0
  124. package/test-fixtures/reducers/copy/08 - dropSubfields/01/metadata.json +5 -0
  125. package/test-fixtures/reducers/copy/08 - dropSubfields/01/source.json +43 -0
  126. package/test-fixtures/reducers/copy/08 - dropSubfields/02/base.json +43 -0
  127. package/test-fixtures/reducers/copy/08 - dropSubfields/02/merged.json +58 -0
  128. package/test-fixtures/reducers/copy/08 - dropSubfields/02/metadata.json +5 -0
  129. package/test-fixtures/reducers/copy/08 - dropSubfields/02/source.json +32 -0
  130. package/test-fixtures/reducers/copy/08 - dropSubfields/03/base.json +43 -0
  131. package/test-fixtures/reducers/copy/08 - dropSubfields/03/merged.json +58 -0
  132. package/test-fixtures/reducers/copy/08 - dropSubfields/03/metadata.json +5 -0
  133. package/test-fixtures/reducers/copy/08 - dropSubfields/03/source.json +32 -0
  134. package/test-fixtures/reducers/copy/08 - dropSubfields/04/base.json +43 -0
  135. package/test-fixtures/reducers/copy/08 - dropSubfields/04/merged.json +43 -0
  136. package/test-fixtures/reducers/copy/08 - dropSubfields/04/metadata.json +5 -0
  137. package/test-fixtures/reducers/copy/08 - dropSubfields/04/source.json +32 -0
  138. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/base.json +9 -0
  139. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/merged.json +20 -0
  140. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/metadata.json +6 -0
  141. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/01/source.json +20 -0
  142. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/base.json +9 -0
  143. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/merged.json +20 -0
  144. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/metadata.json +6 -0
  145. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/02/source.json +20 -0
  146. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/base.json +9 -0
  147. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/merged.json +31 -0
  148. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/metadata.json +6 -0
  149. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/03/source.json +31 -0
  150. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/base.json +9 -0
  151. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/merged.json +42 -0
  152. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/metadata.json +6 -0
  153. package/test-fixtures/reducers/copy/09 - swapSubfieldCode/04/source.json +42 -0
  154. package/test-fixtures/reducers/copy/10 - swapTag/01/base.json +17 -0
  155. package/test-fixtures/reducers/copy/10 - swapTag/01/merged.json +28 -0
  156. package/test-fixtures/reducers/copy/10 - swapTag/01/metadata.json +6 -0
  157. package/test-fixtures/reducers/copy/10 - swapTag/01/source.json +20 -0
  158. package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/base.json +28 -0
  159. package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/merged.json +28 -0
  160. package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/metadata.json +6 -0
  161. package/test-fixtures/reducers/copy/11 - compareWithoutTag/01/source.json +20 -0
  162. package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/base.json +28 -0
  163. package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/merged.json +39 -0
  164. package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/metadata.json +6 -0
  165. package/test-fixtures/reducers/copy/11 - compareWithoutTag/02/source.json +31 -0
  166. package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/base.json +28 -0
  167. package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/merged.json +28 -0
  168. package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/metadata.json +7 -0
  169. package/test-fixtures/reducers/copy/11 - compareWithoutTag/03/source.json +20 -0
  170. package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/base.json +17 -0
  171. package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/merged.json +28 -0
  172. package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/metadata.json +7 -0
  173. package/test-fixtures/reducers/copy/11 - compareWithoutTag/04/source.json +31 -0
  174. package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/base.json +28 -0
  175. package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/merged.json +28 -0
  176. package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/metadata.json +7 -0
  177. package/test-fixtures/reducers/copy/11 - compareWithoutTag/05/source.json +28 -0
  178. package/test-fixtures/reducers/metadata.json +4 -0
  179. package/test-fixtures/reducers/select/01/metadata.json +5 -0
  180. package/test-fixtures/reducers/select/02/metadata.json +4 -0
  181. package/test-fixtures/reducers/select/03/metadata.json +4 -0
  182. package/test-fixtures/reducers/select/04/metadata.json +5 -0
  183. package/test-fixtures/reducers/select/05/metadata.json +4 -0
  184. package/test-fixtures/reducers/select/06/base.json +4 -0
  185. package/test-fixtures/reducers/select/06/merged.json +4 -0
  186. package/test-fixtures/reducers/select/06/metadata.json +4 -0
  187. package/test-fixtures/reducers/select/06/source.json +4 -0
  188. package/test-fixtures/reducers/select/07/metadata.json +5 -0
  189. package/test-fixtures/reducers/select/08/metadata.json +4 -0
  190. package/test-fixtures/reducers/select/09/metadata.json +4 -0
  191. package/test-fixtures/reducers/select/10/metadata.json +5 -0
  192. package/test-fixtures/reducers/select/11/metadata.json +4 -0
  193. package/test-fixtures/reducers/select/12/metadata.json +5 -0
  194. package/test-fixtures/reducers/select/13/metadata.json +4 -0
  195. package/test-fixtures/reducers/select/14/base.json +24 -0
  196. package/test-fixtures/reducers/select/14/merged.json +24 -0
  197. package/test-fixtures/reducers/select/14/metadata.json +4 -0
  198. package/test-fixtures/reducers/select/14/source.json +24 -0
  199. package/.drone.yml +0 -92
  200. package/.nyc_output/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
  201. package/.nyc_output/processinfo/7ecda3cd-9f84-4416-a466-fa1e5889c6a3.json +0 -1
  202. package/.nyc_output/processinfo/index.json +0 -1
  203. package/LICENSE.txt +0 -165
  204. package/coverage/base.css +0 -224
  205. package/coverage/block-navigation.js +0 -79
  206. package/coverage/copy.js.html +0 -344
  207. package/coverage/favicon.png +0 -0
  208. package/coverage/index.html +0 -126
  209. package/coverage/lcov-report/base.css +0 -224
  210. package/coverage/lcov-report/block-navigation.js +0 -79
  211. package/coverage/lcov-report/copy.js.html +0 -344
  212. package/coverage/lcov-report/favicon.png +0 -0
  213. package/coverage/lcov-report/index.html +0 -126
  214. package/coverage/lcov-report/prettify.css +0 -1
  215. package/coverage/lcov-report/prettify.js +0 -2
  216. package/coverage/lcov-report/select.js.html +0 -431
  217. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  218. package/coverage/lcov-report/sorter.js +0 -170
  219. package/coverage/lcov.info +0 -195
  220. package/coverage/prettify.css +0 -1
  221. package/coverage/prettify.js +0 -2
  222. package/coverage/select.js.html +0 -431
  223. package/coverage/sort-arrow-sprite.png +0 -0
  224. package/coverage/sorter.js +0 -170
  225. package/test-fixtures/reducers/copy/01/pattern.txt +0 -1
  226. package/test-fixtures/reducers/copy/02/pattern.txt +0 -1
  227. package/test-fixtures/reducers/copy/03/pattern.txt +0 -1
  228. package/test-fixtures/reducers/copy/04/pattern.txt +0 -1
  229. package/test-fixtures/reducers/copy/05/pattern.txt +0 -1
  230. package/test-fixtures/reducers/select/01/expected-error.txt +0 -1
  231. package/test-fixtures/reducers/select/01/pattern.txt +0 -1
  232. package/test-fixtures/reducers/select/02/pattern.txt +0 -1
  233. package/test-fixtures/reducers/select/03/pattern.txt +0 -1
  234. package/test-fixtures/reducers/select/04/pattern.txt +0 -1
  235. package/test-fixtures/reducers/select/05/pattern.txt +0 -1
  236. package/test-fixtures/reducers/select/06/pattern.txt +0 -1
  237. package/test-fixtures/reducers/select/07/equalityFunction.txt +0 -1
  238. package/test-fixtures/reducers/select/07/pattern.txt +0 -1
  239. package/test-fixtures/reducers/select/08/pattern.txt +0 -1
  240. package/test-fixtures/reducers/select/09/pattern.txt +0 -1
  241. package/test-fixtures/reducers/select/10/equalityFunction.txt +0 -1
  242. package/test-fixtures/reducers/select/10/pattern.txt +0 -1
  243. package/test-fixtures/reducers/select/11/pattern.txt +0 -1
  244. package/test-fixtures/reducers/select/12/equalityFunction.txt +0 -1
  245. package/test-fixtures/reducers/select/12/pattern.txt +0 -1
  246. package/test-fixtures/reducers/select/13/pattern.txt +0 -1
@@ -3,67 +3,49 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.default = void 0;
6
7
  exports.strictEquality = strictEquality;
7
8
  exports.subsetEquality = subsetEquality;
8
- exports.default = void 0;
9
-
10
9
  var _normalizeDiacritics = require("normalize-diacritics");
11
-
12
- /**
13
- *
14
- * @licstart The following is the entire license notice for the JavaScript code in this file.
15
- *
16
- * Merge MARC records
17
- *
18
- * Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
19
- *
20
- * This file is part of marc-record-merge-js
21
-
22
- * marc-record-merge-js program is free software: you can redistribute it and/or modify
23
- * it under the terms of the GNU Lesser General Public License as
24
- * published by the Free Software Foundation, either version 3 of the
25
- * License, or (at your option) any later version.
26
- *
27
- * marc-record-merge-js is distributed in the hope that it will be useful,
28
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
29
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30
- * GNU Lesser General Public License for more details.
31
- *
32
- * You should have received a copy of the GNU Lesser General Public License
33
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
34
- *
35
- * @licend The above is the entire license notice
36
- * for the JavaScript code in this file.
37
- *
38
- */
10
+ var _debug = _interopRequireDefault(require("debug"));
11
+ var _marcRecord = require("@natlibfi/marc-record");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
39
13
  function strictEquality(subfieldA, subfieldB) {
40
14
  return subfieldA.code === subfieldB.code && subfieldA.value === subfieldB.value;
41
15
  }
42
-
43
16
  function subsetEquality(subfieldA, subfieldB) {
44
17
  return subfieldA.code === subfieldB.code && (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);
45
18
  }
46
-
19
+ // EqualityFunction can be either strictEquality or subsetEquality
47
20
  var _default = ({
48
- pattern,
21
+ tagPattern,
49
22
  equalityFunction = strictEquality
50
23
  }) => (base, source) => {
51
- const baseFields = base.get(pattern);
52
- const sourceFields = source.get(pattern);
24
+ const debug = (0, _debug.default)('@natlibfi/marc-record-merge:select');
25
+ const baseRecord = new _marcRecord.MarcRecord(base, {
26
+ subfieldValues: false
27
+ });
28
+ const sourceRecord = new _marcRecord.MarcRecord(source, {
29
+ subfieldValues: false
30
+ });
31
+ const baseFields = baseRecord.get(tagPattern);
32
+ const sourceFields = sourceRecord.get(tagPattern);
33
+ const fieldTag = sourceFields.map(field => field.tag);
34
+ debug(`Comparing field ${fieldTag}`);
53
35
  checkFieldType(baseFields);
54
36
  checkFieldType(sourceFields);
55
-
56
37
  if (baseFields.length > 1 || sourceFields.length > 1) {
38
+ debug(`Multiple fields in base or source`);
39
+ debug(`No changes to base`);
57
40
  return base;
58
41
  }
59
-
60
42
  const [baseField] = baseFields;
61
43
  const [sourceField] = sourceFields;
62
-
63
44
  if (baseField.tag === sourceField.tag === false) {
45
+ debug(`Base tag ${baseField.tag} is not equal to source tag ${sourceField.tag}`);
46
+ debug(`No changes to base`);
64
47
  return base;
65
48
  }
66
-
67
49
  const baseSubs = baseField.subfields;
68
50
  const sourceSubs = sourceField.subfields;
69
51
  const baseSubsNormalized = baseSubs.map(({
@@ -80,57 +62,57 @@ var _default = ({
80
62
  code,
81
63
  value: normalizeSubfieldValue(value)
82
64
  }));
65
+
66
+ // Returns the base subfields for which a matching source subfield is found
83
67
  const equalSubfieldsBase = baseSubsNormalized.filter(baseSubfield => sourceSubsNormalized.some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));
84
- const equalSubfieldsSource = sourceSubsNormalized.filter(sourceSubfield => baseSubsNormalized.some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));
68
+ debug(`equalSubfieldsBase: ${JSON.stringify(equalSubfieldsBase, undefined, 2)}`);
85
69
 
70
+ // Returns the source subfields for which a matching base subfield is found
71
+ const equalSubfieldsSource = sourceSubsNormalized.filter(sourceSubfield => baseSubsNormalized.some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));
72
+ debug(`equalSubfieldsSource: ${JSON.stringify(equalSubfieldsSource, undefined, 2)}`);
86
73
  if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {
74
+ debug(`Base and source subfields are not equal`);
75
+ debug(`No changes to base`);
87
76
  return base;
88
77
  }
89
-
90
78
  if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {
79
+ debug(`Checking subfield equality`);
91
80
  const totalSubfieldLengthBase = baseSubsNormalized.map(({
92
81
  value
93
82
  }) => value.length).reduce((acc, value) => acc + value);
94
83
  const totalSubfieldLengthSource = sourceSubsNormalized.map(({
95
84
  value
96
85
  }) => value.length).reduce((acc, value) => acc + value);
97
-
98
86
  if (totalSubfieldLengthSource > totalSubfieldLengthBase) {
99
87
  return replaceBasefieldWithSourcefield(base);
100
88
  }
101
89
  }
102
-
103
90
  if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {
104
91
  return replaceBasefieldWithSourcefield(base);
105
92
  }
106
-
93
+ debug(`No changes to base`);
107
94
  return base;
108
-
109
95
  function replaceBasefieldWithSourcefield(base) {
110
96
  const index = base.fields.findIndex(field => field === baseField);
111
97
  base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data
112
-
98
+ debug(`Source field is longer, replacing base with source`);
113
99
  return base;
114
100
  }
115
-
116
101
  function checkFieldType(fields) {
117
102
  const checkedFields = fields.map(field => {
118
103
  if ('value' in field) {
119
104
  // eslint-disable-line functional/no-conditional-statement
120
105
  throw new Error('Invalid control field, expected data field');
121
106
  }
122
-
123
107
  return field;
124
108
  });
125
109
  return checkedFields;
126
110
  }
127
-
128
111
  function normalizeSubfieldValue(value) {
129
112
  // Regexp options: g: global search, u: unicode
130
- const punctuation = /[.,\-/#!$%^&*;:{}=_`~()[\]]/gu;
113
+ const punctuation = /[.,\-/#!?$%^&*;:{}=_`~()[\]]/gu;
131
114
  return (0, _normalizeDiacritics.normalizeSync)(value).toLowerCase().replace(punctuation, '', 'u').replace(/\s+/gu, ' ').trim();
132
115
  }
133
116
  };
134
-
135
117
  exports.default = _default;
136
118
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/reducers/select.js"],"names":["strictEquality","subfieldA","subfieldB","code","value","subsetEquality","indexOf","pattern","equalityFunction","base","source","baseFields","get","sourceFields","checkFieldType","length","baseField","sourceField","tag","baseSubs","subfields","sourceSubs","baseSubsNormalized","map","normalizeSubfieldValue","sourceSubsNormalized","equalSubfieldsBase","filter","baseSubfield","some","sourceSubfield","equalSubfieldsSource","totalSubfieldLengthBase","reduce","acc","totalSubfieldLengthSource","replaceBasefieldWithSourcefield","index","fields","findIndex","field","splice","checkedFields","Error","punctuation","toLowerCase","replace","trim"],"mappings":"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","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Merge MARC records\n*\n* Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-merge-js\n\n* marc-record-merge-js program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-merge-js is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\nimport {normalizeSync} from 'normalize-diacritics';\n\nexport function strictEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n subfieldA.value === subfieldB.value;\n}\n\nexport function subsetEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);\n}\n\nexport default ({pattern, equalityFunction = strictEquality}) => (base, source) => {\n const baseFields = base.get(pattern);\n const sourceFields = source.get(pattern);\n\n checkFieldType(baseFields);\n checkFieldType(sourceFields);\n\n if (baseFields.length > 1 || sourceFields.length > 1) {\n return base;\n }\n const [baseField] = baseFields;\n const [sourceField] = sourceFields;\n\n if (baseField.tag === sourceField.tag === false) {\n return base;\n }\n const baseSubs = baseField.subfields;\n const sourceSubs = sourceField.subfields;\n\n const baseSubsNormalized = baseSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const sourceSubsNormalized = sourceSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const equalSubfieldsBase = baseSubsNormalized\n .filter(baseSubfield => sourceSubsNormalized\n .some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));\n\n const equalSubfieldsSource = sourceSubsNormalized\n .filter(sourceSubfield => baseSubsNormalized\n .some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {\n return base;\n }\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {\n const totalSubfieldLengthBase = baseSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n const totalSubfieldLengthSource = sourceSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n\n if (totalSubfieldLengthSource > totalSubfieldLengthBase) {\n return replaceBasefieldWithSourcefield(base);\n }\n }\n\n if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {\n return replaceBasefieldWithSourcefield(base);\n }\n\n return base;\n\n function replaceBasefieldWithSourcefield(base) {\n const index = base.fields.findIndex(field => field === baseField);\n base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data\n return base;\n }\n\n function checkFieldType(fields) {\n const checkedFields = fields.map(field => {\n if ('value' in field) { // eslint-disable-line functional/no-conditional-statement\n throw new Error('Invalid control field, expected data field');\n }\n return field;\n });\n return checkedFields;\n }\n\n function normalizeSubfieldValue(value) {\n // Regexp options: g: global search, u: unicode\n const punctuation = /[.,\\-/#!$%^&*;:{}=_`~()[\\]]/gu;\n return normalizeSync(value).toLowerCase().replace(punctuation, '', 'u').replace(/\\s+/gu, ' ').trim();\n }\n};\n"],"file":"select.js"}
1
+ {"version":3,"file":"select.js","names":["strictEquality","subfieldA","subfieldB","code","value","subsetEquality","indexOf","tagPattern","equalityFunction","base","source","debug","createDebugLogger","baseRecord","MarcRecord","subfieldValues","sourceRecord","baseFields","get","sourceFields","fieldTag","map","field","tag","checkFieldType","length","baseField","sourceField","baseSubs","subfields","sourceSubs","baseSubsNormalized","normalizeSubfieldValue","sourceSubsNormalized","equalSubfieldsBase","filter","baseSubfield","some","sourceSubfield","JSON","stringify","undefined","equalSubfieldsSource","totalSubfieldLengthBase","reduce","acc","totalSubfieldLengthSource","replaceBasefieldWithSourcefield","index","fields","findIndex","splice","checkedFields","Error","punctuation","normalizeSync","toLowerCase","replace","trim"],"sources":["../../src/reducers/select.js"],"sourcesContent":["import {normalizeSync} from 'normalize-diacritics';\nimport createDebugLogger from 'debug';\nimport {MarcRecord} from '@natlibfi/marc-record';\n\nexport function strictEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n subfieldA.value === subfieldB.value;\n}\n\nexport function subsetEquality(subfieldA, subfieldB) {\n return subfieldA.code === subfieldB.code &&\n (subfieldA.value.indexOf(subfieldB.value) !== -1 || subfieldB.value.indexOf(subfieldA.value) !== -1);\n}\n// EqualityFunction can be either strictEquality or subsetEquality\nexport default ({tagPattern, equalityFunction = strictEquality}) => (base, source) => {\n const debug = createDebugLogger('@natlibfi/marc-record-merge:select');\n const baseRecord = new MarcRecord(base, {subfieldValues: false});\n const sourceRecord = new MarcRecord(source, {subfieldValues: false});\n const baseFields = baseRecord.get(tagPattern);\n const sourceFields = sourceRecord.get(tagPattern);\n const fieldTag = sourceFields.map(field => field.tag);\n debug(`Comparing field ${fieldTag}`);\n\n checkFieldType(baseFields);\n checkFieldType(sourceFields);\n\n if (baseFields.length > 1 || sourceFields.length > 1) {\n debug(`Multiple fields in base or source`);\n debug(`No changes to base`);\n return base;\n }\n const [baseField] = baseFields;\n const [sourceField] = sourceFields;\n\n if (baseField.tag === sourceField.tag === false) {\n debug(`Base tag ${baseField.tag} is not equal to source tag ${sourceField.tag}`);\n debug(`No changes to base`);\n return base;\n }\n const baseSubs = baseField.subfields;\n const sourceSubs = sourceField.subfields;\n\n const baseSubsNormalized = baseSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n const sourceSubsNormalized = sourceSubs\n .map(({code, value}) => ({code, value: normalizeSubfieldValue(value)}));\n\n // Returns the base subfields for which a matching source subfield is found\n const equalSubfieldsBase = baseSubsNormalized\n .filter(baseSubfield => sourceSubsNormalized\n .some(sourceSubfield => equalityFunction(baseSubfield, sourceSubfield)));\n debug(`equalSubfieldsBase: ${JSON.stringify(equalSubfieldsBase, undefined, 2)}`);\n\n // Returns the source subfields for which a matching base subfield is found\n const equalSubfieldsSource = sourceSubsNormalized\n .filter(sourceSubfield => baseSubsNormalized\n .some(baseSubfield => equalityFunction(sourceSubfield, baseSubfield)));\n debug(`equalSubfieldsSource: ${JSON.stringify(equalSubfieldsSource, undefined, 2)}`);\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length < baseSubs.length) {\n debug(`Base and source subfields are not equal`);\n debug(`No changes to base`);\n return base;\n }\n\n if (baseSubs.length === sourceSubs.length && equalSubfieldsBase.length === equalSubfieldsSource.length) {\n debug(`Checking subfield equality`);\n const totalSubfieldLengthBase = baseSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n const totalSubfieldLengthSource = sourceSubsNormalized\n .map(({value}) => value.length)\n .reduce((acc, value) => acc + value);\n\n if (totalSubfieldLengthSource > totalSubfieldLengthBase) {\n return replaceBasefieldWithSourcefield(base);\n }\n }\n\n if (sourceSubs.length > baseSubs.length && equalSubfieldsBase.length === baseSubs.length) {\n return replaceBasefieldWithSourcefield(base);\n }\n\n debug(`No changes to base`);\n return base;\n\n function replaceBasefieldWithSourcefield(base) {\n const index = base.fields.findIndex(field => field === baseField);\n base.fields.splice(index, 1, sourceField); // eslint-disable-line functional/immutable-data\n debug(`Source field is longer, replacing base with source`);\n return base;\n }\n\n function checkFieldType(fields) {\n const checkedFields = fields.map(field => {\n if ('value' in field) { // eslint-disable-line functional/no-conditional-statement\n throw new Error('Invalid control field, expected data field');\n }\n return field;\n });\n return checkedFields;\n }\n\n function normalizeSubfieldValue(value) {\n // Regexp options: g: global search, u: unicode\n const punctuation = /[.,\\-/#!?$%^&*;:{}=_`~()[\\]]/gu;\n return normalizeSync(value).toLowerCase().replace(punctuation, '', 'u').replace(/\\s+/gu, ' ').trim();\n }\n};\n"],"mappings":"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"}
@@ -1,102 +1,55 @@
1
1
  "use strict";
2
2
 
3
- var _chai = _interopRequireDefault(require("chai"));
4
-
5
- var _fs = _interopRequireDefault(require("fs"));
6
-
7
- var _path = _interopRequireDefault(require("path"));
8
-
3
+ var _chai = require("chai");
9
4
  var _marcRecord = require("@natlibfi/marc-record");
10
-
11
5
  var _select = _interopRequireWildcard(require("./select"));
12
-
13
- var _fixura = _interopRequireWildcard(require("@natlibfi/fixura"));
14
-
15
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
16
-
17
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
-
6
+ var _fixura = require("@natlibfi/fixura");
7
+ var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
19
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
-
21
- /**
22
- *
23
- * @licstart The following is the entire license notice for the JavaScript code in this file.
24
- *
25
- * Merge MARC records
26
- *
27
- * Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
28
- *
29
- * This file is part of marc-record-merge-js
30
-
31
- * marc-record-merge-js program is free software: you can redistribute it and/or modify
32
- * it under the terms of the GNU Lesser General Public License as
33
- * published by the Free Software Foundation, either version 3 of the
34
- * License, or (at your option) any later version.
35
- *
36
- * marc-record-merge-js is distributed in the hope that it will be useful,
37
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
38
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39
- * GNU Lesser General Public License for more details.
40
- *
41
- * You should have received a copy of the GNU Lesser General Public License
42
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
43
- *
44
- * @licend The above is the entire license notice
45
- * for the JavaScript code in this file.
46
- *
47
- */
9
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
10
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
48
11
  _marcRecord.MarcRecord.setValidationOptions({
49
12
  subfieldValues: false
50
13
  });
51
-
52
- describe('reducers/select', () => {
53
- const {
54
- expect
55
- } = _chai.default;
56
-
57
- const fixturesPath = _path.default.join(__dirname, '..', '..', 'test-fixtures', 'reducers', 'select');
58
-
59
- _fs.default.readdirSync(fixturesPath).forEach(subDir => {
60
- const {
61
- getFixture
62
- } = (0, _fixura.default)({
63
- root: [fixturesPath, subDir],
64
- reader: _fixura.READERS.JSON,
65
- failWhenNotFound: false
66
- });
67
- it(subDir, () => {
68
- const baseTest = new _marcRecord.MarcRecord(getFixture('base.json'));
69
- const sourceTest = new _marcRecord.MarcRecord(getFixture('source.json'));
70
- const patternTest = new RegExp(getFixture({
71
- components: ['pattern.txt'],
72
- reader: _fixura.READERS.TEXT
73
- }), 'u');
74
- const expectedRecord = getFixture('merged.json');
75
- const expectedError = getFixture({
76
- components: ['expected-error.txt'],
77
- reader: _fixura.READERS.TEXT
78
- });
79
- const equalityFunction = getEqualityFunction();
80
-
81
- if (expectedError) {
82
- expect(() => _select.default.to.throw(Error, 'control field'));
83
- return;
84
- }
85
-
86
- const mergedRecord = (0, _select.default)({
87
- pattern: patternTest,
88
- equalityFunction
89
- })(baseTest, sourceTest);
90
- expect(mergedRecord.toObject()).to.eql(expectedRecord);
91
-
92
- function getEqualityFunction() {
93
- const functionName = getFixture({
94
- components: ['equalityFunction.txt'],
95
- reader: _fixura.READERS.TEXT
96
- });
97
- return functionName === 'subsetEquality' ? _select.subsetEquality : undefined;
98
- }
99
- });
100
- });
14
+ (0, _fixugen.default)({
15
+ callback,
16
+ path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],
17
+ useMetadataFile: true,
18
+ recurse: false,
19
+ fixura: {
20
+ reader: _fixura.READERS.JSON,
21
+ failWhenNotFound: false
22
+ }
101
23
  });
24
+ function callback({
25
+ getFixture,
26
+ disabled = false,
27
+ tagPatternRegExp = false,
28
+ expectedError = false,
29
+ useSubsetEquality = false
30
+ }) {
31
+ if (disabled) {
32
+ console.log('TEST DISABLED!'); // eslint-disable-line no-console
33
+ return;
34
+ }
35
+ // const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});
36
+ // const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});
37
+
38
+ const base = getFixture('base.json');
39
+ const source = getFixture('source.json');
40
+ const tagPattern = new RegExp(tagPatternRegExp, 'u');
41
+ const expectedRecord = getFixture('merged.json');
42
+ const equalityFunction = useSubsetEquality ? _select.subsetEquality : undefined;
43
+
44
+ // Bypass expected error in testing
45
+ if (expectedError) {
46
+ (0, _chai.expect)(() => _select.default.to.throw(Error, 'control field'));
47
+ return;
48
+ }
49
+ const mergedRecord = (0, _select.default)({
50
+ tagPattern,
51
+ equalityFunction
52
+ })(base, source);
53
+ (0, _chai.expect)(mergedRecord).to.eql(expectedRecord);
54
+ }
102
55
  //# sourceMappingURL=select.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/reducers/select.spec.js"],"names":["MarcRecord","setValidationOptions","subfieldValues","describe","expect","chai","fixturesPath","path","join","__dirname","fs","readdirSync","forEach","subDir","getFixture","root","reader","READERS","JSON","failWhenNotFound","it","baseTest","sourceTest","patternTest","RegExp","components","TEXT","expectedRecord","expectedError","equalityFunction","getEqualityFunction","createReducer","to","throw","Error","mergedRecord","pattern","toObject","eql","functionName","subsetEquality","undefined"],"mappings":";;AA2BA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAhCA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCAA,uBAAWC,oBAAX,CAAgC;AAACC,EAAAA,cAAc,EAAE;AAAjB,CAAhC;;AAEAC,QAAQ,CAAC,iBAAD,EAAoB,MAAM;AAChC,QAAM;AAACC,IAAAA;AAAD,MAAWC,aAAjB;;AACA,QAAMC,YAAY,GAAGC,cAAKC,IAAL,CAAUC,SAAV,EAAqB,IAArB,EAA2B,IAA3B,EAAiC,eAAjC,EAAkD,UAAlD,EAA8D,QAA9D,CAArB;;AAEAC,cAAGC,WAAH,CAAeL,YAAf,EAA6BM,OAA7B,CAAqCC,MAAM,IAAI;AAC7C,UAAM;AAACC,MAAAA;AAAD,QAAe,qBAAgB;AAACC,MAAAA,IAAI,EAAE,CAACT,YAAD,EAAeO,MAAf,CAAP;AAA+BG,MAAAA,MAAM,EAAEC,gBAAQC,IAA/C;AAAqDC,MAAAA,gBAAgB,EAAE;AAAvE,KAAhB,CAArB;AACAC,IAAAA,EAAE,CAACP,MAAD,EAAS,MAAM;AACf,YAAMQ,QAAQ,GAAG,IAAIrB,sBAAJ,CAAec,UAAU,CAAC,WAAD,CAAzB,CAAjB;AACA,YAAMQ,UAAU,GAAG,IAAItB,sBAAJ,CAAec,UAAU,CAAC,aAAD,CAAzB,CAAnB;AACA,YAAMS,WAAW,GAAG,IAAIC,MAAJ,CAAWV,UAAU,CAAC;AAACW,QAAAA,UAAU,EAAE,CAAC,aAAD,CAAb;AAA8BT,QAAAA,MAAM,EAAEC,gBAAQS;AAA9C,OAAD,CAArB,EAA4E,GAA5E,CAApB;AACA,YAAMC,cAAc,GAAGb,UAAU,CAAC,aAAD,CAAjC;AACA,YAAMc,aAAa,GAAGd,UAAU,CAAC;AAACW,QAAAA,UAAU,EAAE,CAAC,oBAAD,CAAb;AAAqCT,QAAAA,MAAM,EAAEC,gBAAQS;AAArD,OAAD,CAAhC;AACA,YAAMG,gBAAgB,GAAGC,mBAAmB,EAA5C;;AAEA,UAAIF,aAAJ,EAAmB;AACjBxB,QAAAA,MAAM,CAAC,MAAM2B,gBAAcC,EAAd,CAAiBC,KAAjB,CAAuBC,KAAvB,EAA8B,eAA9B,CAAP,CAAN;AACA;AACD;;AACD,YAAMC,YAAY,GAAG,qBAAc;AAACC,QAAAA,OAAO,EAAEb,WAAV;AAAuBM,QAAAA;AAAvB,OAAd,EAAwDR,QAAxD,EAAkEC,UAAlE,CAArB;AACAlB,MAAAA,MAAM,CAAC+B,YAAY,CAACE,QAAb,EAAD,CAAN,CAAgCL,EAAhC,CAAmCM,GAAnC,CAAuCX,cAAvC;;AAEA,eAASG,mBAAT,GAA+B;AAC7B,cAAMS,YAAY,GAAGzB,UAAU,CAAC;AAACW,UAAAA,UAAU,EAAE,CAAC,sBAAD,CAAb;AAAuCT,UAAAA,MAAM,EAAEC,gBAAQS;AAAvD,SAAD,CAA/B;AACA,eAAOa,YAAY,KAAK,gBAAjB,GAAoCC,sBAApC,GAAqDC,SAA5D;AACD;AACF,KAnBC,CAAF;AAoBD,GAtBD;AAuBD,CA3BO,CAAR","sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Merge MARC records\n*\n* Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of marc-record-merge-js\n\n* marc-record-merge-js program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Lesser General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* marc-record-merge-js is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Lesser General Public License for more details.\n*\n* You should have received a copy of the GNU Lesser General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\nimport chai from 'chai';\nimport fs from 'fs';\nimport path from 'path';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createReducer, {subsetEquality} from './select';\nimport fixturesFactory, {READERS} from '@natlibfi/fixura';\n\nMarcRecord.setValidationOptions({subfieldValues: false});\n\ndescribe('reducers/select', () => {\n const {expect} = chai;\n const fixturesPath = path.join(__dirname, '..', '..', 'test-fixtures', 'reducers', 'select');\n\n fs.readdirSync(fixturesPath).forEach(subDir => {\n const {getFixture} = fixturesFactory({root: [fixturesPath, subDir], reader: READERS.JSON, failWhenNotFound: false});\n it(subDir, () => {\n const baseTest = new MarcRecord(getFixture('base.json'));\n const sourceTest = new MarcRecord(getFixture('source.json'));\n const patternTest = new RegExp(getFixture({components: ['pattern.txt'], reader: READERS.TEXT}), 'u');\n const expectedRecord = getFixture('merged.json');\n const expectedError = getFixture({components: ['expected-error.txt'], reader: READERS.TEXT});\n const equalityFunction = getEqualityFunction();\n\n if (expectedError) {\n expect(() => createReducer.to.throw(Error, 'control field'));\n return;\n }\n const mergedRecord = createReducer({pattern: patternTest, equalityFunction})(baseTest, sourceTest);\n expect(mergedRecord.toObject()).to.eql(expectedRecord);\n\n function getEqualityFunction() {\n const functionName = getFixture({components: ['equalityFunction.txt'], reader: READERS.TEXT});\n return functionName === 'subsetEquality' ? subsetEquality : undefined;\n }\n });\n });\n});\n"],"file":"select.spec.js"}
1
+ {"version":3,"file":"select.spec.js","names":["MarcRecord","setValidationOptions","subfieldValues","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","failWhenNotFound","getFixture","disabled","tagPatternRegExp","expectedError","useSubsetEquality","console","log","base","source","tagPattern","RegExp","expectedRecord","equalityFunction","subsetEquality","undefined","expect","createReducer","to","throw","Error","mergedRecord","eql"],"sources":["../../src/reducers/select.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport createReducer, {subsetEquality} from './select';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\nMarcRecord.setValidationOptions({subfieldValues: false});\n\ngenerateTests({\n callback,\n path: [__dirname, '..', '..', 'test-fixtures', 'reducers', 'select'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON,\n failWhenNotFound: false\n }\n});\n\nfunction callback({\n getFixture,\n disabled = false,\n tagPatternRegExp = false,\n expectedError = false,\n useSubsetEquality = false\n}) {\n if (disabled) {\n console.log('TEST DISABLED!'); // eslint-disable-line no-console\n return;\n }\n // const base = new MarcRecord(getFixture('base.json'), {subfieldValues: false});\n // const source = new MarcRecord(getFixture('source.json'), {subfieldValues: false});\n\n const base = getFixture('base.json');\n const source = getFixture('source.json');\n\n const tagPattern = new RegExp(tagPatternRegExp, 'u');\n const expectedRecord = getFixture('merged.json');\n const equalityFunction = useSubsetEquality ? subsetEquality : undefined;\n\n // Bypass expected error in testing\n if (expectedError) {\n expect(() => createReducer.to.throw(Error, 'control field'));\n return;\n }\n\n const mergedRecord = createReducer({tagPattern, equalityFunction})(base, source);\n expect(mergedRecord).to.eql(expectedRecord);\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AAA8C;AAAA;AAAA;AAE9CA,sBAAU,CAACC,oBAAoB,CAAC;EAACC,cAAc,EAAE;AAAK,CAAC,CAAC;AAExD,IAAAC,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,CAAC;EACpEC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC,IAAI;IACpBC,gBAAgB,EAAE;EACpB;AACF,CAAC,CAAC;AAEF,SAAST,QAAQ,CAAC;EAChBU,UAAU;EACVC,QAAQ,GAAG,KAAK;EAChBC,gBAAgB,GAAG,KAAK;EACxBC,aAAa,GAAG,KAAK;EACrBC,iBAAiB,GAAG;AACtB,CAAC,EAAE;EACD,IAAIH,QAAQ,EAAE;IACZI,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/B;EACF;EACA;EACA;;EAEA,MAAMC,IAAI,GAAGP,UAAU,CAAC,WAAW,CAAC;EACpC,MAAMQ,MAAM,GAAGR,UAAU,CAAC,aAAa,CAAC;EAExC,MAAMS,UAAU,GAAG,IAAIC,MAAM,CAACR,gBAAgB,EAAE,GAAG,CAAC;EACpD,MAAMS,cAAc,GAAGX,UAAU,CAAC,aAAa,CAAC;EAChD,MAAMY,gBAAgB,GAAGR,iBAAiB,GAAGS,sBAAc,GAAGC,SAAS;;EAEvE;EACA,IAAIX,aAAa,EAAE;IACjB,IAAAY,YAAM,EAAC,MAAMC,eAAa,CAACC,EAAE,CAACC,KAAK,CAACC,KAAK,EAAE,eAAe,CAAC,CAAC;IAC5D;EACF;EAEA,MAAMC,YAAY,GAAG,IAAAJ,eAAa,EAAC;IAACP,UAAU;IAAEG;EAAgB,CAAC,CAAC,CAACL,IAAI,EAAEC,MAAM,CAAC;EAChF,IAAAO,YAAM,EAACK,YAAY,CAAC,CAACH,EAAE,CAACI,GAAG,CAACV,cAAc,CAAC;AAC7C"}
package/package.json CHANGED
@@ -13,46 +13,50 @@
13
13
  "type": "git",
14
14
  "url": "git@github.com:natlibfi/marc-record-merge-js.git"
15
15
  },
16
- "license": "LGPL-3.0+",
17
- "version": "6.0.0-beta.1",
16
+ "license": "MIT",
17
+ "version": "6.0.0-beta.10",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
- "node": ">=12"
20
+ "node": ">=14"
21
21
  },
22
+ "type": "commonjs",
22
23
  "scripts": {
24
+ "prepare": "npm run build",
23
25
  "prepublishOnly": "npm run build:transpile",
24
- "check-deps": "npm-check;exit 0",
25
26
  "lint": "eslint ./src",
26
27
  "lint:dev": "eslint ./src --fix",
27
- "test:base": "cross-env NODE_ENV=test nyc mocha --require @babel/register",
28
- "test": "npm run lint && npm run test:base -- src/**/*.spec.js",
29
- "test:dev": "npm run lint:dev && npm run test:base -- src/**/*.spec.js && npm run coverage",
30
- "coverage": "nyc check-coverage --per-file",
28
+ "test:base": "cross-env NODE_ENV=test mocha --require @babel/register --reporter-option maxDiffSize=15000 src/reducers/*.spec.js",
29
+ "test": "npm run lint && npm run test:base",
30
+ "test:dev": "npm run lint:dev && npm run coverage",
31
+ "coverage": "npm run coverage:unit && npm run coverage:report",
32
+ "coverage:unit": "nyc --silent npm run test:base",
33
+ "coverage:report": "nyc report",
31
34
  "build:transpile": "babel src --copy-files --source-maps --delete-dir-on-start --out-dir=dist",
32
- "build": "npm run build:transpile && npm run check-deps",
33
- "watch:test": "cross-env DEBUG=1 NODE_ENV=test nodemon -w src -w test-fixtures --exec 'npm run test:dev'"
35
+ "build": "npm run build:transpile",
36
+ "dev:test": "cross-env NODE_ENV=test nodemon -w src -w test-fixtures --exec 'clear && npm run test:dev'",
37
+ "dev:test:debug": "cross-env DEBUG=@natlibfi/* NODE_ENV=test nodemon -w src -w test-fixtures --exec 'clear && npm run test:dev'"
34
38
  },
35
39
  "dependencies": {
36
- "@natlibfi/fixura": "^2.0.0",
37
- "@natlibfi/marc-record": "^6.0.0",
38
- "debug": "^4.1.1",
39
- "normalize-diacritics": "^2.11.1"
40
+ "@natlibfi/fixugen": "1.1.0",
41
+ "@natlibfi/fixura": "^2.2.1",
42
+ "@natlibfi/marc-record": "^7.1.0-alpha.2",
43
+ "debug": "^4.3.4",
44
+ "normalize-diacritics": "2.14.0"
40
45
  },
41
46
  "devDependencies": {
42
- "@babel/cli": "^7.10.1",
43
- "@babel/core": "^7.10.2",
44
- "@babel/preset-env": "^7.10.2",
45
- "@babel/register": "^7.10.1",
46
- "@natlibfi/eslint-config-melinda-backend": "^1.0.3",
47
- "babel-eslint": "^10.0.3",
48
- "babel-plugin-istanbul": "^6.0.0",
47
+ "@babel/cli": "^7.17.10",
48
+ "@babel/core": "^7.18.5",
49
+ "@babel/eslint-parser": "^7.18.2",
50
+ "@babel/preset-env": "^7.18.2",
51
+ "@babel/register": "^7.17.7",
52
+ "@natlibfi/eslint-config-melinda-backend": "^2.0.0",
53
+ "babel-plugin-istanbul": "^6.1.1",
49
54
  "babel-plugin-rewire": "^1.2.0",
50
- "chai": "^4.2.0",
51
- "cross-env": "^7.0.2",
52
- "eslint": "^7.1.0",
53
- "mocha": "^7.2.0",
54
- "nodemon": "^2.0.4",
55
- "npm-check": "^5.9.0",
55
+ "chai": "^4.3.6",
56
+ "cross-env": "^7.0.3",
57
+ "eslint": "^8.17.0",
58
+ "mocha": "^10.0.0",
59
+ "nodemon": "^2.0.16",
56
60
  "nyc": "^15.1.0"
57
61
  },
58
62
  "eslintConfig": {
@@ -65,9 +69,7 @@
65
69
  [
66
70
  "@babel/preset-env",
67
71
  {
68
- "targets": {
69
- "node": "12"
70
- }
72
+ "targets": "maintained node versions"
71
73
  }
72
74
  ]
73
75
  ],
@@ -86,8 +88,7 @@
86
88
  "*/**/*.spec.js"
87
89
  ],
88
90
  "reporter": [
89
- "lcov",
90
- "html"
91
+ "text"
91
92
  ],
92
93
  "require": [
93
94
  "@babel/register"
package/src/index.js CHANGED
@@ -1,36 +1,34 @@
1
- /**
2
- *
3
- * @licstart The following is the entire license notice for the JavaScript code in this file.
4
- *
5
- * Merge MARC records
6
- *
7
- * Copyright (C) 2015-2019 University Of Helsinki (The National Library Of Finland)
8
- *
9
- * This file is part of marc-record-merge-js
10
-
11
- * marc-record-merge-js program is free software: you can redistribute it and/or modify
12
- * it under the terms of the GNU Lesser General Public License as
13
- * published by the Free Software Foundation, either version 3 of the
14
- * License, or (at your option) any later version.
15
- *
16
- * marc-record-merge-js is distributed in the hope that it will be useful,
17
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
- * GNU Lesser General Public License for more details.
20
- *
21
- * You should have received a copy of the GNU Lesser General Public License
22
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
23
- *
24
- * @licend The above is the entire license notice
25
- * for the JavaScript code in this file.
26
- *
27
- */
28
-
29
- import * as Reducers from './reducers';
30
- import {MarcRecord} from '@natlibfi/marc-record';
1
+ import Reducers from './reducers';
31
2
 
32
3
  export {Reducers};
4
+ // export default ({base, source, reducers}) => reducers.reduce((base, reducer) => reducer(base, source), base);
5
+
6
+ // NV: Modified the reducer loop so, that not only base, but also is carried back.
7
+ // However, we try to be backward-compatible: normally after the reducers, only base is returned.
33
8
  export default ({base, source, reducers}) => {
34
- const sourceRecord = MarcRecord.clone(source);
35
- return reducers.reduce((baseRecord, reducer) => reducer(baseRecord, sourceRecord), MarcRecord.clone(base));
9
+ const combo = {base, source}; // eslint-disable-line functional/no-let
10
+
11
+ reducers.reduce((combo, reducer) => {
12
+ combo = singleRound(reducer, combo.base, combo.source); // eslint-disable-line no-param-reassign
13
+
14
+ return combo;
15
+ }, combo);
16
+
17
+ // Hack to make my melinda-marc-record-merge-reducers single tests that expect both
18
+ // base and source to return them both:
19
+ if (reducers.length === 1 && combo.base && combo.source) {
20
+ return combo;
21
+ }
22
+ // All other tests return just base... Backward (compability) it is!
23
+ return combo.base;
24
+
25
+ function singleRound(reducer, base, source) {
26
+ const combo = reducer(base, source);
27
+ if (combo.base !== undefined && combo.source !== undefined) {
28
+ //console.info('NEW STYLE REDUCER RESULT v2'); // eslint-disable-line no-console
29
+ return combo;
30
+ }
31
+ //console.info('OLD SCHOOL REDUCER RESULT v2'); // eslint-disable-line no-console
32
+ return {base: combo.base, source};
33
+ }
36
34
  };