@natlibfi/marc-record-validators-melinda 11.2.2-alpha.1 → 11.2.2

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 (228) hide show
  1. package/dist/access-rights.spec.js +1 -1
  2. package/dist/access-rights.spec.js.map +1 -1
  3. package/dist/addMissingField041.js.map +1 -1
  4. package/dist/addMissingField041.spec.js +1 -1
  5. package/dist/addMissingField041.spec.js.map +1 -1
  6. package/dist/addMissingField336.js.map +1 -1
  7. package/dist/addMissingField336.spec.js +1 -1
  8. package/dist/addMissingField336.spec.js.map +1 -1
  9. package/dist/addMissingField337.js.map +1 -1
  10. package/dist/addMissingField337.spec.js +1 -1
  11. package/dist/addMissingField337.spec.js.map +1 -1
  12. package/dist/addMissingField338.js.map +1 -1
  13. package/dist/addMissingField338.spec.js +1 -1
  14. package/dist/addMissingField338.spec.js.map +1 -1
  15. package/dist/cyrillux-usemarcon-replacement.js +82 -22
  16. package/dist/cyrillux-usemarcon-replacement.js.map +1 -1
  17. package/dist/cyrillux-usemarcon-replacement.spec.js +1 -1
  18. package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -1
  19. package/dist/double-commas.spec.js +1 -1
  20. package/dist/double-commas.spec.js.map +1 -1
  21. package/dist/duplicates-ind1.js.map +1 -1
  22. package/dist/duplicates-ind1.spec.js +1 -1
  23. package/dist/duplicates-ind1.spec.js.map +1 -1
  24. package/dist/empty-fields.js.map +1 -1
  25. package/dist/empty-fields.spec.js +1 -1
  26. package/dist/empty-fields.spec.js.map +1 -1
  27. package/dist/ending-punctuation.js +1 -1
  28. package/dist/ending-punctuation.js.map +1 -1
  29. package/dist/ending-punctuation.spec.js +1 -1
  30. package/dist/ending-punctuation.spec.js.map +1 -1
  31. package/dist/ending-whitespace.js.map +1 -1
  32. package/dist/ending-whitespace.spec.js +1 -1
  33. package/dist/ending-whitespace.spec.js.map +1 -1
  34. package/dist/field-008-18-34-character-groups.js +1 -1
  35. package/dist/field-008-18-34-character-groups.js.map +1 -1
  36. package/dist/field-008-18-34-character-groups.spec.js +1 -1
  37. package/dist/field-008-18-34-character-groups.spec.js.map +1 -1
  38. package/dist/field-505-separators.js +1 -1
  39. package/dist/field-505-separators.js.map +1 -1
  40. package/dist/field-505-separators.spec.js +1 -1
  41. package/dist/field-505-separators.spec.js.map +1 -1
  42. package/dist/field-521-fix.js +1 -1
  43. package/dist/field-521-fix.js.map +1 -1
  44. package/dist/field-521-fix.spec.js +1 -1
  45. package/dist/field-521-fix.spec.js.map +1 -1
  46. package/dist/field-exclusion.js.map +1 -1
  47. package/dist/field-exclusion.spec.js +1 -1
  48. package/dist/field-exclusion.spec.js.map +1 -1
  49. package/dist/field-structure.js.map +1 -1
  50. package/dist/field-structure.spec.js +1 -1
  51. package/dist/field-structure.spec.js.map +1 -1
  52. package/dist/fields-present.spec.js +1 -1
  53. package/dist/fields-present.spec.js.map +1 -1
  54. package/dist/fix-33X.js +1 -1
  55. package/dist/fix-33X.js.map +1 -1
  56. package/dist/fix-33X.spec.js +1 -1
  57. package/dist/fix-33X.spec.js.map +1 -1
  58. package/dist/fix-country-codes.js.map +1 -1
  59. package/dist/fix-country-codes.spec.js +1 -1
  60. package/dist/fix-country-codes.spec.js.map +1 -1
  61. package/dist/fix-language-codes.js +1 -1
  62. package/dist/fix-language-codes.js.map +1 -1
  63. package/dist/fix-language-codes.spec.js +1 -1
  64. package/dist/fix-language-codes.spec.js.map +1 -1
  65. package/dist/fixRelatorTerms.js +6 -3
  66. package/dist/fixRelatorTerms.js.map +1 -1
  67. package/dist/fixRelatorTerms.spec.js +1 -1
  68. package/dist/fixRelatorTerms.spec.js.map +1 -1
  69. package/dist/fixed-fields.js.map +1 -1
  70. package/dist/fixed-fields.spec.js +1 -1
  71. package/dist/fixed-fields.spec.js.map +1 -1
  72. package/dist/identical-fields.js.map +1 -1
  73. package/dist/identical-fields.spec.js +1 -1
  74. package/dist/identical-fields.spec.js.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/indicator-fixes.js +17 -0
  78. package/dist/indicator-fixes.js.map +1 -1
  79. package/dist/indicator-fixes.spec.js +1 -1
  80. package/dist/indicator-fixes.spec.js.map +1 -1
  81. package/dist/isbn-issn.js +1 -1
  82. package/dist/isbn-issn.js.map +1 -1
  83. package/dist/isbn-issn.spec.js +1 -1
  84. package/dist/isbn-issn.spec.js.map +1 -1
  85. package/dist/item-language.js +1 -1
  86. package/dist/item-language.js.map +1 -1
  87. package/dist/item-language.spec.js +1 -1
  88. package/dist/item-language.spec.js.map +1 -1
  89. package/dist/mergeField500Lisapainokset.js.map +1 -1
  90. package/dist/mergeField500Lisapainokset.spec.js +1 -1
  91. package/dist/mergeField500Lisapainokset.spec.js.map +1 -1
  92. package/dist/mergeRelatorTermFields.js +1 -1
  93. package/dist/mergeRelatorTermFields.js.map +1 -1
  94. package/dist/mergeRelatorTermFields.spec.js +1 -1
  95. package/dist/mergeRelatorTermFields.spec.js.map +1 -1
  96. package/dist/multiple-subfield-0.js.map +1 -1
  97. package/dist/multiple-subfield-0.spec.js +1 -1
  98. package/dist/multiple-subfield-0.spec.js.map +1 -1
  99. package/dist/non-breaking-space.js.map +1 -1
  100. package/dist/non-breaking-space.spec.js +1 -1
  101. package/dist/non-breaking-space.spec.js.map +1 -1
  102. package/dist/normalize-dashes.js +1 -1
  103. package/dist/normalize-dashes.js.map +1 -1
  104. package/dist/normalize-dashes.spec.js +1 -1
  105. package/dist/normalize-dashes.spec.js.map +1 -1
  106. package/dist/normalize-identifiers.js +1 -1
  107. package/dist/normalize-identifiers.js.map +1 -1
  108. package/dist/normalize-identifiers.spec.js +1 -1
  109. package/dist/normalize-identifiers.spec.js.map +1 -1
  110. package/dist/normalize-qualifying-information.js +1 -1
  111. package/dist/normalize-qualifying-information.js.map +1 -1
  112. package/dist/normalize-qualifying-information.spec.js +1 -1
  113. package/dist/normalize-qualifying-information.spec.js.map +1 -1
  114. package/dist/normalize-utf8-diacritics.js +1 -1
  115. package/dist/normalize-utf8-diacritics.js.map +1 -1
  116. package/dist/normalize-utf8-diacritics.spec.js +1 -1
  117. package/dist/normalize-utf8-diacritics.spec.js.map +1 -1
  118. package/dist/normalizeFieldForComparison.js +1 -1
  119. package/dist/normalizeFieldForComparison.js.map +1 -1
  120. package/dist/normalizeSubfieldValueForComparison.js +1 -1
  121. package/dist/normalizeSubfieldValueForComparison.js.map +1 -1
  122. package/dist/prepublicationUtils.js +1 -1
  123. package/dist/prepublicationUtils.js.map +1 -1
  124. package/dist/punctuation/index.js +1 -1
  125. package/dist/punctuation/index.js.map +1 -1
  126. package/dist/punctuation/rules/index.js +1 -1
  127. package/dist/punctuation/rules/index.js.map +1 -1
  128. package/dist/punctuation.spec.js +1 -1
  129. package/dist/punctuation.spec.js.map +1 -1
  130. package/dist/punctuation2.js +1 -1
  131. package/dist/punctuation2.js.map +1 -1
  132. package/dist/punctuation2.spec.js +1 -1
  133. package/dist/punctuation2.spec.js.map +1 -1
  134. package/dist/reindexSubfield6OccurenceNumbers.js +1 -1
  135. package/dist/reindexSubfield6OccurenceNumbers.js.map +1 -1
  136. package/dist/reindexSubfield6OccurenceNumbers.spec.js +1 -1
  137. package/dist/reindexSubfield6OccurenceNumbers.spec.js.map +1 -1
  138. package/dist/removeDuplicateDataFields.js +1 -1
  139. package/dist/removeDuplicateDataFields.js.map +1 -1
  140. package/dist/removeDuplicateDataFields.spec.js +1 -1
  141. package/dist/removeDuplicateDataFields.spec.js.map +1 -1
  142. package/dist/removeInferiorDataFields.js +1 -1
  143. package/dist/removeInferiorDataFields.js.map +1 -1
  144. package/dist/removeInferiorDataFields.spec.js +1 -1
  145. package/dist/removeInferiorDataFields.spec.js.map +1 -1
  146. package/dist/resolvable-ext-references-melinda.js +1 -1
  147. package/dist/resolvable-ext-references-melinda.js.map +1 -1
  148. package/dist/resolvable-ext-references-melinda.spec.js +1 -1
  149. package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
  150. package/dist/resolveOrphanedSubfield6s.js +1 -1
  151. package/dist/resolveOrphanedSubfield6s.js.map +1 -1
  152. package/dist/resolveOrphanedSubfield6s.spec.js +1 -1
  153. package/dist/resolveOrphanedSubfield6s.spec.js.map +1 -1
  154. package/dist/sanitize-vocabulary-source-codes.js +5 -1
  155. package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
  156. package/dist/sanitize-vocabulary-source-codes.spec.js +1 -1
  157. package/dist/sanitize-vocabulary-source-codes.spec.js.map +1 -1
  158. package/dist/sort-tags.spec.js +1 -1
  159. package/dist/sort-tags.spec.js.map +1 -1
  160. package/dist/sortFields.js +1 -1
  161. package/dist/sortFields.js.map +1 -1
  162. package/dist/sortFields.spec.js +1 -1
  163. package/dist/sortFields.spec.js.map +1 -1
  164. package/dist/sortRelatorTerms.js +1 -1
  165. package/dist/sortRelatorTerms.js.map +1 -1
  166. package/dist/sortRelatorTerms.spec.js +1 -1
  167. package/dist/sortRelatorTerms.spec.js.map +1 -1
  168. package/dist/sortSubfields.js +1 -1
  169. package/dist/sortSubfields.js.map +1 -1
  170. package/dist/sortSubfields.spec.js +1 -1
  171. package/dist/sortSubfields.spec.js.map +1 -1
  172. package/dist/stripPunctuation.js.map +1 -1
  173. package/dist/stripPunctuation.spec.js +1 -1
  174. package/dist/stripPunctuation.spec.js.map +1 -1
  175. package/dist/subfield-exclusion.js.map +1 -1
  176. package/dist/subfield-exclusion.spec.js +1 -1
  177. package/dist/subfield-exclusion.spec.js.map +1 -1
  178. package/dist/subfield6Utils.js.map +1 -1
  179. package/dist/subfield8Utils.js.map +1 -1
  180. package/dist/subfieldValueNormalizations.js +1 -1
  181. package/dist/subfieldValueNormalizations.js.map +1 -1
  182. package/dist/subfieldValueNormalizations.spec.js +1 -1
  183. package/dist/subfieldValueNormalizations.spec.js.map +1 -1
  184. package/dist/sync-007-and-300.js +1 -1
  185. package/dist/sync-007-and-300.js.map +1 -1
  186. package/dist/sync-007-and-300.spec.js +1 -1
  187. package/dist/sync-007-and-300.spec.js.map +1 -1
  188. package/dist/typeOfDate-008.js +1 -1
  189. package/dist/typeOfDate-008.js.map +1 -1
  190. package/dist/typeOfDate-008.spec.js +1 -1
  191. package/dist/typeOfDate-008.spec.js.map +1 -1
  192. package/dist/unicode-decomposition.js.map +1 -1
  193. package/dist/unicode-decomposition.spec.js +1 -1
  194. package/dist/unicode-decomposition.spec.js.map +1 -1
  195. package/dist/update-field-540.spec.js +1 -1
  196. package/dist/update-field-540.spec.js.map +1 -1
  197. package/dist/urn.js +1 -1
  198. package/dist/urn.js.map +1 -1
  199. package/dist/urn.spec.js +1 -1
  200. package/dist/urn.spec.js.map +1 -1
  201. package/dist/utils.js +17 -0
  202. package/dist/utils.js.map +1 -1
  203. package/package.json +2 -2
  204. package/src/cyrillux-usemarcon-replacement.js +87 -24
  205. package/src/fixRelatorTerms.js +5 -2
  206. package/src/indicator-fixes.js +19 -0
  207. package/src/sanitize-vocabulary-source-codes.js +4 -0
  208. package/src/utils.js +16 -0
  209. package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +3 -0
  210. package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +8 -0
  211. package/test-fixtures/cyrillux-usemarcon-replacement/f12/expectedResult.json +32 -0
  212. package/test-fixtures/cyrillux-usemarcon-replacement/f12/metadata.json +6 -0
  213. package/test-fixtures/cyrillux-usemarcon-replacement/f12/record.json +30 -0
  214. package/test-fixtures/cyrillux-usemarcon-replacement/f13/expectedResult.json +38 -0
  215. package/test-fixtures/cyrillux-usemarcon-replacement/f13/metadata.json +6 -0
  216. package/test-fixtures/cyrillux-usemarcon-replacement/f13/record.json +29 -0
  217. package/test-fixtures/cyrillux-usemarcon-replacement/f14/expectedResult.json +42 -0
  218. package/test-fixtures/cyrillux-usemarcon-replacement/f14/metadata.json +6 -0
  219. package/test-fixtures/cyrillux-usemarcon-replacement/f14/record.json +33 -0
  220. package/test-fixtures/indicator-fixes/09/expectedResult.json +10 -0
  221. package/test-fixtures/indicator-fixes/09/metadata.json +4 -0
  222. package/test-fixtures/indicator-fixes/09/record.json +11 -0
  223. package/test-fixtures/sanitize-vocabulary-source-codes/f04/expectedResult.json +74 -0
  224. package/test-fixtures/sanitize-vocabulary-source-codes/f04/metadata.json +8 -0
  225. package/test-fixtures/sanitize-vocabulary-source-codes/f04/record.json +75 -0
  226. package/test-fixtures/sanitize-vocabulary-source-codes/v04/expectedResult.json +5 -0
  227. package/test-fixtures/sanitize-vocabulary-source-codes/v04/metadata.json +8 -0
  228. package/test-fixtures/sanitize-vocabulary-source-codes/v04/record.json +75 -0
@@ -3,7 +3,7 @@
3
3
  var _chai = require("chai");
4
4
  var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _accessRights = _interopRequireDefault(require("../src/access-rights"));
6
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  describe('access-rights', async () => {
8
8
  // Fields
9
9
  const f337 = {
@@ -1 +1 @@
1
- {"version":3,"file":"access-rights.spec.js","names":["_chai","require","_marcRecord","_accessRights","_interopRequireDefault","obj","__esModule","default","describe","f337","tag","ind1","ind2","subfields","code","value","f337nonElectronic","ldf5061old","ldf5061new","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 f337nonElectronic = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'käytettävissä ilman laitetta'},\n {code: 'b', value: 'n'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061old = {\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 ldf5061new = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappaletyöasemilla.'},\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\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; fields 5061 and 540 are missing but its ok since record is not electronic', async () => {\n await test.validate(true, f337nonElectronic);\n });\n\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, f337, ldf5061new, ldf540);\n });\n\n it('Finds the record invalid; Old phrase in 5061', async () => {\n await test.validate(false, f337, ldf5061old, 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, ldf5061new, 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([ldf5061new, ldf540], [ldf5061new, ldf540]);\n });\n\n it('Old phrase in 5061; Overwritten with new phrase', async () => {\n await test.fix([ldf5061old, ldf540], [ldf5061new, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061new, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061new, f540], [ldf5061new, f540, ldf540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061new, f540, ldf540]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"access-rights.spec.js","names":["_chai","require","_marcRecord","_accessRights","_interopRequireDefault","e","__esModule","default","describe","f337","tag","ind1","ind2","subfields","code","value","f337nonElectronic","ldf5061old","ldf5061new","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 f337nonElectronic = {\n tag: '337',\n ind1: ' ',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'käytettävissä ilman laitetta'},\n {code: 'b', value: 'n'},\n {code: '2', value: 'rdamedia'}\n ]\n };\n\n const ldf5061old = {\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 ldf5061new = {\n tag: '506',\n ind1: '1',\n ind2: ' ',\n subfields: [\n {code: 'a', value: 'Aineisto on käytettävissä vapaakappaletyöasemilla.'},\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\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; fields 5061 and 540 are missing but its ok since record is not electronic', async () => {\n await test.validate(true, f337nonElectronic);\n });\n\n it('Finds the record valid; Legal deposit fields 5061 and 540', async () => {\n await test.validate(true, f337, ldf5061new, ldf540);\n });\n\n it('Finds the record invalid; Old phrase in 5061', async () => {\n await test.validate(false, f337, ldf5061old, 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, ldf5061new, 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([ldf5061new, ldf540], [ldf5061new, ldf540]);\n });\n\n it('Old phrase in 5061; Overwritten with new phrase', async () => {\n await test.fix([ldf5061old, ldf540], [ldf5061new, ldf540]);\n });\n\n it('540 but missing 5061; Adds 5061', async () => {\n await test.fix([f5060, ldf540], [f5060, ldf5061new, ldf540]);\n });\n\n it('5061 but missing 540; Adds 540', async () => {\n await test.fix([ldf5061new, f540], [ldf5061new, f540, ldf540]);\n });\n\n it('Both, 5061 and 540, missing; Adds 5061 and 540', async () => {\n await test.fix([f5060, f540], [f5060, ldf5061new, f540, ldf540]);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField041.js","names":["_utils","require","description","_default","validate","fix","getLanguageCode","record","f008","get","value","length","substring","isRealLanguageCode","languageCode","nvdebug","match","includes","determineSubfieldCode","typeOfRecord","getTypeOfRecord","generateContent","languageCodeFields","subfieldCode","tag","ind1","ind2","subfields","code","data","res","message","valid","insertField","msg","fieldToString"],"sources":["../src/addMissingField041.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst description = 'Add missing 041 field based on 008/35-37';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function getLanguageCode(record) {\n const [f008] = record.get('008');\n if (f008 && f008.value.length === 40) {\n return f008.value.substring(35, 38);\n }\n return '|||';\n }\n\n function isRealLanguageCode(languageCode = '|||') {\n nvdebug(`Language code 008/35-37: ${languageCode}`);\n if (!languageCode.match(/^[a-z]{3}$/u) || ['mul', 'und', 'zxx'].includes(languageCode)) {\n return false;\n }\n // Assume that value is valid:\n return true;\n }\n\n function determineSubfieldCode(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord === 'i' || typeOfRecord === 'j') {\n return 'd';\n }\n return 'a';\n }\n\n function generateContent(record) {\n const languageCodeFields = record.get('041');\n if (languageCodeFields.length > 0) {\n return null;\n }\n const languageCode = getLanguageCode(record);\n if (!isRealLanguageCode(languageCode)) {\n return null;\n }\n const subfieldCode = determineSubfieldCode(record);\n // NB! Usemarcon-bookwhere had IND1=0...\n return {tag: '041', ind1: ' ', ind2: ' ', subfields: [{code: subfieldCode, value: languageCode}]};\n }\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const data = generateContent(record);\n const res = {message: [], fix: [], valid: true};\n if (data) {\n record.insertField(data);\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const data = generateContent(record);\n if (!data) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(data)}'`;\n return {message: [msg], valid: false};\n }\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AADA;;AAGA,MAAMC,WAAW,GAAG,0CAA0C;;AAE9D;;AAEe,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLD,WAAW;IAAEE,QAAQ;IAAEC;EACzB,CAAC;EAED,SAASC,eAAeA,CAACC,MAAM,EAAE;IAC/B,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;IAChC,IAAID,IAAI,IAAIA,IAAI,CAACE,KAAK,CAACC,MAAM,KAAK,EAAE,EAAE;MACpC,OAAOH,IAAI,CAACE,KAAK,CAACE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACrC;IACA,OAAO,KAAK;EACd;EAEA,SAASC,kBAAkBA,CAACC,YAAY,GAAG,KAAK,EAAE;IAChD,IAAAC,cAAO,EAAE,4BAA2BD,YAAa,EAAC,CAAC;IACnD,IAAI,CAACA,YAAY,CAACE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACH,YAAY,CAAC,EAAE;MACtF,OAAO,KAAK;IACd;IACA;IACA,OAAO,IAAI;EACb;EAEA,SAASI,qBAAqBA,CAACX,MAAM,EAAE;IACrC,MAAMY,YAAY,GAAGZ,MAAM,CAACa,eAAe,CAACb,MAAM,CAAC;IACnD,IAAIY,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,OAAO,GAAG;IACZ;IACA,OAAO,GAAG;EACZ;EAEA,SAASE,eAAeA,CAACd,MAAM,EAAE;IAC/B,MAAMe,kBAAkB,GAAGf,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;IAC5C,IAAIa,kBAAkB,CAACX,MAAM,GAAG,CAAC,EAAE;MACjC,OAAO,IAAI;IACb;IACA,MAAMG,YAAY,GAAGR,eAAe,CAACC,MAAM,CAAC;IAC5C,IAAI,CAACM,kBAAkB,CAACC,YAAY,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IACA,MAAMS,YAAY,GAAGL,qBAAqB,CAACX,MAAM,CAAC;IAClD;IACA,OAAO;MAACiB,GAAG,EAAE,KAAK;MAAEC,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEC,SAAS,EAAE,CAAC;QAACC,IAAI,EAAEL,YAAY;QAAEb,KAAK,EAAEI;MAAY,CAAC;IAAC,CAAC;EACnG;EAEA,SAAST,GAAGA,CAACE,MAAM,EAAE;IACnB,IAAAQ,cAAO,EAAE,OAAMb,WAAY,KAAI,CAAC;IAChC,MAAM2B,IAAI,GAAGR,eAAe,CAACd,MAAM,CAAC;IACpC,MAAMuB,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAE1B,GAAG,EAAE,EAAE;MAAE2B,KAAK,EAAE;IAAI,CAAC;IAC/C,IAAIH,IAAI,EAAE;MACRtB,MAAM,CAAC0B,WAAW,CAACJ,IAAI,CAAC;MACxB,OAAOC,GAAG;IACZ;IACA,OAAOA,GAAG;EACZ;EAEA,SAAS1B,QAAQA,CAACG,MAAM,EAAE;IACxB,IAAAQ,cAAO,EAAE,YAAWb,WAAY,KAAI,CAAC;IACrC,MAAM2B,IAAI,GAAGR,eAAe,CAACd,MAAM,CAAC;IACpC,IAAI,CAACsB,IAAI,EAAE;MACT,OAAO;QAACE,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IACA,MAAME,GAAG,GAAI,GAAEhC,WAAY,MAAK,IAAAiC,oBAAa,EAACN,IAAI,CAAE,GAAE;IACtD,OAAO;MAACE,OAAO,EAAE,CAACG,GAAG,CAAC;MAAEF,KAAK,EAAE;IAAK,CAAC;EACvC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField041.js","names":["_utils","require","description","_default","validate","fix","getLanguageCode","record","f008","get","value","length","substring","isRealLanguageCode","languageCode","nvdebug","match","includes","determineSubfieldCode","typeOfRecord","getTypeOfRecord","generateContent","languageCodeFields","subfieldCode","tag","ind1","ind2","subfields","code","data","res","message","valid","insertField","msg","fieldToString"],"sources":["../src/addMissingField041.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, nvdebug} from './utils';\n\nconst description = 'Add missing 041 field based on 008/35-37';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function getLanguageCode(record) {\n const [f008] = record.get('008');\n if (f008 && f008.value.length === 40) {\n return f008.value.substring(35, 38);\n }\n return '|||';\n }\n\n function isRealLanguageCode(languageCode = '|||') {\n nvdebug(`Language code 008/35-37: ${languageCode}`);\n if (!languageCode.match(/^[a-z]{3}$/u) || ['mul', 'und', 'zxx'].includes(languageCode)) {\n return false;\n }\n // Assume that value is valid:\n return true;\n }\n\n function determineSubfieldCode(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord === 'i' || typeOfRecord === 'j') {\n return 'd';\n }\n return 'a';\n }\n\n function generateContent(record) {\n const languageCodeFields = record.get('041');\n if (languageCodeFields.length > 0) {\n return null;\n }\n const languageCode = getLanguageCode(record);\n if (!isRealLanguageCode(languageCode)) {\n return null;\n }\n const subfieldCode = determineSubfieldCode(record);\n // NB! Usemarcon-bookwhere had IND1=0...\n return {tag: '041', ind1: ' ', ind2: ' ', subfields: [{code: subfieldCode, value: languageCode}]};\n }\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const data = generateContent(record);\n const res = {message: [], fix: [], valid: true};\n if (data) {\n record.insertField(data);\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const data = generateContent(record);\n if (!data) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(data)}'`;\n return {message: [msg], valid: false};\n }\n}\n\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AADA;;AAGA,MAAMC,WAAW,GAAG,0CAA0C;;AAE9D;;AAEe,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLD,WAAW;IAAEE,QAAQ;IAAEC;EACzB,CAAC;EAED,SAASC,eAAeA,CAACC,MAAM,EAAE;IAC/B,MAAM,CAACC,IAAI,CAAC,GAAGD,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;IAChC,IAAID,IAAI,IAAIA,IAAI,CAACE,KAAK,CAACC,MAAM,KAAK,EAAE,EAAE;MACpC,OAAOH,IAAI,CAACE,KAAK,CAACE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACrC;IACA,OAAO,KAAK;EACd;EAEA,SAASC,kBAAkBA,CAACC,YAAY,GAAG,KAAK,EAAE;IAChD,IAAAC,cAAO,EAAC,4BAA4BD,YAAY,EAAE,CAAC;IACnD,IAAI,CAACA,YAAY,CAACE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACH,YAAY,CAAC,EAAE;MACtF,OAAO,KAAK;IACd;IACA;IACA,OAAO,IAAI;EACb;EAEA,SAASI,qBAAqBA,CAACX,MAAM,EAAE;IACrC,MAAMY,YAAY,GAAGZ,MAAM,CAACa,eAAe,CAACb,MAAM,CAAC;IACnD,IAAIY,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,OAAO,GAAG;IACZ;IACA,OAAO,GAAG;EACZ;EAEA,SAASE,eAAeA,CAACd,MAAM,EAAE;IAC/B,MAAMe,kBAAkB,GAAGf,MAAM,CAACE,GAAG,CAAC,KAAK,CAAC;IAC5C,IAAIa,kBAAkB,CAACX,MAAM,GAAG,CAAC,EAAE;MACjC,OAAO,IAAI;IACb;IACA,MAAMG,YAAY,GAAGR,eAAe,CAACC,MAAM,CAAC;IAC5C,IAAI,CAACM,kBAAkB,CAACC,YAAY,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IACA,MAAMS,YAAY,GAAGL,qBAAqB,CAACX,MAAM,CAAC;IAClD;IACA,OAAO;MAACiB,GAAG,EAAE,KAAK;MAAEC,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEC,SAAS,EAAE,CAAC;QAACC,IAAI,EAAEL,YAAY;QAAEb,KAAK,EAAEI;MAAY,CAAC;IAAC,CAAC;EACnG;EAEA,SAAST,GAAGA,CAACE,MAAM,EAAE;IACnB,IAAAQ,cAAO,EAAC,OAAOb,WAAW,KAAK,CAAC;IAChC,MAAM2B,IAAI,GAAGR,eAAe,CAACd,MAAM,CAAC;IACpC,MAAMuB,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAE1B,GAAG,EAAE,EAAE;MAAE2B,KAAK,EAAE;IAAI,CAAC;IAC/C,IAAIH,IAAI,EAAE;MACRtB,MAAM,CAAC0B,WAAW,CAACJ,IAAI,CAAC;MACxB,OAAOC,GAAG;IACZ;IACA,OAAOA,GAAG;EACZ;EAEA,SAAS1B,QAAQA,CAACG,MAAM,EAAE;IACxB,IAAAQ,cAAO,EAAC,YAAYb,WAAW,KAAK,CAAC;IACrC,MAAM2B,IAAI,GAAGR,eAAe,CAACd,MAAM,CAAC;IACpC,IAAI,CAACsB,IAAI,EAAE;MACT,OAAO;QAACE,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IACA,MAAME,GAAG,GAAG,GAAGhC,WAAW,MAAM,IAAAiC,oBAAa,EAACN,IAAI,CAAC,GAAG;IACtD,OAAO;MAACE,OAAO,EAAE,CAACG,GAAG,CAAC;MAAEF,KAAK,EAAE;IAAK,CAAC;EACvC;AACF","ignoreList":[]}
@@ -5,7 +5,7 @@ var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _addMissingField = _interopRequireDefault(require("./addMissingField041"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  (0, _fixugen.default)({
10
10
  callback,
11
11
  path: [__dirname, '..', 'test-fixtures', 'addMissingField041'],
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField041.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField041.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField041';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField041'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField041.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField041.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField041';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField041'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f));\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField336.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newFields","getMissing336s","length","res","message","valid","forEach","f","insertField","strings","map","fieldToString","tmp","join","msg","guessMissingBsForComputerFile","field008","get","typeOfComputerFile","value","undefined","includes","guess","guessUsingFileFields","characteristics","some","str","match","guessMissingBsForBookAndContinuingResource","formOfItem","guessMissingBsForMap","getFormOfItem","fields","tag","guessMissing336Bs","typeOfRecord","getTypeOfRecord","codeToField","b","catLang","a","map336CodeToTerm","data","ind1","ind2","subfields","code","f336","bees","getCatalogingLanguage"],"sources":["../src/addMissingField336.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map336CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 336 field(s)';\n\n// const multimediaRegexp = /multimedia/ui;\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newFields = getMissing336s(record);\n nvdebug(` GOT ${newFields.length}...`);\n // FFS: we actually need newFields array here! Videogame, for example, might be\n // 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent\n // 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent\n const res = {message: [], fix: [], valid: true};\n if (newFields.length) {\n newFields.forEach(f => record.insertField(f));\n return res;\n }\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newFields = getMissing336s(record);\n if (newFields.length === 0) {\n return {message: [], valid: true};\n }\n const strings = newFields.map(f => fieldToString(f));\n const tmp = strings.join('\\', \\'');\n const msg = `${description}: '${tmp}'`;\n return {message: [msg], valid: false};\n }\n\n function guessMissingBsForComputerFile(record) {\n const [field008] = record.get('008');\n const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;\n\n if (typeOfComputerFile) {\n if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50\n return ['txt'];\n }\n if (typeOfComputerFile === 'g') { // Videogame (N=10000+)\n // 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.\n // Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit\n return ['tdi', 'cop'];\n }\n if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2\n return ['cop'];\n }\n if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36\n return ['cod'];\n }\n if (typeOfComputerFile === 'h') { // h: N=44\n return ['snd'];\n }\n }\n\n // ADD 256/300/516/XXX-based educated guesses here\n const guess = guessUsingFileFields();\n if (guess) {\n return guess;\n }\n function guessUsingFileFields() {\n const characteristics = record.get('(256|516)').map(f => fieldToString(f));\n if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {\n return ['cop'];\n }\n if (characteristics.some(str => str.match(/(?:daisy)/gui))) {\n return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct\n }\n if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {\n return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...\n }\n if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:peli)/gui))) {\n return ['tdi', 'cop'];\n }\n if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {\n return ['cod'];\n }\n if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\\] s|PDF)/gui)) || characteristics.some(str => str.match(/\\b(?:text|tekstiä?)\\b/gui))) {\n return ['txt'];\n }\n if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {\n return ['tdi'];\n }\n if (characteristics.some(str => str.match(/(?:kartta)/gui))) {\n return ['cri']; // cri or crd, close enough anyhow, I guess\n }\n if (characteristics.some(str => str.match(/\\b(?:kuvi?a)\\b/gui))) {\n return ['tdi'];\n }\n\n return undefined;\n }\n\n\n if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )\n // Can we use field 300/516/256 to improve guess?\n return ['xxx'];\n }\n return ['zzz']; // unspecified\n }\n\n /*\n function deriveLanguageMaterials336sFrom007(record) {\n const categoryOfMaterial = [ // 007/00\n {category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..\n {category: 'c', rdacontent: 'txt'},\n {category: 'g', rdacontent: 'sti'},\n {vategory: 'h', rdacontent: 'txt'},\n {category: 'k', rdacontent: 'sti'},\n {category: 'v', rdacontent: 'tdi'}\n ];\n\n // What if there are multiple 007 fields?\n const [f007] = record.fields.get('007');\n if (f007) {\n const row = categoryOfMaterial.filter(row => row.category === f007[0]);\n if (row) {\n return [row.rdacontent];\n }\n }\n return [];\n }\n */\n\n function guessMissingBsForBookAndContinuingResource(record, formOfItem) {\n\n\n // This is from very old crap from usemarcon-cyrillux, but me not like it at all!\n /*\n const f245h = getTitleMedium(record);\n if (f245h && !multimediaRegexp.test(f245h)) {\n const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...\n if (result) {\n return result;\n }\n }\n */\n\n //const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...\n //const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);\n //if (!isBis) {\n if (formOfItem === 'f') {\n return ['tct']; // tactile text\n }\n return ['txt']; // Default BK format is text\n }\n\n function guessMissingBsForMap(record) {\n const formOfItem = getFormOfItem(record);\n // Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q\n if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {\n return ['crt']; // Cartographic tactile image\n }\n const [field008] = record.get('008');\n if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)\n return ['crf']; // map 3D form\n }\n return ['cri']; // default cartographic image\n }\n\n function guessMissing336Bs(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'i') {\n return ['spw'];\n }\n if (typeOfRecord === 'j') {\n return ['prm']; // performed music\n }\n\n if (typeOfRecord === 'e' || typeOfRecord === 'f') {\n return guessMissingBsForMap(record);\n }\n\n const formOfItem = getFormOfItem(record);\n\n if (typeOfRecord === 'k') {\n if (formOfItem === 'f') {\n return ['tci']; // tactile image\n }\n return ['sti'];\n }\n\n if (typeOfRecord === 'c' || typeOfRecord === 'd') {\n if (formOfItem === 'f') {\n return ['tcm']; // tactile notated music\n }\n return ['ntm']; // notated music\n }\n\n if (typeOfRecord === 'g') {\n if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {\n return ['sti']; // still image\n }\n if (record.fields.some(f => f.tag === '007' && ['m', 'v', 'c'].includes(f.value[0]))) { // 'c' is a bit iffy, but I'll tune it only if it makes an error...\n return ['tdi']; // 2d moving pic\n }\n }\n\n if (typeOfRecord === 'm') { // electronic\n return guessMissingBsForComputerFile(record);\n }\n\n if (typeOfRecord === 'a' || typeOfRecord === 't') {\n return guessMissingBsForBookAndContinuingResource(record, formOfItem);\n }\n\n // Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)\n if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed\n if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print\n return ['txt'];\n }\n // Not much I can guess from 300 etc\n return ['xxx']; // other\n }\n if (typeOfRecord === 'r') { // three-dimensional form\n return ['tdf'];\n }\n return ['zzz']; // unspecified\n }\n\n\n function codeToField(b, catLang) {\n const a = map336CodeToTerm(b, catLang);\n const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdacontent'}\n ]};\n\n return data;\n }\n\n function getMissing336s(record) {\n const f336 = record.get('336');\n if (f336.length > 0) {\n return [];\n }\n\n const bees = guessMissing336Bs(record); // bees = b-subfields\n nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);\n\n\n return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _addMissingField = _interopRequireDefault(require("./addMissingField336"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  (0, _fixugen.default)({
10
10
  callback,
11
11
  path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField336.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField336.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField336';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField336.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField336.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField336';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField337.js","names":["_utils","require","_field33XUtils","description","mappings337B","formOfItem","rdacontent","_default","validate","fix","record","nvdebug","newField","getMissing337","res","message","valid","insertField","msg","fieldToString","guessObjectsMissing337B","field008","get","value","guessMissing337B","typeOfRecord","getTypeOfRecord","fields007","some","f","mapFormOfItemToField337B","getFormOfItem","f337","undefined","b","catLang","getCatalogingLanguage","catLang2","a","map337CodeToTerm","data","tag","ind1","ind2","subfields","code","result","filter","row"],"sources":["../src/addMissingField337.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map337CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 337 field(s)';\n\n// Based on https://github.com/NatLibFi/USEMARCON-Cyrillux/blob/master/008-23-337a.tbl . Extended!\nconst mappings337B = [\n {formOfItem: ' ', rdacontent: 'n'}, // unmediated - käytettävissä ilman laitetta\n {formOfItem: '|', rdacontent: 'n'},\n {formOfItem: 'a', rdacontent: 'h'}, // microform\n {formOfItem: 'b', rdacontent: 'h'},\n {formOfItem: 'c', rdacontent: 'h'},\n {formOfItem: 'd', rdacontent: 'n'},\n {formOfItem: 'e', rdacontent: 'n'},\n {formOfItem: 'f', rdacontent: 'n'},\n {formOfItem: 'o', rdacontent: 'c'}, // computer\n {formOfItem: 'q', rdacontent: 'c'},\n {formOfItem: 'r', rdacontent: 'n'},\n {formOfItem: 's', rdacontent: 'c'}\n];\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newField = getMissing337(record);\n const res = {message: [], fix: [], valid: true};\n if (newField) {\n record.insertField(newField);\n return res;\n }\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}....`);\n const newField = getMissing337(record);\n if (!newField) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(newField)}'`;\n return {message: [msg], valid: false};\n }\n\n function guessObjectsMissing337B(record) {\n const [field008] = record.get('008');\n if (field008 && field008.value[33] === 'p') {\n return 'p'; // microscopic\n }\n return 'n'; // unmediated\n }\n\n function guessMissing337B(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'm') { // LDR/06=m/computer file\n return 'c'; // computer\n }\n if (typeOfRecord === 'o' || typeOfRecord === 'p') {\n return 'x'; // other\n }\n if (typeOfRecord === 'r') { // object\n return guessObjectsMissing337B(record);\n }\n const fields007 = record.get('007');\n\n // TO DO: type a/t + 245$h (not multimedia): use 007/00 based expection\n\n // 007/00 implies that 337$b=c (computer)\n if (typeOfRecord === 'g' || typeOfRecord === 'i' || typeOfRecord === 'j') {\n if (fields007.some(f => f.value[0] === 'c')) { // c=computer\n // i and j: should we check 007/05 (audio)=a as well?\n return 'c';\n }\n }\n\n if (typeOfRecord === 'g') {\n if (fields007.some(f => f.value[0] === 'g')) { // g=projected\n return 'g';\n }\n if (fields007.some(f => f.value[0] === 'm' || f.value[0] === 'v')) { // m=movie, v=videorecording (cyrillux maps videorecording to 'c'/computer, fix it there?)\n return 'v';\n }\n }\n\n if (typeOfRecord === 'i' || typeOfRecord === 'j') {\n // Ye olde stuff: 245$h might contain value 'Äänite', which returns 'a'.\n // NB! Cyrillux returns 'c'/com a bit more aggressively for j (music)\n return 's'; // audio\n }\n\n return mapFormOfItemToField337B(getFormOfItem(record));\n }\n\n function getMissing337(record) {\n const [f337] = record.get('337');\n if (f337) {\n // nvdebug(fieldToString(f337));\n return undefined;\n }\n\n const b = guessMissing337B(record) || 'z';\n\n const catLang = getCatalogingLanguage(record);\n const catLang2 = catLang ? catLang : 'fin';\n const a = map337CodeToTerm(b, catLang2);\n\n const data = {tag: '337', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdamedia'}\n ]};\n\n return data;\n }\n}\n\nfunction mapFormOfItemToField337B(formOfItem) {\n nvdebug(`mapping ${formOfItem} to 337$b`);\n\n const [result] = mappings337B.filter(row => row.formOfItem === formOfItem);\n if (result) {\n return result.rdacontent;\n }\n return 'z'; // undefined; // How about 'z'/unspecified. Currently done\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField337.js","names":["_utils","require","_field33XUtils","description","mappings337B","formOfItem","rdacontent","_default","validate","fix","record","nvdebug","newField","getMissing337","res","message","valid","insertField","msg","fieldToString","guessObjectsMissing337B","field008","get","value","guessMissing337B","typeOfRecord","getTypeOfRecord","fields007","some","f","mapFormOfItemToField337B","getFormOfItem","f337","undefined","b","catLang","getCatalogingLanguage","catLang2","a","map337CodeToTerm","data","tag","ind1","ind2","subfields","code","result","filter","row"],"sources":["../src/addMissingField337.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map337CodeToTerm} from './field33XUtils';\n\nconst description = 'Add missing 337 field(s)';\n\n// Based on https://github.com/NatLibFi/USEMARCON-Cyrillux/blob/master/008-23-337a.tbl . Extended!\nconst mappings337B = [\n {formOfItem: ' ', rdacontent: 'n'}, // unmediated - käytettävissä ilman laitetta\n {formOfItem: '|', rdacontent: 'n'},\n {formOfItem: 'a', rdacontent: 'h'}, // microform\n {formOfItem: 'b', rdacontent: 'h'},\n {formOfItem: 'c', rdacontent: 'h'},\n {formOfItem: 'd', rdacontent: 'n'},\n {formOfItem: 'e', rdacontent: 'n'},\n {formOfItem: 'f', rdacontent: 'n'},\n {formOfItem: 'o', rdacontent: 'c'}, // computer\n {formOfItem: 'q', rdacontent: 'c'},\n {formOfItem: 'r', rdacontent: 'n'},\n {formOfItem: 's', rdacontent: 'c'}\n];\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newField = getMissing337(record);\n const res = {message: [], fix: [], valid: true};\n if (newField) {\n record.insertField(newField);\n return res;\n }\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}....`);\n const newField = getMissing337(record);\n if (!newField) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(newField)}'`;\n return {message: [msg], valid: false};\n }\n\n function guessObjectsMissing337B(record) {\n const [field008] = record.get('008');\n if (field008 && field008.value[33] === 'p') {\n return 'p'; // microscopic\n }\n return 'n'; // unmediated\n }\n\n function guessMissing337B(record) {\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord === 'm') { // LDR/06=m/computer file\n return 'c'; // computer\n }\n if (typeOfRecord === 'o' || typeOfRecord === 'p') {\n return 'x'; // other\n }\n if (typeOfRecord === 'r') { // object\n return guessObjectsMissing337B(record);\n }\n const fields007 = record.get('007');\n\n // TO DO: type a/t + 245$h (not multimedia): use 007/00 based expection\n\n // 007/00 implies that 337$b=c (computer)\n if (typeOfRecord === 'g' || typeOfRecord === 'i' || typeOfRecord === 'j') {\n if (fields007.some(f => f.value[0] === 'c')) { // c=computer\n // i and j: should we check 007/05 (audio)=a as well?\n return 'c';\n }\n }\n\n if (typeOfRecord === 'g') {\n if (fields007.some(f => f.value[0] === 'g')) { // g=projected\n return 'g';\n }\n if (fields007.some(f => f.value[0] === 'm' || f.value[0] === 'v')) { // m=movie, v=videorecording (cyrillux maps videorecording to 'c'/computer, fix it there?)\n return 'v';\n }\n }\n\n if (typeOfRecord === 'i' || typeOfRecord === 'j') {\n // Ye olde stuff: 245$h might contain value 'Äänite', which returns 'a'.\n // NB! Cyrillux returns 'c'/com a bit more aggressively for j (music)\n return 's'; // audio\n }\n\n return mapFormOfItemToField337B(getFormOfItem(record));\n }\n\n function getMissing337(record) {\n const [f337] = record.get('337');\n if (f337) {\n // nvdebug(fieldToString(f337));\n return undefined;\n }\n\n const b = guessMissing337B(record) || 'z';\n\n const catLang = getCatalogingLanguage(record);\n const catLang2 = catLang ? catLang : 'fin';\n const a = map337CodeToTerm(b, catLang2);\n\n const data = {tag: '337', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a},\n {code: 'b', value: b},\n {code: '2', value: 'rdamedia'}\n ]};\n\n return data;\n }\n}\n\nfunction mapFormOfItemToField337B(formOfItem) {\n nvdebug(`mapping ${formOfItem} to 337$b`);\n\n const [result] = mappings337B.filter(row => row.formOfItem === formOfItem);\n if (result) {\n return result.rdacontent;\n }\n return 'z'; // undefined; // How about 'z'/unspecified. Currently done\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAFA;;AAIA,MAAME,WAAW,GAAG,0BAA0B;;AAE9C;AACA,MAAMC,YAAY,GAAG,CACnB;EAACC,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC;AAAE;AACpC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC;AAAE;AACpC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC;AAAE;AACpC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,EAClC;EAACD,UAAU,EAAE,GAAG;EAAEC,UAAU,EAAE;AAAG,CAAC,CACnC;AAEc,SAAAC,SAAA,EAAY;EAEzB,OAAO;IACLJ,WAAW;IAAEK,QAAQ;IAAEC;EACzB,CAAC;EAED,SAASA,GAAGA,CAACC,MAAM,EAAE;IACnB,IAAAC,cAAO,EAAC,OAAOR,WAAW,KAAK,CAAC;IAChC,MAAMS,QAAQ,GAAGC,aAAa,CAACH,MAAM,CAAC;IACtC,MAAMI,GAAG,GAAG;MAACC,OAAO,EAAE,EAAE;MAAEN,GAAG,EAAE,EAAE;MAAEO,KAAK,EAAE;IAAI,CAAC;IAC/C,IAAIJ,QAAQ,EAAE;MACZF,MAAM,CAACO,WAAW,CAACL,QAAQ,CAAC;MAC5B,OAAOE,GAAG;IACZ;IAEA,OAAOA,GAAG;EACZ;EAEA,SAASN,QAAQA,CAACE,MAAM,EAAE;IACxB,IAAAC,cAAO,EAAC,YAAYR,WAAW,MAAM,CAAC;IACtC,MAAMS,QAAQ,GAAGC,aAAa,CAACH,MAAM,CAAC;IACtC,IAAI,CAACE,QAAQ,EAAE;MACb,OAAO;QAACG,OAAO,EAAE,EAAE;QAAEC,KAAK,EAAE;MAAI,CAAC;IACnC;IACA,MAAME,GAAG,GAAG,GAAGf,WAAW,MAAM,IAAAgB,oBAAa,EAACP,QAAQ,CAAC,GAAG;IAC1D,OAAO;MAACG,OAAO,EAAE,CAACG,GAAG,CAAC;MAAEF,KAAK,EAAE;IAAK,CAAC;EACvC;EAEA,SAASI,uBAAuBA,CAACV,MAAM,EAAE;IACvC,MAAM,CAACW,QAAQ,CAAC,GAAGX,MAAM,CAACY,GAAG,CAAC,KAAK,CAAC;IACpC,IAAID,QAAQ,IAAIA,QAAQ,CAACE,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE;MAC1C,OAAO,GAAG,CAAC,CAAC;IACd;IACA,OAAO,GAAG,CAAC,CAAC;EACd;EAEA,SAASC,gBAAgBA,CAACd,MAAM,EAAE;IAChC,MAAMe,YAAY,GAAGf,MAAM,CAACgB,eAAe,CAAC,CAAC;IAE7C,IAAID,YAAY,KAAK,GAAG,EAAE;MAAE;MAC1B,OAAO,GAAG,CAAC,CAAC;IACd;IACA,IAAIA,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD,OAAO,GAAG,CAAC,CAAC;IACd;IACA,IAAIA,YAAY,KAAK,GAAG,EAAE;MAAE;MAC1B,OAAOL,uBAAuB,CAACV,MAAM,CAAC;IACxC;IACA,MAAMiB,SAAS,GAAGjB,MAAM,CAACY,GAAG,CAAC,KAAK,CAAC;;IAEnC;;IAEA;IACA,IAAIG,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MACxE,IAAIE,SAAS,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;QAAE;QAC7C;QACA,OAAO,GAAG;MACZ;IACF;IAEA,IAAIE,YAAY,KAAK,GAAG,EAAE;MACxB,IAAIE,SAAS,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;QAAE;QAC7C,OAAO,GAAG;MACZ;MACA,IAAII,SAAS,CAACC,IAAI,CAACC,CAAC,IAAIA,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAIM,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;QAAE;QACnE,OAAO,GAAG;MACZ;IACF;IAEA,IAAIE,YAAY,KAAK,GAAG,IAAIA,YAAY,KAAK,GAAG,EAAE;MAChD;MACA;MACA,OAAO,GAAG,CAAC,CAAC;IACd;IAEA,OAAOK,wBAAwB,CAAC,IAAAC,4BAAa,EAACrB,MAAM,CAAC,CAAC;EACxD;EAEA,SAASG,aAAaA,CAACH,MAAM,EAAE;IAC7B,MAAM,CAACsB,IAAI,CAAC,GAAGtB,MAAM,CAACY,GAAG,CAAC,KAAK,CAAC;IAChC,IAAIU,IAAI,EAAE;MACR;MACA,OAAOC,SAAS;IAClB;IAEA,MAAMC,CAAC,GAAGV,gBAAgB,CAACd,MAAM,CAAC,IAAI,GAAG;IAEzC,MAAMyB,OAAO,GAAG,IAAAC,4BAAqB,EAAC1B,MAAM,CAAC;IAC7C,MAAM2B,QAAQ,GAAGF,OAAO,GAAGA,OAAO,GAAG,KAAK;IAC1C,MAAMG,CAAC,GAAG,IAAAC,+BAAgB,EAACL,CAAC,EAAEG,QAAQ,CAAC;IAEvC,MAAMG,IAAI,GAAG;MAACC,GAAG,EAAE,KAAK;MAAEC,IAAI,EAAE,GAAG;MAAEC,IAAI,EAAE,GAAG;MAAEC,SAAS,EAAE,CACzD;QAACC,IAAI,EAAE,GAAG;QAAEtB,KAAK,EAAEe;MAAC,CAAC,EACrB;QAACO,IAAI,EAAE,GAAG;QAAEtB,KAAK,EAAEW;MAAC,CAAC,EACrB;QAACW,IAAI,EAAE,GAAG;QAAEtB,KAAK,EAAE;MAAU,CAAC;IAC/B,CAAC;IAEF,OAAOiB,IAAI;EACb;AACF;AAEA,SAASV,wBAAwBA,CAACzB,UAAU,EAAE;EAC5C,IAAAM,cAAO,EAAC,WAAWN,UAAU,WAAW,CAAC;EAEzC,MAAM,CAACyC,MAAM,CAAC,GAAG1C,YAAY,CAAC2C,MAAM,CAACC,GAAG,IAAIA,GAAG,CAAC3C,UAAU,KAAKA,UAAU,CAAC;EAC1E,IAAIyC,MAAM,EAAE;IACV,OAAOA,MAAM,CAACxC,UAAU;EAC1B;EACA,OAAO,GAAG,CAAC,CAAC;AACd","ignoreList":[]}
@@ -5,7 +5,7 @@ var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _addMissingField = _interopRequireDefault(require("./addMissingField337"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  (0, _fixugen.default)({
10
10
  callback,
11
11
  path: [__dirname, '..', 'test-fixtures', 'addMissingField337'],
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField337.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField337.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField337';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField337'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\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 expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField337.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField337.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField337';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField337'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\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 expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EAExD,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField338.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newField","getMissing338","res","message","valid","insertField","msg","fieldToString","trimExtent","value","replace","extractExtent","f300","get","undefined","a","subfields","filter","sf","code","extentToAudioCarrierType","extent","match","typeOfRecord","getTypeOfRecord","includes","fields","some","f","tag","extentToComputerCarrierType","formOfItem","extentToMicroformCarrierType","getFormOfItem","extentToProjectedImageCarrierType","extentToUnmediatedCarrierType","extentToVideoCarrierType","extentToCarrierType","getComputerCarrierType","formOfItem2","cand","getMicroformCarrierType","f007","length","materialDesignation","charAt","isUnmediatedVolume","fields337","fieldHasSubfield","fields336","formOfItemToField338","audioToField338","extentToCode","projectedToField338","objectToField338","educatedGuessIsOnlineResource","fields856","ind1","ind2","checkQualifyingInformation","identifierFields","educatedGuessToCarrierType","finalFallback","f337","guessMissing338B","b","catLang","getCatalogingLanguage","map338CodeToTerm","a2","data"],"sources":["../src/addMissingField338.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map338CodeToTerm} from './field33XUtils';\n\n// Based mostly on USEMARCON-RDA. However, many things have been rethought, modernized etc.\nconst description = 'Add missing 338 field(s)';\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newField = getMissing338(record);\n const res = {message: [], fix: [], valid: true};\n\n if (newField) {\n record.insertField(newField);\n return res;\n }\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newField = getMissing338(record);\n if (newField) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(newField)}'`;\n return {message: [msg], valid: false};\n }\n\n\n function trimExtent(value) {\n return value.replace(/\\([^)]*\\)/gu, '').replace(/\\[[^\\]*]\\]/gu, '').replace(/[0-9]/gu, '').replace(/^ +/gu, '').replace(/[ :;+]+$/gu, '').replace(/ +/gu, ' ');\n }\n\n function extractExtent(record) {\n const [f300] = record.get('300');\n if (!f300) {\n return undefined;\n }\n const [a] = f300.subfields.filter(sf => sf.code === 'a');\n if (!a) {\n return undefined;\n }\n return trimExtent(a.value);\n }\n\n\n function extentToAudioCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n nvdebug(`AUDIO EXTENT: '${extent}`);\n if (extent.match(/^(?:audio discs?|[^ ]*ljudskiva|[^ ]*ljudskivor|LP-levy|LP-levyä|LP-skiva|LP-skivor|[^ ]*äänilevy)$/iu)) {\n return 'sd';\n }\n // Boldly assuming here that any cassette is audio\n if (extent.match(/^(?:audiocasettes?|C-kas[^ ]*|DAT-as[^ ]*|kasettia?|kassett|kassetter|ljudkassett|ljudkassetter|äänikasettia?)$/ui)) {\n return 'ss';\n }\n\n const typeOfRecord = record.getTypeOfRecord();\n if (['i', 'j'].includes(typeOfRecord) || record.fields.some(f => f.tag === '007' && f.value[0] === 's')) {\n if (extent.match(/^[^ ]*(?:levyä?|skiva|skivor)$/ui)) {\n return 'sd';\n }\n if (extent.match(/^[^ ]*(?:cassettes?|kasettia?|kassett|kassetter)$/ui)) {\n return 'ss';\n }\n }\n\n return undefined;\n }\n\n function extentToComputerCarrierType(record, formOfItem = '?') {\n const extent = extractExtent(record); // trimmed 300$a\n if (extent) {\n // What about USB etc?!?\n if (extent.match(/^(?:computer chip cartridge|datorminnesmodul|piirikotelo)$/ui)) {\n return 'cb'; // eg. Nintendo Switch games?\n }\n if (extent.match(/^(?:CD-ROM[^ ]*|levyke|levykettä)$/ui)) {\n return 'cd';\n }\n // Might be a video as well, thus the formOfItem check:\n if (['q', 's'].includes(formOfItem) && extent.match(/^(?:CD-levy|optinen levy|optisk skiva|optiska skivor|optista levyä)$/ui)) {\n return 'cd';\n }\n if (extent.match(/^(?:computer card|datorkort|minneskort|muistikortti)[^ ]*$/u)) { // Melinda only muistikortti\n return 'ck';\n }\n if (extent.match(/^(?:online resource|onlineresurs|verkkoaineisto)$/ui)) {\n return 'cr';\n }\n }\n\n return undefined;\n }\n\n function extentToMicroformCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n // No instances in Melinda map to 'ha', 'hb', 'hc'\n\n if (extent.match(/^(?:filmikorttia?|microfiches?|mikrokorttia?)$/ui)) {\n // May be 'hg' as well? (\"mikrokortti\" vs \"mikrokortti (läpinäkymätön)\")\n if (getFormOfItem(record) === 'c') {\n return 'hg'; // Mikrokortti (läpinäkymätön)\n }\n return 'he';\n }\n\n if (extent.match(/^(?:microfilm rolls?|mikrofilmirullaa?(?: kelalla)?|mikrofilmsrullar|mikrofilmsrulle)$/ui)) {\n return 'hj';\n }\n\n\n return undefined;\n }\n\n // extentToMicroscopicCarrierType not really needed\n\n function extentToProjectedImageCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n if (extent.match(/^(?:diaa?|diabild|diabilder|slides?)$/ui)) {\n return 'gs';\n }\n if (extent.match(/^(?:overhead transparencies|overhead transparency|piirtoheitinkalvoa?|transparang|transparanger)$/ui)) {\n return 'gt';\n }\n if (extent.match(/^(?:film rolls?|filmirullaa?|filmrullar|filmrulle)$/ui)) {\n return 'mo';\n }\n return undefined;\n }\n\n // StereographicCarrierType not needed\n\n function extentToUnmediatedCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n\n return undefined;\n }\n\n function extentToVideoCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n // DVD-videoskivor etc\n if (extent.match(/^[^ ]*(?:videodiscs?|videolevyä?|videoskiva|videoskivor)$/ui)) {\n return 'vd';\n }\n if (extent.match(/^(?:videocassettes?|videokassett|videokassetter|videokasettia?)$/ui) || extent.match(/^(?:VHS)/ui)) {\n return 'vf';\n }\n return undefined;\n }\n\n function extentToCarrierType(record) {\n nvdebug(`EXTENT2CARRIERTYPE`);\n return extentToAudioCarrierType(record) ||\n extentToComputerCarrierType(record) ||\n extentToMicroformCarrierType(record) ||\n // Microscopic carriers don't really exist in our data\n extentToProjectedImageCarrierType(record) ||\n // Stereographic carriers don't really exist in our data\n extentToUnmediatedCarrierType(record) ||\n extentToVideoCarrierType(record);\n }\n\n function getComputerCarrierType(record) {\n const formOfItem = getFormOfItem(record);\n\n if (formOfItem === 'o') { // Online resource\n return 'cr';\n }\n\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord !== 'm') {\n if (!['o', 'q', 's'].includes(formOfItem)) { // (Actually 'o' was already handled.) Probably not a computer carrier type\n return undefined;\n }\n }\n\n /* After re-reading, this seems illegal\n if (typeOfRecord === 'm') {\n const f007 = record.get('007');\n if (f007.length === 1) {\n // ca: none, cb: 10 or so, probably errors (typically USB)\n if (f007[0].value[0] === 'c' && f007[0].value[1] === 'o') {\n return 'cd';\n }\n }\n }\n */\n\n // Check fields 300$a (extent), 256$a (computer file characteristics), 516$a (type of computer file or data note), and possible 245$h (medium)\n const formOfItem2 = typeOfRecord === 'm' && formOfItem === '|' ? 's' : formOfItem; // handle '|'\n const cand = extentToComputerCarrierType(record, formOfItem2);\n if (cand) {\n return cand;\n }\n\n return undefined;\n }\n\n function getMicroformCarrierType(record) {\n const f007 = record.get('007');\n if (f007.length === 1 && f007[0].value[0] === 'h') {\n const materialDesignation = f007[0].value.charAt(1);\n // 007/00-01 does not seem exactly trustworthy, but can't blame us for crappy metadata...\n if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'].includes(materialDesignation)) {\n return `h${materialDesignation}`;\n }\n }\n\n const formOfItem = getFormOfItem(record);\n const cand = extentToMicroformCarrierType(record, formOfItem);\n if (cand) {\n return cand;\n }\n\n return undefined;\n }\n\n function isUnmediatedVolume(record) { // Volume/Nide\n const typeOfRecord = record.getTypeOfRecord();\n if (!['a', 'c', 'e', 't'].includes(typeOfRecord)) {\n return false;\n }\n const fields337 = record.get('337');\n if (!fields337 || !fields337.some(f => fieldHasSubfield(f, 'b', 'n'))) {\n return false;\n }\n\n const fields336 = record.get('336');\n\n if (fields336 && fields336.some(f => f.subfields.some(sf => sf.code === 'b' && ['txt', 'cri'].includes(sf.value)))) {\n return 'nc'; // HANDLE ARKKI! ETC...\n }\n // Add 300$a value-based guesses?\n return false;\n }\n\n function formOfItemToField338(record) {\n const formOfItem = getFormOfItem(record);\n if (formOfItem === 'a') {\n // The only notable exception found in Melinda's tag=300 fields:\n if (record.get('300').some(f => f.subfields.some(sf => sf.code === 'a' && sf.value.match(/mikrofilmikela/iu)))) {\n return 'hd';\n }\n // Empically observed default in Melinda:\n return 'hj'; // mikrofilmirulla\n }\n if (formOfItem === 'b') { // mikrokortti\n return 'he';\n }\n if (formOfItem === 'c') { // Deviates from usemarcon-bookwhere-rda. Fix it? Check data?\n return 'hg'; // Mikrokortti (läpinäkymätön). We have none in Melinda it seems... Add test?\n }\n // 'd' isoteksti\n // 'e' sanomalehti (for CR only)\n // 'f' pistekirjoitus\n if (formOfItem === 'o') { // online resource\n return 'cr'; // already handled elsewhere, but keep this here as well\n }\n // 'q' local electronic stuff, use 300 et al to guess. Implemented elsewhere.\n // 'r' painojäljenne, arkki vs nide?\n // 's' electronic (might be local or online). Implemented elsewhere.\n return undefined;\n }\n\n function audioToField338(record) {\n nvdebug('AUDIO-TO-338');\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord !== 'i' && typeOfRecord !== 'j') {\n return undefined;\n }\n const f007 = record.get('007');\n if (f007.length === 1 && f007[0].value[0] === 's') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['d', 'e', 's', 't'].includes(materialDesignation)) {\n return `s${materialDesignation}`;\n }\n // 007/00-01 sr implies online resource, but we'll probably figure it out anyways\n }\n\n const extentToCode = extentToAudioCarrierType(record); // field 300\n if (extentToCode) {\n return extentToCode;\n }\n\n return undefined;\n }\n\n function projectedToField338(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord !== 'g') { // must be \"projected\"\n return undefined;\n }\n\n const f007 = record.get('007');\n if (f007.length === 1) {\n if (f007[0].value[0] === 'g') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['c', 'd', 'f', 's', 't'].includes(materialDesignation)) {\n return `g${materialDesignation}`;\n }\n if (materialDesignation === 'o') {\n return 'gf';\n }\n }\n if (f007[0].value[0] === 'v') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['c', 'd', 'f', 'r'].includes(materialDesignation)) {\n return `v${materialDesignation}`;\n }\n }\n }\n\n const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record); // field 300\n if (extentToCode) {\n return extentToCode;\n }\n\n return undefined;\n }\n\n function objectToField338(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord === 'r') {\n // The only subdivision might be card/no. Marginal, so I'm not checking that now.\n return 'nr';\n }\n\n return undefined;\n }\n\n function educatedGuessIsOnlineResource(record) {\n const fields856 = record.get('856');\n\n if (fields856.some(f => f.ind1 === '4' && f.ind2 === '0')) {\n return 'cr';\n }\n\n return undefined;\n }\n\n function checkQualifyingInformation(record) {\n const identifierFields = record.get('(?:015|020|024|028)').filter(f => f.subfields.some(sf => sf.code === 'q'));\n if (identifierFields.some(f => f.subfields.some(sf => sf.code === 'q' && sf.value.match(/\\b(?:hard-?cover|kierre|nid|sid|kovakant|pehmeäkant|pärmar)/iu)))) {\n return 'nc';\n }\n return undefined;\n }\n\n function educatedGuessToCarrierType(record) {\n\n\n return checkQualifyingInformation(record) || educatedGuessIsOnlineResource(record) || finalFallback();\n\n\n function finalFallback() {\n const [f337] = record.get('337');\n if (f337) {\n if (f337.subfields.some(sf => sf.code === 'b' && sf.value === 'n')) { // unmediated\n // As we are a library, most of the stuff are books\n return 'nc';\n }\n }\n return undefined;\n }\n\n\n }\n\n function guessMissing338B(record) {\n // Data sources (which should be trusted most?)\n // LDR/06\n // 007\n // 008/form of item\n // 300\n // 256\n // 516\n // 245$h...\n // First use form of item?\n return getComputerCarrierType(record) || // LDR/06=m (and 007 and 300)\n objectToField338(record) || // LDR/06=r\n audioToField338(record) || // LDR/06=i/j (and 007 and 300)\n projectedToField338(record) || // ...\n formOfItemToField338(record) || // 'a' 'b', 'c', 'o'\n getMicroformCarrierType(record) ||\n isUnmediatedVolume(record) ||\n extentToCarrierType(record) || // fallback: field 300-based guess\n educatedGuessToCarrierType(record); // 337$b='n' (käytettävissä ilman laitetta) -> nc\n\n /*\n const firstFunction = guessFunctions.find(f => f(record));\n if (firstFunction) {\n return firstFunction(record);\n }\n\n return undefined;\n */\n }\n\n function getMissing338(record) {\n // Field 773 and 973 means that the record is a component record, and doesn't need field 338.\n // This will return only a single value. Multivalues must be handled before this...\n if (record.fields.some(f => ['338', '773', '973'].includes(f.tag))) {\n return undefined;\n }\n\n const b = guessMissing338B(record) || 'zu';\n\n const catLang = getCatalogingLanguage(record) || 'fin';\n const a = map338CodeToTerm(b, catLang);\n const a2 = a ? a : 'z'; // unspecified\n\n const data = {tag: '338', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a2},\n {code: 'b', value: b},\n {code: '2', value: 'rdacarrier'}\n ]};\n\n return data;\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField338.js","names":["_utils","require","_field33XUtils","description","_default","validate","fix","record","nvdebug","newField","getMissing338","res","message","valid","insertField","msg","fieldToString","trimExtent","value","replace","extractExtent","f300","get","undefined","a","subfields","filter","sf","code","extentToAudioCarrierType","extent","match","typeOfRecord","getTypeOfRecord","includes","fields","some","f","tag","extentToComputerCarrierType","formOfItem","extentToMicroformCarrierType","getFormOfItem","extentToProjectedImageCarrierType","extentToUnmediatedCarrierType","extentToVideoCarrierType","extentToCarrierType","getComputerCarrierType","formOfItem2","cand","getMicroformCarrierType","f007","length","materialDesignation","charAt","isUnmediatedVolume","fields337","fieldHasSubfield","fields336","formOfItemToField338","audioToField338","extentToCode","projectedToField338","objectToField338","educatedGuessIsOnlineResource","fields856","ind1","ind2","checkQualifyingInformation","identifierFields","educatedGuessToCarrierType","finalFallback","f337","guessMissing338B","b","catLang","getCatalogingLanguage","map338CodeToTerm","a2","data"],"sources":["../src/addMissingField338.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldHasSubfield, fieldToString, getCatalogingLanguage, nvdebug} from './utils';\nimport {getFormOfItem, map338CodeToTerm} from './field33XUtils';\n\n// Based mostly on USEMARCON-RDA. However, many things have been rethought, modernized etc.\nconst description = 'Add missing 338 field(s)';\n\nexport default function () {\n\n return {\n description, validate, fix\n };\n\n function fix(record) {\n nvdebug(`FIX ${description}...`);\n const newField = getMissing338(record);\n const res = {message: [], fix: [], valid: true};\n\n if (newField) {\n record.insertField(newField);\n return res;\n }\n\n return res;\n }\n\n function validate(record) {\n nvdebug(`VALIDATE ${description}...`);\n const newField = getMissing338(record);\n if (newField) {\n return {message: [], valid: true};\n }\n const msg = `${description}: '${fieldToString(newField)}'`;\n return {message: [msg], valid: false};\n }\n\n\n function trimExtent(value) {\n return value.replace(/\\([^)]*\\)/gu, '').replace(/\\[[^\\]*]\\]/gu, '').replace(/[0-9]/gu, '').replace(/^ +/gu, '').replace(/[ :;+]+$/gu, '').replace(/ +/gu, ' ');\n }\n\n function extractExtent(record) {\n const [f300] = record.get('300');\n if (!f300) {\n return undefined;\n }\n const [a] = f300.subfields.filter(sf => sf.code === 'a');\n if (!a) {\n return undefined;\n }\n return trimExtent(a.value);\n }\n\n\n function extentToAudioCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n nvdebug(`AUDIO EXTENT: '${extent}`);\n if (extent.match(/^(?:audio discs?|[^ ]*ljudskiva|[^ ]*ljudskivor|LP-levy|LP-levyä|LP-skiva|LP-skivor|[^ ]*äänilevy)$/iu)) {\n return 'sd';\n }\n // Boldly assuming here that any cassette is audio\n if (extent.match(/^(?:audiocasettes?|C-kas[^ ]*|DAT-as[^ ]*|kasettia?|kassett|kassetter|ljudkassett|ljudkassetter|äänikasettia?)$/ui)) {\n return 'ss';\n }\n\n const typeOfRecord = record.getTypeOfRecord();\n if (['i', 'j'].includes(typeOfRecord) || record.fields.some(f => f.tag === '007' && f.value[0] === 's')) {\n if (extent.match(/^[^ ]*(?:levyä?|skiva|skivor)$/ui)) {\n return 'sd';\n }\n if (extent.match(/^[^ ]*(?:cassettes?|kasettia?|kassett|kassetter)$/ui)) {\n return 'ss';\n }\n }\n\n return undefined;\n }\n\n function extentToComputerCarrierType(record, formOfItem = '?') {\n const extent = extractExtent(record); // trimmed 300$a\n if (extent) {\n // What about USB etc?!?\n if (extent.match(/^(?:computer chip cartridge|datorminnesmodul|piirikotelo)$/ui)) {\n return 'cb'; // eg. Nintendo Switch games?\n }\n if (extent.match(/^(?:CD-ROM[^ ]*|levyke|levykettä)$/ui)) {\n return 'cd';\n }\n // Might be a video as well, thus the formOfItem check:\n if (['q', 's'].includes(formOfItem) && extent.match(/^(?:CD-levy|optinen levy|optisk skiva|optiska skivor|optista levyä)$/ui)) {\n return 'cd';\n }\n if (extent.match(/^(?:computer card|datorkort|minneskort|muistikortti)[^ ]*$/u)) { // Melinda only muistikortti\n return 'ck';\n }\n if (extent.match(/^(?:online resource|onlineresurs|verkkoaineisto)$/ui)) {\n return 'cr';\n }\n }\n\n return undefined;\n }\n\n function extentToMicroformCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n // No instances in Melinda map to 'ha', 'hb', 'hc'\n\n if (extent.match(/^(?:filmikorttia?|microfiches?|mikrokorttia?)$/ui)) {\n // May be 'hg' as well? (\"mikrokortti\" vs \"mikrokortti (läpinäkymätön)\")\n if (getFormOfItem(record) === 'c') {\n return 'hg'; // Mikrokortti (läpinäkymätön)\n }\n return 'he';\n }\n\n if (extent.match(/^(?:microfilm rolls?|mikrofilmirullaa?(?: kelalla)?|mikrofilmsrullar|mikrofilmsrulle)$/ui)) {\n return 'hj';\n }\n\n\n return undefined;\n }\n\n // extentToMicroscopicCarrierType not really needed\n\n function extentToProjectedImageCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n if (extent.match(/^(?:diaa?|diabild|diabilder|slides?)$/ui)) {\n return 'gs';\n }\n if (extent.match(/^(?:overhead transparencies|overhead transparency|piirtoheitinkalvoa?|transparang|transparanger)$/ui)) {\n return 'gt';\n }\n if (extent.match(/^(?:film rolls?|filmirullaa?|filmrullar|filmrulle)$/ui)) {\n return 'mo';\n }\n return undefined;\n }\n\n // StereographicCarrierType not needed\n\n function extentToUnmediatedCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n\n return undefined;\n }\n\n function extentToVideoCarrierType(record) {\n const extent = extractExtent(record); // trimmed 300$a\n if (!extent) {\n return undefined;\n }\n // DVD-videoskivor etc\n if (extent.match(/^[^ ]*(?:videodiscs?|videolevyä?|videoskiva|videoskivor)$/ui)) {\n return 'vd';\n }\n if (extent.match(/^(?:videocassettes?|videokassett|videokassetter|videokasettia?)$/ui) || extent.match(/^(?:VHS)/ui)) {\n return 'vf';\n }\n return undefined;\n }\n\n function extentToCarrierType(record) {\n nvdebug(`EXTENT2CARRIERTYPE`);\n return extentToAudioCarrierType(record) ||\n extentToComputerCarrierType(record) ||\n extentToMicroformCarrierType(record) ||\n // Microscopic carriers don't really exist in our data\n extentToProjectedImageCarrierType(record) ||\n // Stereographic carriers don't really exist in our data\n extentToUnmediatedCarrierType(record) ||\n extentToVideoCarrierType(record);\n }\n\n function getComputerCarrierType(record) {\n const formOfItem = getFormOfItem(record);\n\n if (formOfItem === 'o') { // Online resource\n return 'cr';\n }\n\n const typeOfRecord = record.getTypeOfRecord();\n\n if (typeOfRecord !== 'm') {\n if (!['o', 'q', 's'].includes(formOfItem)) { // (Actually 'o' was already handled.) Probably not a computer carrier type\n return undefined;\n }\n }\n\n /* After re-reading, this seems illegal\n if (typeOfRecord === 'm') {\n const f007 = record.get('007');\n if (f007.length === 1) {\n // ca: none, cb: 10 or so, probably errors (typically USB)\n if (f007[0].value[0] === 'c' && f007[0].value[1] === 'o') {\n return 'cd';\n }\n }\n }\n */\n\n // Check fields 300$a (extent), 256$a (computer file characteristics), 516$a (type of computer file or data note), and possible 245$h (medium)\n const formOfItem2 = typeOfRecord === 'm' && formOfItem === '|' ? 's' : formOfItem; // handle '|'\n const cand = extentToComputerCarrierType(record, formOfItem2);\n if (cand) {\n return cand;\n }\n\n return undefined;\n }\n\n function getMicroformCarrierType(record) {\n const f007 = record.get('007');\n if (f007.length === 1 && f007[0].value[0] === 'h') {\n const materialDesignation = f007[0].value.charAt(1);\n // 007/00-01 does not seem exactly trustworthy, but can't blame us for crappy metadata...\n if (['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j'].includes(materialDesignation)) {\n return `h${materialDesignation}`;\n }\n }\n\n const formOfItem = getFormOfItem(record);\n const cand = extentToMicroformCarrierType(record, formOfItem);\n if (cand) {\n return cand;\n }\n\n return undefined;\n }\n\n function isUnmediatedVolume(record) { // Volume/Nide\n const typeOfRecord = record.getTypeOfRecord();\n if (!['a', 'c', 'e', 't'].includes(typeOfRecord)) {\n return false;\n }\n const fields337 = record.get('337');\n if (!fields337 || !fields337.some(f => fieldHasSubfield(f, 'b', 'n'))) {\n return false;\n }\n\n const fields336 = record.get('336');\n\n if (fields336 && fields336.some(f => f.subfields.some(sf => sf.code === 'b' && ['txt', 'cri'].includes(sf.value)))) {\n return 'nc'; // HANDLE ARKKI! ETC...\n }\n // Add 300$a value-based guesses?\n return false;\n }\n\n function formOfItemToField338(record) {\n const formOfItem = getFormOfItem(record);\n if (formOfItem === 'a') {\n // The only notable exception found in Melinda's tag=300 fields:\n if (record.get('300').some(f => f.subfields.some(sf => sf.code === 'a' && sf.value.match(/mikrofilmikela/iu)))) {\n return 'hd';\n }\n // Empically observed default in Melinda:\n return 'hj'; // mikrofilmirulla\n }\n if (formOfItem === 'b') { // mikrokortti\n return 'he';\n }\n if (formOfItem === 'c') { // Deviates from usemarcon-bookwhere-rda. Fix it? Check data?\n return 'hg'; // Mikrokortti (läpinäkymätön). We have none in Melinda it seems... Add test?\n }\n // 'd' isoteksti\n // 'e' sanomalehti (for CR only)\n // 'f' pistekirjoitus\n if (formOfItem === 'o') { // online resource\n return 'cr'; // already handled elsewhere, but keep this here as well\n }\n // 'q' local electronic stuff, use 300 et al to guess. Implemented elsewhere.\n // 'r' painojäljenne, arkki vs nide?\n // 's' electronic (might be local or online). Implemented elsewhere.\n return undefined;\n }\n\n function audioToField338(record) {\n nvdebug('AUDIO-TO-338');\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord !== 'i' && typeOfRecord !== 'j') {\n return undefined;\n }\n const f007 = record.get('007');\n if (f007.length === 1 && f007[0].value[0] === 's') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['d', 'e', 's', 't'].includes(materialDesignation)) {\n return `s${materialDesignation}`;\n }\n // 007/00-01 sr implies online resource, but we'll probably figure it out anyways\n }\n\n const extentToCode = extentToAudioCarrierType(record); // field 300\n if (extentToCode) {\n return extentToCode;\n }\n\n return undefined;\n }\n\n function projectedToField338(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord !== 'g') { // must be \"projected\"\n return undefined;\n }\n\n const f007 = record.get('007');\n if (f007.length === 1) {\n if (f007[0].value[0] === 'g') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['c', 'd', 'f', 's', 't'].includes(materialDesignation)) {\n return `g${materialDesignation}`;\n }\n if (materialDesignation === 'o') {\n return 'gf';\n }\n }\n if (f007[0].value[0] === 'v') {\n const materialDesignation = f007[0].value.charAt(1);\n if (['c', 'd', 'f', 'r'].includes(materialDesignation)) {\n return `v${materialDesignation}`;\n }\n }\n }\n\n const extentToCode = extentToVideoCarrierType(record) || extentToProjectedImageCarrierType(record); // field 300\n if (extentToCode) {\n return extentToCode;\n }\n\n return undefined;\n }\n\n function objectToField338(record) {\n const typeOfRecord = record.getTypeOfRecord(record);\n if (typeOfRecord === 'r') {\n // The only subdivision might be card/no. Marginal, so I'm not checking that now.\n return 'nr';\n }\n\n return undefined;\n }\n\n function educatedGuessIsOnlineResource(record) {\n const fields856 = record.get('856');\n\n if (fields856.some(f => f.ind1 === '4' && f.ind2 === '0')) {\n return 'cr';\n }\n\n return undefined;\n }\n\n function checkQualifyingInformation(record) {\n const identifierFields = record.get('(?:015|020|024|028)').filter(f => f.subfields.some(sf => sf.code === 'q'));\n if (identifierFields.some(f => f.subfields.some(sf => sf.code === 'q' && sf.value.match(/\\b(?:hard-?cover|kierre|nid|sid|kovakant|pehmeäkant|pärmar)/iu)))) {\n return 'nc';\n }\n return undefined;\n }\n\n function educatedGuessToCarrierType(record) {\n\n\n return checkQualifyingInformation(record) || educatedGuessIsOnlineResource(record) || finalFallback();\n\n\n function finalFallback() {\n const [f337] = record.get('337');\n if (f337) {\n if (f337.subfields.some(sf => sf.code === 'b' && sf.value === 'n')) { // unmediated\n // As we are a library, most of the stuff are books\n return 'nc';\n }\n }\n return undefined;\n }\n\n\n }\n\n function guessMissing338B(record) {\n // Data sources (which should be trusted most?)\n // LDR/06\n // 007\n // 008/form of item\n // 300\n // 256\n // 516\n // 245$h...\n // First use form of item?\n return getComputerCarrierType(record) || // LDR/06=m (and 007 and 300)\n objectToField338(record) || // LDR/06=r\n audioToField338(record) || // LDR/06=i/j (and 007 and 300)\n projectedToField338(record) || // ...\n formOfItemToField338(record) || // 'a' 'b', 'c', 'o'\n getMicroformCarrierType(record) ||\n isUnmediatedVolume(record) ||\n extentToCarrierType(record) || // fallback: field 300-based guess\n educatedGuessToCarrierType(record); // 337$b='n' (käytettävissä ilman laitetta) -> nc\n\n /*\n const firstFunction = guessFunctions.find(f => f(record));\n if (firstFunction) {\n return firstFunction(record);\n }\n\n return undefined;\n */\n }\n\n function getMissing338(record) {\n // Field 773 and 973 means that the record is a component record, and doesn't need field 338.\n // This will return only a single value. Multivalues must be handled before this...\n if (record.fields.some(f => ['338', '773', '973'].includes(f.tag))) {\n return undefined;\n }\n\n const b = guessMissing338B(record) || 'zu';\n\n const catLang = getCatalogingLanguage(record) || 'fin';\n const a = map338CodeToTerm(b, catLang);\n const a2 = a ? a : 'z'; // unspecified\n\n const data = {tag: '338', ind1: ' ', ind2: ' ', subfields: [\n {code: 'a', value: a2},\n {code: 'b', value: b},\n {code: '2', value: 'rdacarrier'}\n ]};\n\n return data;\n }\n}\n\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ var _marcRecord = require("@natlibfi/marc-record");
5
5
  var _addMissingField = _interopRequireDefault(require("./addMissingField338"));
6
6
  var _fixura = require("@natlibfi/fixura");
7
7
  var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  (0, _fixugen.default)({
10
10
  callback,
11
11
  path: [__dirname, '..', 'test-fixtures', 'addMissingField338'],
@@ -1 +1 @@
1
- {"version":3,"file":"addMissingField338.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","obj","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField338.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField338';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField338'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}
1
+ {"version":3,"file":"addMissingField338.spec.js","names":["_chai","require","_marcRecord","_addMissingField","_interopRequireDefault","_fixura","_fixugen","e","__esModule","default","generateTests","callback","path","__dirname","useMetadataFile","recurse","fixura","reader","READERS","JSON","mocha","before","testValidatorFactory","validator","validatorFactory","expect","to","be","an","that","has","any","keys","description","a","validate","fix","getFixture","record","MarcRecord","expectedResult","result","eql"],"sources":["../src/addMissingField338.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './addMissingField338';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'addMissingField338'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\n});\n\nasync function testValidatorFactory() {\n const validator = await validatorFactory();\n\n expect(validator)\n .to.be.an('object')\n .that.has.any.keys('description', 'validate');\n\n expect(validator.description).to.be.a('string');\n expect(validator.validate).to.be.a('function');\n expect(validator.fix).to.be.a('function');\n}\n\nasync function callback({getFixture, fix = false}) {\n const validator = await validatorFactory();\n const record = new MarcRecord(getFixture('record.json'));\n const expectedResult = getFixture('expectedResult.json');\n // console.log(expectedResult); // eslint-disable-line\n\n if (!fix) {\n const result = await validator.validate(record);\n expect(result).to.eql(expectedResult);\n return;\n }\n\n await validator.fix(record);\n expect(record).to.eql(expectedResult);\n}\n"],"mappings":";;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,QAAA,GAAAF,sBAAA,CAAAH,OAAA;AAA8C,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C,IAAAG,gBAAa,EAAC;EACZC,QAAQ;EACRC,IAAI,EAAE,CAACC,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,oBAAoB,CAAC;EAC9DC,eAAe,EAAE,IAAI;EACrBC,OAAO,EAAE,KAAK;EACdC,MAAM,EAAE;IACNC,MAAM,EAAEC,eAAO,CAACC;EAClB,CAAC;EACDC,KAAK,EAAE;IACLC,MAAM,EAAEA,CAAA,KAAMC,oBAAoB,CAAC;EACrC;AACF,CAAC,CAAC;AAEF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAE1C,IAAAC,YAAM,EAACF,SAAS,CAAC,CACdG,EAAE,CAACC,EAAE,CAACC,EAAE,CAAC,QAAQ,CAAC,CAClBC,IAAI,CAACC,GAAG,CAACC,GAAG,CAACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC;EAE/C,IAAAP,YAAM,EAACF,SAAS,CAACU,WAAW,CAAC,CAACP,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,QAAQ,CAAC;EAC/C,IAAAT,YAAM,EAACF,SAAS,CAACY,QAAQ,CAAC,CAACT,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;EAC9C,IAAAT,YAAM,EAACF,SAAS,CAACa,GAAG,CAAC,CAACV,EAAE,CAACC,EAAE,CAACO,CAAC,CAAC,UAAU,CAAC;AAC3C;AAEA,eAAevB,QAAQA,CAAC;EAAC0B,UAAU;EAAED,GAAG,GAAG;AAAK,CAAC,EAAE;EACjD,MAAMb,SAAS,GAAG,MAAM,IAAAC,wBAAgB,EAAC,CAAC;EAC1C,MAAMc,MAAM,GAAG,IAAIC,sBAAU,CAACF,UAAU,CAAC,aAAa,CAAC,CAAC;EACxD,MAAMG,cAAc,GAAGH,UAAU,CAAC,qBAAqB,CAAC;EACxD;;EAEA,IAAI,CAACD,GAAG,EAAE;IACR,MAAMK,MAAM,GAAG,MAAMlB,SAAS,CAACY,QAAQ,CAACG,MAAM,CAAC;IAC/C,IAAAb,YAAM,EAACgB,MAAM,CAAC,CAACf,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;IACrC;EACF;EAEA,MAAMjB,SAAS,CAACa,GAAG,CAACE,MAAM,CAAC;EAC3B,IAAAb,YAAM,EAACa,MAAM,CAAC,CAACZ,EAAE,CAACgB,GAAG,CAACF,cAAc,CAAC;AACvC","ignoreList":[]}