@natlibfi/marc-record-validators-melinda 11.0.0 → 11.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/addMissingField336.js +272 -0
- package/dist/addMissingField336.js.map +1 -0
- package/dist/addMissingField336.spec.js +45 -0
- package/dist/addMissingField336.spec.js.map +1 -0
- package/dist/addMissingField337.js +177 -0
- package/dist/addMissingField337.js.map +1 -0
- package/dist/addMissingField337.spec.js +43 -0
- package/dist/addMissingField337.spec.js.map +1 -0
- package/dist/addMissingField338.js +424 -0
- package/dist/addMissingField338.js.map +1 -0
- package/dist/addMissingField338.spec.js +45 -0
- package/dist/addMissingField338.spec.js.map +1 -0
- package/dist/cyrillux-usemarcon-replacement.js +370 -0
- package/dist/cyrillux-usemarcon-replacement.js.map +1 -0
- package/dist/cyrillux-usemarcon-replacement.spec.js +45 -0
- package/dist/cyrillux-usemarcon-replacement.spec.js.map +1 -0
- package/dist/field33XUtils.js +529 -0
- package/dist/field33XUtils.js.map +1 -0
- package/dist/fix-33X.js +484 -0
- package/dist/fix-33X.js.map +1 -0
- package/dist/fix-33X.spec.js +45 -0
- package/dist/fix-33X.spec.js.map +1 -0
- package/dist/fix-language-codes.js +109 -0
- package/dist/fix-language-codes.js.map +1 -0
- package/dist/fix-language-codes.spec.js +44 -0
- package/dist/fix-language-codes.spec.js.map +1 -0
- package/dist/fixRelatorTerms.js +1 -1
- package/dist/fixRelatorTerms.js.map +1 -1
- package/dist/punctuation2.js +4 -3
- package/dist/punctuation2.js.map +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js +1 -1
- package/dist/resolvable-ext-references-melinda.spec.js.map +1 -1
- package/dist/sanitize-vocabulary-source-codes.js +7 -10
- package/dist/sanitize-vocabulary-source-codes.js.map +1 -1
- package/dist/utils.js +13 -8
- package/dist/utils.js.map +1 -1
- package/package.json +7 -7
- package/src/addMissingField336.js +260 -0
- package/src/addMissingField336.spec.js +46 -0
- package/src/addMissingField337.js +132 -0
- package/src/addMissingField337.spec.js +45 -0
- package/src/addMissingField338.js +446 -0
- package/src/addMissingField338.spec.js +46 -0
- package/src/cyrillux-usemarcon-replacement.js +410 -0
- package/src/cyrillux-usemarcon-replacement.spec.js +47 -0
- package/src/field33XUtils.js +156 -0
- package/src/fix-33X.js +473 -0
- package/src/fix-33X.spec.js +46 -0
- package/src/fix-language-codes.js +121 -0
- package/src/fix-language-codes.spec.js +45 -0
- package/src/fixRelatorTerms.js +1 -1
- package/src/punctuation2.js +3 -3
- package/src/sanitize-vocabulary-source-codes.js +9 -11
- package/src/utils.js +13 -8
- package/test-fixtures/addMissingField336/01/expectedResult.json +6 -0
- package/test-fixtures/addMissingField336/01/metadata.json +7 -0
- package/test-fixtures/addMissingField336/01/record.json +8 -0
- package/test-fixtures/addMissingField336/02/expectedResult.json +4 -0
- package/test-fixtures/addMissingField336/02/metadata.json +7 -0
- package/test-fixtures/addMissingField336/02/record.json +13 -0
- package/test-fixtures/addMissingField336/cod/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/cod/metadata.json +6 -0
- package/test-fixtures/addMissingField336/cod/record.json +6 -0
- package/test-fixtures/addMissingField336/cop/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/cop/metadata.json +6 -0
- package/test-fixtures/addMissingField336/cop/record.json +6 -0
- package/test-fixtures/addMissingField336/cop2/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/cop2/metadata.json +6 -0
- package/test-fixtures/addMissingField336/cop2/record.json +7 -0
- package/test-fixtures/addMissingField336/crf/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/crf/metadata.json +6 -0
- package/test-fixtures/addMissingField336/crf/record.json +6 -0
- package/test-fixtures/addMissingField336/cri/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/cri/metadata.json +6 -0
- package/test-fixtures/addMissingField336/cri/record.json +6 -0
- package/test-fixtures/addMissingField336/crt/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/crt/metadata.json +6 -0
- package/test-fixtures/addMissingField336/crt/record.json +7 -0
- package/test-fixtures/addMissingField336/f01/expectedResult.json +17 -0
- package/test-fixtures/addMissingField336/f01/metadata.json +6 -0
- package/test-fixtures/addMissingField336/f01/record.json +11 -0
- package/test-fixtures/addMissingField336/f02/expectedResult.json +15 -0
- package/test-fixtures/addMissingField336/f02/metadata.json +6 -0
- package/test-fixtures/addMissingField336/f02/record.json +9 -0
- package/test-fixtures/addMissingField336/mixed2txt/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/mixed2txt/metadata.json +6 -0
- package/test-fixtures/addMissingField336/mixed2txt/record.json +6 -0
- package/test-fixtures/addMissingField336/mixed2xxx/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/mixed2xxx/metadata.json +6 -0
- package/test-fixtures/addMissingField336/mixed2xxx/record.json +6 -0
- package/test-fixtures/addMissingField336/ntm/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/ntm/metadata.json +6 -0
- package/test-fixtures/addMissingField336/ntm/record.json +6 -0
- package/test-fixtures/addMissingField336/snd/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/snd/metadata.json +6 -0
- package/test-fixtures/addMissingField336/snd/record.json +6 -0
- package/test-fixtures/addMissingField336/spw/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/spw/metadata.json +6 -0
- package/test-fixtures/addMissingField336/spw/record.json +6 -0
- package/test-fixtures/addMissingField336/spw2/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/spw2/metadata.json +6 -0
- package/test-fixtures/addMissingField336/spw2/record.json +7 -0
- package/test-fixtures/addMissingField336/spw_txt/expectedResult.json +18 -0
- package/test-fixtures/addMissingField336/spw_txt/metadata.json +6 -0
- package/test-fixtures/addMissingField336/spw_txt/record.json +7 -0
- package/test-fixtures/addMissingField336/sti/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/sti/metadata.json +6 -0
- package/test-fixtures/addMissingField336/sti/record.json +6 -0
- package/test-fixtures/addMissingField336/sti_projected/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/sti_projected/metadata.json +6 -0
- package/test-fixtures/addMissingField336/sti_projected/record.json +7 -0
- package/test-fixtures/addMissingField336/tci/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/tci/metadata.json +6 -0
- package/test-fixtures/addMissingField336/tci/record.json +6 -0
- package/test-fixtures/addMissingField336/tcm/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/tcm/metadata.json +6 -0
- package/test-fixtures/addMissingField336/tcm/record.json +6 -0
- package/test-fixtures/addMissingField336/tdf/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/tdf/metadata.json +6 -0
- package/test-fixtures/addMissingField336/tdf/record.json +6 -0
- package/test-fixtures/addMissingField336/tdi/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/tdi/metadata.json +6 -0
- package/test-fixtures/addMissingField336/tdi/record.json +7 -0
- package/test-fixtures/addMissingField336/txt/expectedResult.json +12 -0
- package/test-fixtures/addMissingField336/txt/metadata.json +6 -0
- package/test-fixtures/addMissingField336/txt/record.json +6 -0
- package/test-fixtures/addMissingField336/zzz/expectedResult.json +13 -0
- package/test-fixtures/addMissingField336/zzz/metadata.json +6 -0
- package/test-fixtures/addMissingField336/zzz/record.json +7 -0
- package/test-fixtures/addMissingField337/c1/expectedResult.json +12 -0
- package/test-fixtures/addMissingField337/c1/metadata.json +6 -0
- package/test-fixtures/addMissingField337/c1/record.json +7 -0
- package/test-fixtures/addMissingField337/g1/expectedResult.json +13 -0
- package/test-fixtures/addMissingField337/g1/metadata.json +6 -0
- package/test-fixtures/addMissingField337/g1/record.json +7 -0
- package/test-fixtures/addMissingField337/n1/expectedResult.json +12 -0
- package/test-fixtures/addMissingField337/n1/metadata.json +6 -0
- package/test-fixtures/addMissingField337/n1/record.json +6 -0
- package/test-fixtures/addMissingField337/no_action_required/expectedResult.json +12 -0
- package/test-fixtures/addMissingField337/no_action_required/metadata.json +7 -0
- package/test-fixtures/addMissingField337/no_action_required/record.json +11 -0
- package/test-fixtures/addMissingField337/p1/expectedResult.json +12 -0
- package/test-fixtures/addMissingField337/p1/metadata.json +6 -0
- package/test-fixtures/addMissingField337/p1/record.json +6 -0
- package/test-fixtures/addMissingField337/validate_x1/expectedResult.json +6 -0
- package/test-fixtures/addMissingField337/validate_x1/metadata.json +6 -0
- package/test-fixtures/addMissingField337/validate_x1/record.json +6 -0
- package/test-fixtures/addMissingField338/cb/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/cb/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cb/record.json +8 -0
- package/test-fixtures/addMissingField338/cd/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/cd/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cd/record.json +8 -0
- package/test-fixtures/addMissingField338/ck/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/ck/metadata.json +6 -0
- package/test-fixtures/addMissingField338/ck/record.json +8 -0
- package/test-fixtures/addMissingField338/cr/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/cr/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cr/record.json +9 -0
- package/test-fixtures/addMissingField338/cr2/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/cr2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cr2/record.json +8 -0
- package/test-fixtures/addMissingField338/cr3/expectedResult.json +18 -0
- package/test-fixtures/addMissingField338/cr3/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cr3/record.json +12 -0
- package/test-fixtures/addMissingField338/cr4/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/cr4/metadata.json +6 -0
- package/test-fixtures/addMissingField338/cr4/record.json +9 -0
- package/test-fixtures/addMissingField338/gc/expectedResult.json +12 -0
- package/test-fixtures/addMissingField338/gc/metadata.json +6 -0
- package/test-fixtures/addMissingField338/gc/record.json +7 -0
- package/test-fixtures/addMissingField338/gd/expectedResult.json +13 -0
- package/test-fixtures/addMissingField338/gd/metadata.json +6 -0
- package/test-fixtures/addMissingField338/gd/record.json +8 -0
- package/test-fixtures/addMissingField338/gf/expectedResult.json +13 -0
- package/test-fixtures/addMissingField338/gf/metadata.json +6 -0
- package/test-fixtures/addMissingField338/gf/record.json +8 -0
- package/test-fixtures/addMissingField338/gs/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/gs/metadata.json +6 -0
- package/test-fixtures/addMissingField338/gs/record.json +9 -0
- package/test-fixtures/addMissingField338/gt/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/gt/metadata.json +6 -0
- package/test-fixtures/addMissingField338/gt/record.json +9 -0
- package/test-fixtures/addMissingField338/hd/expectedResult.json +16 -0
- package/test-fixtures/addMissingField338/hd/metadata.json +6 -0
- package/test-fixtures/addMissingField338/hd/record.json +10 -0
- package/test-fixtures/addMissingField338/he/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/he/metadata.json +6 -0
- package/test-fixtures/addMissingField338/he/record.json +9 -0
- package/test-fixtures/addMissingField338/he2/expectedResult.json +12 -0
- package/test-fixtures/addMissingField338/he2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/he2/record.json +6 -0
- package/test-fixtures/addMissingField338/hg/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/hg/metadata.json +7 -0
- package/test-fixtures/addMissingField338/hg/record.json +9 -0
- package/test-fixtures/addMissingField338/hg2/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/hg2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/hg2/record.json +9 -0
- package/test-fixtures/addMissingField338/hj/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/hj/metadata.json +6 -0
- package/test-fixtures/addMissingField338/hj/record.json +9 -0
- package/test-fixtures/addMissingField338/hj2/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/hj2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/hj2/record.json +9 -0
- package/test-fixtures/addMissingField338/mo/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/mo/metadata.json +6 -0
- package/test-fixtures/addMissingField338/mo/record.json +9 -0
- package/test-fixtures/addMissingField338/nc/expectedResult.json +19 -0
- package/test-fixtures/addMissingField338/nc/metadata.json +6 -0
- package/test-fixtures/addMissingField338/nc/record.json +13 -0
- package/test-fixtures/addMissingField338/nr/expectedResult.json +12 -0
- package/test-fixtures/addMissingField338/nr/metadata.json +7 -0
- package/test-fixtures/addMissingField338/nr/record.json +6 -0
- package/test-fixtures/addMissingField338/sd/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/sd/metadata.json +6 -0
- package/test-fixtures/addMissingField338/sd/record.json +8 -0
- package/test-fixtures/addMissingField338/sd2/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/sd2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/sd2/record.json +8 -0
- package/test-fixtures/addMissingField338/sd3/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/sd3/metadata.json +6 -0
- package/test-fixtures/addMissingField338/sd3/record.json +8 -0
- package/test-fixtures/addMissingField338/ss/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/ss/metadata.json +6 -0
- package/test-fixtures/addMissingField338/ss/record.json +8 -0
- package/test-fixtures/addMissingField338/ss2/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/ss2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/ss2/record.json +8 -0
- package/test-fixtures/addMissingField338/vd/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/vd/metadata.json +6 -0
- package/test-fixtures/addMissingField338/vd/record.json +9 -0
- package/test-fixtures/addMissingField338/vd2/expectedResult.json +13 -0
- package/test-fixtures/addMissingField338/vd2/metadata.json +6 -0
- package/test-fixtures/addMissingField338/vd2/record.json +8 -0
- package/test-fixtures/addMissingField338/vf/expectedResult.json +15 -0
- package/test-fixtures/addMissingField338/vf/metadata.json +6 -0
- package/test-fixtures/addMissingField338/vf/record.json +9 -0
- package/test-fixtures/addMissingField338/zu/expectedResult.json +14 -0
- package/test-fixtures/addMissingField338/zu/metadata.json +6 -0
- package/test-fixtures/addMissingField338/zu/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f01/expectedResult.json +32 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f01/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f01/record.json +20 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f02/expectedResult.json +29 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f02/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f02/record.json +9 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f03/expectedResult.json +34 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f03/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f03/record.json +12 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f04/expectedResult.json +26 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f04/metadata.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f04/record.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f05/expectedResult.json +27 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f05/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f05/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f06/expectedResult.json +27 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f06/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f06/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f07/expectedResult.json +25 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f07/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f07/record.json +8 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f08/expectedResult.json +34 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f08/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f08/record.json +33 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f09/expectedResult.json +35 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f09/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f09/record.json +35 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f10/expectedResult.json +41 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f10/metadata.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f10/record.json +33 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f11/expectedResult.json +32 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f11/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/f11/record.json +22 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v01/expectedResult.json +7 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v01/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v01/record.json +20 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v02/expectedResult.json +5 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v02/metadata.json +6 -0
- package/test-fixtures/cyrillux-usemarcon-replacement/v02/record.json +29 -0
- package/test-fixtures/fix-33X/f11/expectedResult.json +29 -0
- package/test-fixtures/fix-33X/f11/metadata.json +6 -0
- package/test-fixtures/fix-33X/f11/record.json +22 -0
- package/test-fixtures/fix-33X/v11/expectedResult.json +9 -0
- package/test-fixtures/fix-33X/v11/metadata.json +6 -0
- package/test-fixtures/fix-33X/v11/record.json +22 -0
- package/test-fixtures/fix-language-codes/01/expectedResult.json +5 -0
- package/test-fixtures/fix-language-codes/01/metadata.json +6 -0
- package/test-fixtures/fix-language-codes/01/record.json +7 -0
- package/test-fixtures/fix-language-codes/02/expectedResult.json +7 -0
- package/test-fixtures/fix-language-codes/02/metadata.json +6 -0
- package/test-fixtures/fix-language-codes/02/record.json +10 -0
- package/test-fixtures/fix-language-codes/03/expectedResult.json +10 -0
- package/test-fixtures/fix-language-codes/03/metadata.json +6 -0
- package/test-fixtures/fix-language-codes/03/record.json +8 -0
- package/test-fixtures/fix-language-codes/04/expectedResult.json +9 -0
- package/test-fixtures/fix-language-codes/04/metadata.json +7 -0
- package/test-fixtures/fix-language-codes/04/record.json +7 -0
- package/test-fixtures/fix-language-codes/05/expectedResult.json +8 -0
- package/test-fixtures/fix-language-codes/05/metadata.json +6 -0
- package/test-fixtures/fix-language-codes/05/record.json +5 -0
- package/test-fixtures/punctuation2/95/expectedResult.json +22 -0
- package/test-fixtures/punctuation2/95/metadata.json +6 -0
- package/test-fixtures/punctuation2/95/record.json +20 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/expectedResult.json +143 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/metadata.json +9 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/f03/record.json +145 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v03/expectedResult.json +5 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v03/metadata.json +6 -0
- package/test-fixtures/sanitize-vocabulary-source-codes/v03/record.json +145 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolvable-ext-references-melinda.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fetchMock","testContext","_interopRequireWildcard","_resolvableExtReferencesMelinda2","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","expect","chai","use","chaiAsPromised","endpoint","queryParam","prefixPattern","fields","describe","afterEach","__ResetDependency__","it","validator","to","be","an","that","any","keys","description","validate","rejectedWith","Error","mock","fetchMock","sandbox","fixture5000","fixture9550","__Rewire__","record","MarcRecord","tag","value","subfields","code","result","eql","valid","messages","fixture1000"],"sources":["../src/resolvable-ext-references-melinda.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport fetchMock from 'fetch-mock';\nimport * as testContext from '../src/resolvable-ext-references-melinda';\nimport {fixture5000, fixture9550, fixture1000} from '../test-fixtures/resolvable-ext-references-melinda';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\nconst endpoint = 'http://melinda.kansalliskirjasto.fi:210/fin01';\nconst queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';\nconst prefixPattern = /^\\(FOOBAR\\)/u;\nconst fields = {\n 773: ['w'],\n 833: ['w', 'p']\n};\n\ndescribe('resolvable-ext-references-melinda', () => {\n afterEach(() => {\n testContext.default.__ResetDependency__('fetch');\n });\n\n it('Creates a validator', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\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 it('Throws an error when prefixPattern not provided', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n // Cannot read property 'fields' of undefined or Cannot read properties of undefined (reading 'fields')'\n await expect(validator.validate()).to.be.rejectedWith(Error, /^Cannot read propert/u);\n });\n\n describe('#validate', () => {\n it('Finds prefixPattern on record and removes it', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}5000`, fixture5000);\n mock.get(`${endpoint}${queryParam}9550`, fixture9550);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)5000'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FOOBAR)9550'\n },\n {\n code: 'c',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds no matching prefixPattern on record', async () => {\n const mock = fetchMock.sandbox();\n\n mock.get(`${endpoint}5000`, fixture5000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FI-MELINDA)2620'\n },\n {\n code: 'w',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds prefixPattern on record but values not resolvable', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}1000`, fixture1000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)1000'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 773$w with value 1000 is not resolvable']});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"resolvable-ext-references-melinda.spec.js","names":["_chai","_interopRequireDefault","require","_chaiAsPromised","_marcRecord","_fetchMock","testContext","_interopRequireWildcard","_resolvableExtReferencesMelinda2","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","obj","expect","chai","use","chaiAsPromised","endpoint","queryParam","prefixPattern","fields","describe","afterEach","__ResetDependency__","it","validator","to","be","an","that","any","keys","description","validate","rejectedWith","Error","mock","fetchMock","sandbox","fixture5000","fixture9550","__Rewire__","record","MarcRecord","tag","value","subfields","code","result","eql","valid","messages","fixture1000"],"sources":["../src/resolvable-ext-references-melinda.spec.js"],"sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport fetchMock from 'fetch-mock';\nimport * as testContext from '../src/resolvable-ext-references-melinda';\nimport {fixture5000, fixture9550, fixture1000} from '../test-fixtures/resolvable-ext-references-melinda';\n\nconst {expect} = chai;\nchai.use(chaiAsPromised);\n\nconst endpoint = 'http://melinda.kansalliskirjasto.fi:210/fin01';\nconst queryParam = '?operation=searchRetrieve&maximumRecords=2&version=1&query=rec.id=';\nconst prefixPattern = /^\\(FOOBAR\\)/u;\nconst fields = {\n 773: ['w'],\n 833: ['w', 'p']\n};\n\ndescribe('resolvable-ext-references-melinda', () => {\n afterEach(() => {\n testContext.default.__ResetDependency__('fetch');\n });\n\n it('Creates a validator', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\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 it('Throws an error when prefixPattern not provided', async () => {\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n // Cannot read property 'fields' of undefined or Cannot read properties of undefined (reading 'fields')'\n await expect(validator.validate()).to.be.rejectedWith(Error, /^Cannot read propert/u);\n });\n\n describe('#validate', () => {\n it('Finds prefixPattern on record and removes it', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}5000`, fixture5000);\n mock.get(`${endpoint}${queryParam}9550`, fixture9550);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)5000'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FOOBAR)9550'\n },\n {\n code: 'c',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds no matching prefixPattern on record', async () => {\n const mock = fetchMock.sandbox();\n\n mock.get(`${endpoint}5000`, fixture5000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '833',\n subfields: [\n {\n code: 'p',\n value: '(FI-MELINDA)2620'\n },\n {\n code: 'w',\n value: '(FI-MELINDA)8850'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: true, messages: []});\n });\n\n it('Finds prefixPattern on record but values not resolvable', async () => {\n const mock = fetchMock.sandbox();\n mock.get(`${endpoint}${queryParam}1000`, fixture1000);\n\n testContext.default.__Rewire__('fetch', mock);\n const validator = await testContext.default({endpoint, prefixPattern, fields});\n\n const record = new MarcRecord({\n fields: [\n {\n tag: '001',\n value: '123456'\n },\n {\n tag: '035',\n subfields: [\n {\n code: 'a',\n value: '(FI-MELINDA)123456'\n }\n ]\n },\n {\n tag: '773',\n subfields: [\n {\n code: 'w',\n value: '(FOOBAR)1000'\n }\n ]\n }\n ]\n });\n const result = await validator.validate(record);\n\n expect(result).to.eql({valid: false, messages: ['Field 773$w with value 1000 is not resolvable']});\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -24,23 +24,23 @@ function _default() {
|
|
|
24
24
|
fix: [],
|
|
25
25
|
valid: true
|
|
26
26
|
};
|
|
27
|
-
|
|
27
|
+
const relevantFields = getRelevantFields(record);
|
|
28
|
+
relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f));
|
|
28
29
|
return res;
|
|
29
30
|
}
|
|
30
31
|
function validate(record) {
|
|
31
32
|
const res = {
|
|
32
33
|
message: []
|
|
33
34
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
});
|
|
35
|
+
const relevantFields = getRelevantFields(record);
|
|
36
|
+
relevantFields.forEach(field => validateField(field, res));
|
|
37
37
|
res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data
|
|
38
38
|
return res;
|
|
39
39
|
}
|
|
40
|
+
function getRelevantFields(record) {
|
|
41
|
+
return record.fields.filter(f => f.subfields && f.tag.match(/^(?:6..|257|370|38.)$/u));
|
|
42
|
+
}
|
|
40
43
|
function validateField(field, res) {
|
|
41
|
-
if (!field.subfields) {
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
44
|
const orig = (0, _utils.fieldToString)(field);
|
|
45
45
|
const normalizedField = fieldSanitizeVocabularySourceCode((0, _clone.default)(field));
|
|
46
46
|
const mod = (0, _utils.fieldToString)(normalizedField);
|
|
@@ -57,9 +57,6 @@ function _default() {
|
|
|
57
57
|
return;
|
|
58
58
|
}
|
|
59
59
|
function fieldSanitizeVocabularySourceCode(field) {
|
|
60
|
-
if (!field.tag.match(/^(?:6..|257|370|38.)$/u)) {
|
|
61
|
-
return field;
|
|
62
|
-
}
|
|
63
60
|
field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf));
|
|
64
61
|
return field;
|
|
65
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitize-vocabulary-source-codes.js","names":["_utils","require","_clone","_interopRequireDefault","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","
|
|
1
|
+
{"version":3,"file":"sanitize-vocabulary-source-codes.js","names":["_utils","require","_clone","_interopRequireDefault","obj","__esModule","default","_default","description","validate","fix","record","res","message","valid","relevantFields","getRelevantFields","forEach","f","fieldSanitizeVocabularySourceCode","field","validateField","length","fields","filter","subfields","tag","match","orig","fieldToString","normalizedField","clone","mod","push","fieldHasUnfixableVocabularySourceCode","sf","subfieldSanitizeVocabularySourceCode","subfield","code","value","stringFixVocabularySourceCode","legalSubfieldCode","tmp","replace","includes","some","subfieldHasUnfixableVocabularySourceCode","indexOf"],"sources":["../src/sanitize-vocabulary-source-codes.js"],"sourcesContent":["//import createDebugLogger from 'debug';\nimport {fieldToString} from './utils';\nimport clone from 'clone';\n\n//const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/sanitize-vocabulary-source-codes);\n\n// Author(s): Nicholas Volk, Joni Ollila\nexport default function () {\n\n return {\n description: 'Validator for sanitizing vocabulary source codes in subfield $2 (MRA-532)',\n validate, fix\n };\n\n function fix(record) {\n const res = {message: [], fix: [], valid: true};\n const relevantFields = getRelevantFields(record);\n relevantFields.forEach(f => fieldSanitizeVocabularySourceCode(f));\n return res;\n }\n\n function validate(record) {\n const res = {message: []};\n const relevantFields = getRelevantFields(record);\n\n relevantFields.forEach(field => validateField(field, res));\n\n res.valid = !(res.message.length >= 1); // eslint-disable-line functional/immutable-data\n return res;\n }\n\n function getRelevantFields(record) {\n return record.fields.filter(f => f.subfields && f.tag.match(/^(?:6..|257|370|38.)$/u));\n }\n\n function validateField(field, res) {\n const orig = fieldToString(field);\n\n const normalizedField = fieldSanitizeVocabularySourceCode(clone(field));\n const mod = fieldToString(normalizedField);\n if (orig !== mod) { // Fail as the input is \"broken\"/\"crap\"/sumthing\n res.message.push(`FIXABLE: '${orig}' => '${mod}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n // Handle illegal values here\n if (fieldHasUnfixableVocabularySourceCode(field)) {\n res.message.push(`CAN'T BE FIXED AUTOMATICALLY: '${orig}'`); // eslint-disable-line functional/immutable-data\n return;\n }\n return;\n }\n\n\n function fieldSanitizeVocabularySourceCode(field) {\n field.subfields.forEach(sf => subfieldSanitizeVocabularySourceCode(sf));\n return field;\n }\n\n function subfieldSanitizeVocabularySourceCode(subfield) {\n if (subfield.code !== '2') {\n return;\n }\n subfield.value = stringFixVocabularySourceCode(subfield.value); // eslint-disable-line functional/immutable-data\n }\n\n}\n\n// Note that language suffix is optional\nconst legalSubfieldCode = ['allars', 'kauno', 'kauno/fin', 'kauno/swe', 'mts', 'mts/fin', 'mts/swe', 'slm', 'slm/fin', 'slm/swe', 'ysa', 'yso', 'yso/eng', 'yso/fin', 'yso/sme', 'yso/swe'];\n\nfunction stringFixVocabularySourceCode(value) {\n // Try to remove spaces, change '//' to '/' and remove final '.' and '/':\n const tmp = value.replace(/ /ug, '')\n .replace(/\\/+/ug, '/')\n .replace(/(.)[./]$/gu, '$1') // eslint-disable-line prefer-named-capture-group\n .replace(/^yso-(?:aika|paikat)\\//u, 'yso/'); // IMP-HELMET crap. Also, they still have a '.' at the end of $a...\n\n // NB! Use the modified value ONLY if the result (tmp variable) is a legal subfield code...\n if (legalSubfieldCode.includes(tmp)) {\n return tmp;\n }\n\n return value;\n}\n\nfunction fieldHasUnfixableVocabularySourceCode(field) {\n return field.subfields.some(sf => subfieldHasUnfixableVocabularySourceCode(sf));\n}\n\nfunction subfieldHasUnfixableVocabularySourceCode(subfield) {\n // As we can't fix this here, apply this yso-rule only when validating!\n if (subfield.value.indexOf('yso/') === 0) {\n return !['yso/eng', 'yso/fin', 'yso/sme', 'yso/swe'].includes(subfield.value);\n }\n\n if (subfield.value.indexOf('slm/') === 0) {\n return !['slm/fin', 'slm/swe'].includes(subfield.value);\n }\n\n if (subfield.value.indexOf('mts/') === 0) {\n return !['mts/fin', 'mts/swe'].includes(subfield.value);\n }\n\n if (subfield.value.indexOf('kauno/') === 0) {\n return !['kauno/fin', 'kauno/swe'].includes(subfield.value);\n }\n\n return false;\n}\n"],"mappings":"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","ignoreList":[]}
|
package/dist/utils.js
CHANGED
|
@@ -11,15 +11,12 @@ exports.isControlSubfieldCode = isControlSubfieldCode;
|
|
|
11
11
|
exports.isElectronicMaterial = isElectronicMaterial;
|
|
12
12
|
exports.nvdebug = nvdebug;
|
|
13
13
|
exports.nvdebugFieldArray = nvdebugFieldArray;
|
|
14
|
+
exports.recordToString = recordToString;
|
|
14
15
|
exports.subfieldToString = subfieldToString;
|
|
15
16
|
exports.uniqArray = uniqArray;
|
|
16
17
|
function isElectronicMaterial(record) {
|
|
17
18
|
const f337s = record.get('337');
|
|
18
|
-
return f337s.some(
|
|
19
|
-
const mediaTypeIsC = field.subfields.some(sub => sub.code === 'b' && sub.value === 'c');
|
|
20
|
-
const sourceIsRdamedia = field.subfields.some(sub => sub.code === '2' && sub.value === 'rdamedia');
|
|
21
|
-
return mediaTypeIsC && sourceIsRdamedia;
|
|
22
|
-
});
|
|
19
|
+
return f337s.length > 0 && f337s.some(f => fieldHasSubfield(f, 'b', 'c') && fieldHasSubfield(f, '2', 'rdamedia'));
|
|
23
20
|
}
|
|
24
21
|
function nvdebug(message, func = undefined) {
|
|
25
22
|
if (func) {
|
|
@@ -38,6 +35,9 @@ function fieldHasSubfield(field, subfieldCode, subfieldValue = null) {
|
|
|
38
35
|
return field.subfields.some(sf => sf.code === subfieldCode && subfieldValue === sf.value);
|
|
39
36
|
}
|
|
40
37
|
function subfieldToString(sf) {
|
|
38
|
+
if (!sf.value) {
|
|
39
|
+
return `‡${sf.code}`;
|
|
40
|
+
}
|
|
41
41
|
return `‡${sf.code} ${sf.value}`;
|
|
42
42
|
}
|
|
43
43
|
function normalizeIndicatorValue(val) {
|
|
@@ -46,6 +46,11 @@ function normalizeIndicatorValue(val) {
|
|
|
46
46
|
}
|
|
47
47
|
return val;
|
|
48
48
|
}
|
|
49
|
+
function recordToString(record) {
|
|
50
|
+
const ldr = `LDR ${record.leader}`;
|
|
51
|
+
const fields = record.fields.map(f => fieldToString(f));
|
|
52
|
+
return `${ldr}\n${fields.join('\n')}`;
|
|
53
|
+
}
|
|
49
54
|
function fieldToString(f) {
|
|
50
55
|
if ('subfields' in f) {
|
|
51
56
|
return `${f.tag} ${normalizeIndicatorValue(f.ind1)}${normalizeIndicatorValue(f.ind2)}${formatSubfields(f)}`;
|
|
@@ -67,14 +72,14 @@ function isControlSubfieldCode(subfieldCode) {
|
|
|
67
72
|
}
|
|
68
73
|
return false;
|
|
69
74
|
}
|
|
70
|
-
function getCatalogingLanguage(record) {
|
|
75
|
+
function getCatalogingLanguage(record, defaultCatalogingLanguage = undefined) {
|
|
71
76
|
const [field040] = record.get(/^040$/u);
|
|
72
77
|
if (!field040) {
|
|
73
|
-
return
|
|
78
|
+
return defaultCatalogingLanguage;
|
|
74
79
|
}
|
|
75
80
|
const [b] = field040.subfields.filter(sf => sf.code === 'b');
|
|
76
81
|
if (!b) {
|
|
77
|
-
return
|
|
82
|
+
return defaultCatalogingLanguage;
|
|
78
83
|
}
|
|
79
84
|
return b.value;
|
|
80
85
|
}
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["isElectronicMaterial","record","f337s","get","some","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["isElectronicMaterial","record","f337s","get","length","some","f","fieldHasSubfield","nvdebug","message","func","undefined","field","subfieldCode","subfieldValue","subfields","sf","code","value","subfieldToString","normalizeIndicatorValue","val","recordToString","ldr","leader","fields","map","fieldToString","join","tag","ind1","ind2","formatSubfields","fieldsToString","nvdebugFieldArray","prefix","forEach","isControlSubfieldCode","includes","getCatalogingLanguage","defaultCatalogingLanguage","field040","b","filter","uniqArray","arr","i","indexOf"],"sources":["../src/utils.js"],"sourcesContent":["export function isElectronicMaterial(record) {\n const f337s = record.get('337');\n\n return f337s.length > 0 && f337s.some(f => fieldHasSubfield(f, 'b', 'c') && fieldHasSubfield(f, '2', 'rdamedia'));\n}\n\nexport function nvdebug(message, func = undefined) {\n if (func) { // eslint-disable-line functional/no-conditional-statements\n func(message);\n }\n //console.info(message); // eslint-disable-line no-console\n}\n\nexport function fieldHasSubfield(field, subfieldCode, subfieldValue = null) {\n if (!field.subfields) {\n return false;\n }\n if (subfieldValue === null) {\n return field.subfields.some(sf => sf.code === subfieldCode);\n }\n return field.subfields.some(sf => sf.code === subfieldCode && subfieldValue === sf.value);\n}\n\nexport function subfieldToString(sf) {\n if (!sf.value) {\n return `‡${sf.code}`;\n }\n return `‡${sf.code} ${sf.value}`;\n}\n\nfunction normalizeIndicatorValue(val) {\n if (val === ' ') {\n return '#';\n }\n return val;\n}\n\nexport function recordToString(record) {\n const ldr = `LDR ${record.leader}`;\n const fields = record.fields.map(f => fieldToString(f));\n return `${ldr}\\n${fields.join('\\n')}`;\n}\n\nexport function fieldToString(f) {\n if ('subfields' in f) {\n return `${f.tag} ${normalizeIndicatorValue(f.ind1)}${normalizeIndicatorValue(f.ind2)}${formatSubfields(f)}`;\n }\n return `${f.tag} ${f.value}`;\n\n function formatSubfields(field) {\n return field.subfields.map(sf => ` ${subfieldToString(sf)}`).join('');\n }\n}\n\nexport function fieldsToString(fields) {\n return fields.map(f => fieldToString(f)).join('\\t__SEPARATOR__\\t');\n}\n\nexport function nvdebugFieldArray(fields, prefix = ' ', func = undefined) {\n fields.forEach(field => nvdebug(`${prefix}${fieldToString(field)}`, func));\n}\n\nexport function isControlSubfieldCode(subfieldCode) {\n if (['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'w'].includes(subfieldCode)) {\n return true;\n }\n return false;\n}\n\nexport function getCatalogingLanguage(record, defaultCatalogingLanguage = undefined) {\n const [field040] = record.get(/^040$/u);\n if (!field040) {\n return defaultCatalogingLanguage;\n }\n const [b] = field040.subfields.filter(sf => sf.code === 'b');\n if (!b) {\n return defaultCatalogingLanguage;\n }\n return b.value;\n}\n\n\nexport function uniqArray(arr) {\n return arr.filter((val, i) => arr.indexOf(val) === i);\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"url": "git@github.com:natlibfi/marc-record-validators-melinda.git"
|
|
15
15
|
},
|
|
16
16
|
"license": "MIT",
|
|
17
|
-
"version": "11.0.
|
|
17
|
+
"version": "11.1.0-alpha.1",
|
|
18
18
|
"main": "./dist/index.js",
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@babel/register": "^7.23.7",
|
|
41
41
|
"@natlibfi/issn-verify": "^1.0.3",
|
|
42
|
-
"@natlibfi/marc-record": "^8.1.
|
|
42
|
+
"@natlibfi/marc-record": "^8.1.1",
|
|
43
43
|
"@natlibfi/marc-record-validate": "^8.0.6",
|
|
44
44
|
"cld3-asm": "^3.1.1",
|
|
45
45
|
"clone": "^2.1.2",
|
|
46
46
|
"debug": "^4.3.4",
|
|
47
|
-
"isbn3": "^1.1.
|
|
47
|
+
"isbn3": "^1.1.47",
|
|
48
48
|
"langs": "^2.0.0",
|
|
49
49
|
"node-fetch": "^2.7.0",
|
|
50
50
|
"xml2js": "^0.6.2"
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"@natlibfi/marc-record-validate": "^8.0.6"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@babel/cli": "^7.
|
|
57
|
-
"@babel/core": "^7.24.
|
|
58
|
-
"@babel/preset-env": "^7.24.
|
|
56
|
+
"@babel/cli": "^7.24.1",
|
|
57
|
+
"@babel/core": "^7.24.4",
|
|
58
|
+
"@babel/preset-env": "^7.24.4",
|
|
59
59
|
"@natlibfi/eslint-config-melinda-backend": "^3.0.4",
|
|
60
60
|
"@natlibfi/fixugen": "^2.0.4",
|
|
61
61
|
"@natlibfi/fixura": "^3.0.4",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"cross-env": "^7.0.3",
|
|
67
67
|
"eslint": "^8.57.0",
|
|
68
68
|
"fetch-mock": "^9.11.0",
|
|
69
|
-
"mocha": "^10.
|
|
69
|
+
"mocha": "^10.4.0",
|
|
70
70
|
"nyc": "^15.1.0"
|
|
71
71
|
},
|
|
72
72
|
"eslintConfig": {
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
//import createDebugLogger from 'debug';
|
|
2
|
+
import {fieldToString, getCatalogingLanguage, nvdebug} from './utils';
|
|
3
|
+
import {getFormOfItem, map336CodeToTerm} from './field33XUtils';
|
|
4
|
+
|
|
5
|
+
const description = 'Add missing 336 field(s)';
|
|
6
|
+
|
|
7
|
+
// const multimediaRegexp = /multimedia/ui;
|
|
8
|
+
|
|
9
|
+
export default function () {
|
|
10
|
+
|
|
11
|
+
return {
|
|
12
|
+
description, validate, fix
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function fix(record) {
|
|
16
|
+
nvdebug(`FIX ${description}...`);
|
|
17
|
+
const newFields = getMissing336s(record);
|
|
18
|
+
nvdebug(` GOT ${newFields.length}...`);
|
|
19
|
+
// FFS: we actually need newFields array here! Videogame, for example, might be
|
|
20
|
+
// 336 ## ‡a kaksiulotteinen liikkuva kuva ‡b tdi ‡2 rdacontent
|
|
21
|
+
// 336 ## ‡a tietokoneohjelma ‡b cop ‡2 rdacontent
|
|
22
|
+
const res = {message: [], fix: [], valid: true};
|
|
23
|
+
if (newFields.length) {
|
|
24
|
+
newFields.forEach(f => record.insertField(f));
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
return res;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function validate(record) {
|
|
31
|
+
nvdebug(`VALIDATE ${description}...`);
|
|
32
|
+
const newFields = getMissing336s(record);
|
|
33
|
+
if (newFields.length === 0) {
|
|
34
|
+
return {message: [], valid: true};
|
|
35
|
+
}
|
|
36
|
+
const strings = newFields.map(f => fieldToString(f));
|
|
37
|
+
const tmp = strings.join('\', \'');
|
|
38
|
+
const msg = `${description}: '${tmp}'`;
|
|
39
|
+
return {message: [msg], valid: false};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function guessMissingBsForComputerFile(record) {
|
|
43
|
+
const [field008] = record.get('008');
|
|
44
|
+
const typeOfComputerFile = field008 && field008.value ? field008.value[26] : undefined;
|
|
45
|
+
|
|
46
|
+
if (typeOfComputerFile) {
|
|
47
|
+
if (['d', 'e'].includes(typeOfComputerFile)) { // d: N=400, e: N=50
|
|
48
|
+
return ['txt'];
|
|
49
|
+
}
|
|
50
|
+
if (typeOfComputerFile === 'g') { // Videogame (N=10000+)
|
|
51
|
+
// 2D moving image/tdi is an educated guess. Might be wrong for 3D games and Infocom-style text-based games.
|
|
52
|
+
// Ref.: https://www.kiwi.fi/pages/viewpage.action?pageId=115966063#PelienRDAohje-Pelienjaottelu:videopelitjafyysisetpelit
|
|
53
|
+
return ['tdi', 'cop'];
|
|
54
|
+
}
|
|
55
|
+
if (['b', 'f'].includes(typeOfComputerFile)) { // b: N=176, f: N=2
|
|
56
|
+
return ['cop'];
|
|
57
|
+
}
|
|
58
|
+
if (['a', 'c'].includes(typeOfComputerFile)) { // c: N=152, a: N=36
|
|
59
|
+
return ['cod'];
|
|
60
|
+
}
|
|
61
|
+
if (typeOfComputerFile === 'h') { // h: N=44
|
|
62
|
+
return ['snd'];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ADD 256/300/516/XXX-based educated guesses here
|
|
67
|
+
const guess = guessUsingFileFields();
|
|
68
|
+
if (guess) {
|
|
69
|
+
return guess;
|
|
70
|
+
}
|
|
71
|
+
function guessUsingFileFields() {
|
|
72
|
+
const characteristics = record.get('(256|516)').map(f => fieldToString(f));
|
|
73
|
+
if (characteristics.some(str => str.match(/(?:ohjelma)/gui))) {
|
|
74
|
+
return ['cop'];
|
|
75
|
+
}
|
|
76
|
+
if (characteristics.some(str => str.match(/(?:daisy)/gui))) {
|
|
77
|
+
return ['spw', 'txt']; // The convention is to put just 'spw' but this is technically correct
|
|
78
|
+
}
|
|
79
|
+
if (characteristics.some(str => str.match(/(?:äänikirja)/gui))) {
|
|
80
|
+
return ['spw']; // This should be ['spw', 'txt'] but who am I to change conventions...
|
|
81
|
+
}
|
|
82
|
+
if (characteristics.some(str => str.match(/(?:book|e-bok|e-diss|e-avhand|kirja|e-thesis|tekstitiedosto|tidskrift|verkkoartikkeli|verkkokirja|verkkolehti)/gui))) {
|
|
83
|
+
return ['txt'];
|
|
84
|
+
}
|
|
85
|
+
if (characteristics.some(str => str.match(/(?:peli)/gui))) {
|
|
86
|
+
return ['tdi', 'cop'];
|
|
87
|
+
}
|
|
88
|
+
if (characteristics.some(str => str.match(/(?:data|tietokanta)/gui))) {
|
|
89
|
+
return ['cod'];
|
|
90
|
+
}
|
|
91
|
+
if (characteristics.some(str => str.match(/(?:verkkoaineisto.*[0-9]\] s|PDF)/gui)) || characteristics.some(str => str.match(/\b(?:text|tekstiä?)\b/gui))) {
|
|
92
|
+
return ['txt'];
|
|
93
|
+
}
|
|
94
|
+
if (characteristics.some(str => str.match(/(?:elokuva|liikkuva kuva)/gui))) {
|
|
95
|
+
return ['tdi'];
|
|
96
|
+
}
|
|
97
|
+
if (characteristics.some(str => str.match(/(?:kartta)/gui))) {
|
|
98
|
+
return ['cri']; // cri or crd, close enough anyhow, I guess
|
|
99
|
+
}
|
|
100
|
+
if (characteristics.some(str => str.match(/\b(?:kuvi?a)\b/gui))) {
|
|
101
|
+
return ['tdi'];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if (['i', 'j', 'm'].includes(typeOfComputerFile)) { // (i: N=4800, m: N=566, j: N=111 )
|
|
109
|
+
// Can we use field 300/516/256 to improve guess?
|
|
110
|
+
return ['xxx'];
|
|
111
|
+
}
|
|
112
|
+
return ['zzz']; // unspecified
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/*
|
|
116
|
+
function deriveLanguageMaterials336sFrom007(record) {
|
|
117
|
+
const categoryOfMaterial = [ // 007/00
|
|
118
|
+
{category: 'a', rdacontent: 'cri'}, // cartographic image <- looks like a MP that has been classified as BK... One more reason to comment these..
|
|
119
|
+
{category: 'c', rdacontent: 'txt'},
|
|
120
|
+
{category: 'g', rdacontent: 'sti'},
|
|
121
|
+
{vategory: 'h', rdacontent: 'txt'},
|
|
122
|
+
{category: 'k', rdacontent: 'sti'},
|
|
123
|
+
{category: 'v', rdacontent: 'tdi'}
|
|
124
|
+
];
|
|
125
|
+
|
|
126
|
+
// What if there are multiple 007 fields?
|
|
127
|
+
const [f007] = record.fields.get('007');
|
|
128
|
+
if (f007) {
|
|
129
|
+
const row = categoryOfMaterial.filter(row => row.category === f007[0]);
|
|
130
|
+
if (row) {
|
|
131
|
+
return [row.rdacontent];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
function guessMissingBsForBookAndContinuingResource(record, formOfItem) {
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
// This is from very old crap from usemarcon-cyrillux, but me not like it at all!
|
|
142
|
+
/*
|
|
143
|
+
const f245h = getTitleMedium(record);
|
|
144
|
+
if (f245h && !multimediaRegexp.test(f245h)) {
|
|
145
|
+
const result = deriveLanguageMaterials336sFrom007(record); // Base result on 007/00...
|
|
146
|
+
if (result) {
|
|
147
|
+
return result;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
*/
|
|
151
|
+
|
|
152
|
+
//const bibliographicalLevel = record.getBibliograpicLevel(); // Bloody h-drop typo...
|
|
153
|
+
//const isBis = ['b', 'i', 's'].includes(bibliographicalLevel);
|
|
154
|
+
//if (!isBis) {
|
|
155
|
+
if (formOfItem === 'f') {
|
|
156
|
+
return ['tct']; // tactile text
|
|
157
|
+
}
|
|
158
|
+
return ['txt']; // Default BK format is text
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function guessMissingBsForMap(record) {
|
|
162
|
+
const formOfItem = getFormOfItem(record);
|
|
163
|
+
// Is braille and is not a model (we have 0). Changed the original usemarcon rule 007/01!=q to 007/01=q
|
|
164
|
+
if (formOfItem === 'f' && record.fields.some(f => f.tag === '007' && f.value[0] === 'a' && f.value[1] === 'q')) {
|
|
165
|
+
return ['crt']; // Cartographic tactile image
|
|
166
|
+
}
|
|
167
|
+
const [field008] = record.get('008');
|
|
168
|
+
if (field008 && field008.value[25] === 'd') { // globe (cool, but we really don't have these)
|
|
169
|
+
return ['crf']; // map 3D form
|
|
170
|
+
}
|
|
171
|
+
return ['cri']; // default cartographic image
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
function guessMissing336Bs(record) {
|
|
175
|
+
const typeOfRecord = record.getTypeOfRecord();
|
|
176
|
+
|
|
177
|
+
if (typeOfRecord === 'i') {
|
|
178
|
+
return ['spw'];
|
|
179
|
+
}
|
|
180
|
+
if (typeOfRecord === 'j') {
|
|
181
|
+
return ['prm']; // performed music
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (typeOfRecord === 'e' || typeOfRecord === 'f') {
|
|
185
|
+
return guessMissingBsForMap(record);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const formOfItem = getFormOfItem(record);
|
|
189
|
+
|
|
190
|
+
if (typeOfRecord === 'k') {
|
|
191
|
+
if (formOfItem === 'f') {
|
|
192
|
+
return ['tci']; // tactile image
|
|
193
|
+
}
|
|
194
|
+
return ['sti'];
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (typeOfRecord === 'c' || typeOfRecord === 'd') {
|
|
198
|
+
if (formOfItem === 'f') {
|
|
199
|
+
return ['tcm']; // tactile notated music
|
|
200
|
+
}
|
|
201
|
+
return ['ntm']; // notated music
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (typeOfRecord === 'g') {
|
|
205
|
+
if (record.fields.some(f => f.tag === '007' && f.value[0] === 'g')) {
|
|
206
|
+
return ['sti']; // still image
|
|
207
|
+
}
|
|
208
|
+
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...
|
|
209
|
+
return ['tdi']; // 2d moving pic
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (typeOfRecord === 'm') { // electronic
|
|
214
|
+
return guessMissingBsForComputerFile(record);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (typeOfRecord === 'a' || typeOfRecord === 't') {
|
|
218
|
+
return guessMissingBsForBookAndContinuingResource(record, formOfItem);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Note that 245$h should trigger LDR/06:a or t =>o change at some earlier point (outside the scope of this module)
|
|
222
|
+
if (typeOfRecord === 'o' || typeOfRecord === 'p') { // o: Kit p: Mixed
|
|
223
|
+
if (['d', 'r'].includes(formOfItem)) { // d=isoteksti, r=eye-readable print
|
|
224
|
+
return ['txt'];
|
|
225
|
+
}
|
|
226
|
+
// Not much I can guess from 300 etc
|
|
227
|
+
return ['xxx']; // other
|
|
228
|
+
}
|
|
229
|
+
if (typeOfRecord === 'r') { // three-dimensional form
|
|
230
|
+
return ['tdf'];
|
|
231
|
+
}
|
|
232
|
+
return ['zzz']; // unspecified
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
function codeToField(b, catLang) {
|
|
237
|
+
const a = map336CodeToTerm(b, catLang);
|
|
238
|
+
const data = {tag: '336', ind1: ' ', ind2: ' ', subfields: [
|
|
239
|
+
{code: 'a', value: a},
|
|
240
|
+
{code: 'b', value: b},
|
|
241
|
+
{code: '2', value: 'rdacontent'}
|
|
242
|
+
]};
|
|
243
|
+
|
|
244
|
+
return data;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function getMissing336s(record) {
|
|
248
|
+
const f336 = record.get('336');
|
|
249
|
+
if (f336.length > 0) {
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const bees = guessMissing336Bs(record); // bees = b-subfields
|
|
254
|
+
nvdebug(` WE HAVE ${bees.length} BEES: ${bees.join(', ')}`);
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
return bees.map(b => codeToField(b, getCatalogingLanguage(record, 'fin')));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import {expect} from 'chai';
|
|
2
|
+
import {MarcRecord} from '@natlibfi/marc-record';
|
|
3
|
+
import validatorFactory from './addMissingField336';
|
|
4
|
+
import {READERS} from '@natlibfi/fixura';
|
|
5
|
+
import generateTests from '@natlibfi/fixugen';
|
|
6
|
+
|
|
7
|
+
generateTests({
|
|
8
|
+
callback,
|
|
9
|
+
path: [__dirname, '..', 'test-fixtures', 'addMissingField336'],
|
|
10
|
+
useMetadataFile: true,
|
|
11
|
+
recurse: false,
|
|
12
|
+
fixura: {
|
|
13
|
+
reader: READERS.JSON
|
|
14
|
+
},
|
|
15
|
+
mocha: {
|
|
16
|
+
before: () => testValidatorFactory()
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
async function testValidatorFactory() {
|
|
21
|
+
const validator = await validatorFactory();
|
|
22
|
+
|
|
23
|
+
expect(validator)
|
|
24
|
+
.to.be.an('object')
|
|
25
|
+
.that.has.any.keys('description', 'validate');
|
|
26
|
+
|
|
27
|
+
expect(validator.description).to.be.a('string');
|
|
28
|
+
expect(validator.validate).to.be.a('function');
|
|
29
|
+
expect(validator.fix).to.be.a('function');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async function callback({getFixture, fix = false}) {
|
|
33
|
+
const validator = await validatorFactory();
|
|
34
|
+
const record = new MarcRecord(getFixture('record.json'));
|
|
35
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
36
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
37
|
+
|
|
38
|
+
if (!fix) {
|
|
39
|
+
const result = await validator.validate(record);
|
|
40
|
+
expect(result).to.eql(expectedResult);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
await validator.fix(record);
|
|
45
|
+
expect(record).to.eql(expectedResult);
|
|
46
|
+
}
|