@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
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
exports.fixLeader = fixLeader;
|
|
8
|
+
exports.removeFromOldCatalog = removeFromOldCatalog;
|
|
9
|
+
exports.removeOwnershipSubfield5 = removeOwnershipSubfield5;
|
|
10
|
+
var _clone = _interopRequireDefault(require("clone"));
|
|
11
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
12
|
+
var _fix33X = _interopRequireDefault(require("./fix-33X"));
|
|
13
|
+
var _addMissingField = _interopRequireDefault(require("./addMissingField336"));
|
|
14
|
+
var _addMissingField2 = _interopRequireDefault(require("./addMissingField337"));
|
|
15
|
+
var _addMissingField3 = _interopRequireDefault(require("./addMissingField338"));
|
|
16
|
+
var _fixCountryCodes = _interopRequireDefault(require("./fix-country-codes"));
|
|
17
|
+
var _fixLanguageCodes = _interopRequireDefault(require("./fix-language-codes"));
|
|
18
|
+
var _fixRelatorTerms = _interopRequireDefault(require("./fixRelatorTerms"));
|
|
19
|
+
var _indicatorFixes = _interopRequireDefault(require("./indicator-fixes"));
|
|
20
|
+
var _punctuation = _interopRequireDefault(require("./punctuation2"));
|
|
21
|
+
var _normalizeQualifyingInformation = _interopRequireDefault(require("./normalize-qualifying-information"));
|
|
22
|
+
var _sortSubfields = require("./sortSubfields");
|
|
23
|
+
var _utils = require("./utils");
|
|
24
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
+
/*
|
|
26
|
+
* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master
|
|
27
|
+
*
|
|
28
|
+
* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
// import createDebugLogger from 'debug';
|
|
33
|
+
|
|
34
|
+
// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');
|
|
35
|
+
|
|
36
|
+
const description = 'Replacement for Cyrillux usemarcon rules';
|
|
37
|
+
|
|
38
|
+
// Extended original list with 541, 561, 562, 583, 584
|
|
39
|
+
const dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];
|
|
40
|
+
function _default() {
|
|
41
|
+
return {
|
|
42
|
+
description,
|
|
43
|
+
fix,
|
|
44
|
+
validate
|
|
45
|
+
};
|
|
46
|
+
function fix(record) {
|
|
47
|
+
(0, _utils.nvdebug)(`${description}: fix`);
|
|
48
|
+
realFix(record);
|
|
49
|
+
const res = {
|
|
50
|
+
message: [],
|
|
51
|
+
fix: [],
|
|
52
|
+
valid: true
|
|
53
|
+
};
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
56
|
+
function realFix(record) {
|
|
57
|
+
// Fix leader: standard fixes + update LDR/17 to '4'
|
|
58
|
+
fixLeader(record);
|
|
59
|
+
record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data
|
|
60
|
+
|
|
61
|
+
// Remove unwanted fields:
|
|
62
|
+
record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data
|
|
63
|
+
|
|
64
|
+
record.fields.forEach(f => fieldSpecificStuff(f));
|
|
65
|
+
function fieldSpecificStuff(field) {
|
|
66
|
+
removeOwnershipSubfield5(field);
|
|
67
|
+
removeFromOldCatalog(field); // Remove LoC phrase "[from old catalog]" from srings
|
|
68
|
+
translateFieldToFinnish(field);
|
|
69
|
+
}
|
|
70
|
+
(0, _fixCountryCodes.default)().fix(record); // 008/15-17
|
|
71
|
+
(0, _fixLanguageCodes.default)().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)
|
|
72
|
+
|
|
73
|
+
(0, _normalizeQualifyingInformation.default)().fix(record); // 015, 020, 024 and 028
|
|
74
|
+
|
|
75
|
+
// Field 028: use $b$a, not $a$b:
|
|
76
|
+
const f028 = record.fields.filter(f => f.tag === '028');
|
|
77
|
+
f028.forEach(f => (0, _sortSubfields.sortAdjacentSubfields)(f));
|
|
78
|
+
fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!
|
|
79
|
+
|
|
80
|
+
(0, _fixRelatorTerms.default)().fix(record);
|
|
81
|
+
(0, _fix33X.default)().fix(record); // 33X$a => 33X$a$b$2
|
|
82
|
+
(0, _addMissingField.default)().fix(record);
|
|
83
|
+
(0, _addMissingField2.default)().fix(record);
|
|
84
|
+
(0, _addMissingField3.default)().fix(record);
|
|
85
|
+
record.fields.forEach(f => fieldSpecificStuff2(f));
|
|
86
|
+
function fieldSpecificStuff2(field) {
|
|
87
|
+
removeSubfieldH(field); // only after 33X creation, as 245$h might be useful
|
|
88
|
+
|
|
89
|
+
field260To264s(field, record);
|
|
90
|
+
|
|
91
|
+
// NB! 300 (before or after 33X creation?)
|
|
92
|
+
field410To490And810(field, record);
|
|
93
|
+
field440To490And830(field, record);
|
|
94
|
+
// handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:
|
|
98
|
+
(0, _indicatorFixes.default)().fix(record);
|
|
99
|
+
(0, _punctuation.default)().fix(record);
|
|
100
|
+
const res = {
|
|
101
|
+
message: [],
|
|
102
|
+
fix: [],
|
|
103
|
+
valid: true
|
|
104
|
+
};
|
|
105
|
+
return res;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Validation is currently done in subparts
|
|
109
|
+
function validate(record) {
|
|
110
|
+
(0, _utils.nvdebug)(`${description}: validate`);
|
|
111
|
+
const originalString = (0, _utils.recordToString)(record);
|
|
112
|
+
const clonedRecord = new _marcRecord.MarcRecord(record, {
|
|
113
|
+
subfieldValues: false
|
|
114
|
+
});
|
|
115
|
+
realFix(clonedRecord);
|
|
116
|
+
const modifiedString = (0, _utils.recordToString)(clonedRecord);
|
|
117
|
+
if (originalString === modifiedString) {
|
|
118
|
+
return {
|
|
119
|
+
message: [],
|
|
120
|
+
valid: true
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
message: ['Record changed'],
|
|
125
|
+
valid: false
|
|
126
|
+
}; // Less than descriptive but will do...
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function fixField040(record) {
|
|
130
|
+
const f040 = record.fields.filter(f => f.tag === '040');
|
|
131
|
+
const subfieldsBE = [{
|
|
132
|
+
code: 'b',
|
|
133
|
+
value: 'mul'
|
|
134
|
+
}, {
|
|
135
|
+
code: 'e',
|
|
136
|
+
value: 'rda'
|
|
137
|
+
}];
|
|
138
|
+
|
|
139
|
+
// Add 040 if there isn't one:
|
|
140
|
+
if (f040.length === 0) {
|
|
141
|
+
const data = {
|
|
142
|
+
tag: '040',
|
|
143
|
+
ind1: ' ',
|
|
144
|
+
ind2: ' ',
|
|
145
|
+
subfields: subfieldsBE
|
|
146
|
+
};
|
|
147
|
+
record.insertField(data);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
f040.forEach(f => fixField040Subfields(f));
|
|
151
|
+
function fixField040Subfields(field) {
|
|
152
|
+
field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data
|
|
153
|
+
field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data
|
|
154
|
+
field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data
|
|
155
|
+
(0, _sortSubfields.sortAdjacentSubfields)(field); // put $b and $e to their proper places
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function removeFromOldCatalog(field) {
|
|
159
|
+
// See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation
|
|
160
|
+
field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));
|
|
161
|
+
function removeFromOldCatalogFromSubfield(subfield) {
|
|
162
|
+
if (!subfield.value.includes('[from old catalog]')) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
subfield.value = subfield.value.replace(/ *\[from old catalog\]/gui, ''); // eslint-disable-line functional/immutable-data
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function removeSubfieldH(field) {
|
|
169
|
+
if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const filteredFields = field.subfields.filter(sf => sf.code !== 'h');
|
|
173
|
+
if (filteredFields.length > 0) {
|
|
174
|
+
field.subfields = filteredFields; // eslint-disable-line functional/immutable-data
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function removeOwnershipSubfield5(field) {
|
|
179
|
+
if (!field.subfields || field.subfields.length === 0) {
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');
|
|
183
|
+
if (remainingSubfields.length === 0) {
|
|
184
|
+
// sanity check/robustness
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data
|
|
188
|
+
}
|
|
189
|
+
function fixLeader(record) {
|
|
190
|
+
record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data
|
|
191
|
+
}
|
|
192
|
+
function field410To490And810(field, record) {
|
|
193
|
+
// might be generic... if so, move to utils...
|
|
194
|
+
if (field.tag !== '410') {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const field810 = (0, _clone.default)(field);
|
|
198
|
+
field.tag = '490'; // eslint-disable-line functional/immutable-data
|
|
199
|
+
field.ind1 = '1'; // eslint-disable-line functional/immutable-data
|
|
200
|
+
field.ind2 = ' '; // eslint-disable-line functional/immutable-data
|
|
201
|
+
(0, _sortSubfields.sortAdjacentSubfields)(field);
|
|
202
|
+
// 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
203
|
+
|
|
204
|
+
field810.tag = '810'; // eslint-disable-line functional/immutable-data
|
|
205
|
+
field810.ind2 = ' '; // eslint-disable-line functional/immutable-data
|
|
206
|
+
// 810: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
207
|
+
record.insertField(field810);
|
|
208
|
+
}
|
|
209
|
+
function field440To490And830(field, record) {
|
|
210
|
+
// might be generic... if so, move to utils...
|
|
211
|
+
if (field.tag !== '440') {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const field830 = (0, _clone.default)(field);
|
|
215
|
+
field.tag = '490'; // eslint-disable-line functional/immutable-data
|
|
216
|
+
field.ind1 = '1'; // eslint-disable-line functional/immutable-data
|
|
217
|
+
field.ind2 = ' '; // eslint-disable-line functional/immutable-data
|
|
218
|
+
// 490: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
219
|
+
field830.tag = '830'; // eslint-disable-line functional/immutable-data
|
|
220
|
+
// 830: Fix punctuation elsewhere. (Note that the current support is lagging...)
|
|
221
|
+
record.insertField(field830);
|
|
222
|
+
}
|
|
223
|
+
function field260To264s(field, record) {
|
|
224
|
+
// might be generic... if so, move to utils...
|
|
225
|
+
// As per my quick reading of usemarcon-cyrillux
|
|
226
|
+
if (field.tag !== '260') {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
createCopyright264Field(field);
|
|
230
|
+
field.tag = '264'; // eslint-disable-line functional/immutable-data
|
|
231
|
+
field.ind1 = ' '; // eslint-disable-line functional/immutable-data
|
|
232
|
+
field.ind2 = '1'; // eslint-disable-line functional/immutable-data
|
|
233
|
+
|
|
234
|
+
// NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)
|
|
235
|
+
|
|
236
|
+
function getCopyrightYear(string) {
|
|
237
|
+
if (string.match(/^(?:\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {
|
|
238
|
+
return string.replace(/[^0-9]/ug, '');
|
|
239
|
+
}
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
field.subfields?.forEach(sf => field260To264Normalization(sf));
|
|
243
|
+
function field260To264Normalization(subfield) {
|
|
244
|
+
subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data
|
|
245
|
+
}
|
|
246
|
+
function createCopyright264Value(field) {
|
|
247
|
+
// Extract/split copyright year to a separate field:
|
|
248
|
+
const [c] = field.subfields.filter(sf => sf.code === 'c');
|
|
249
|
+
if (!c) {
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
const copyrightYear = getCopyrightYear(c.value);
|
|
253
|
+
if (!copyrightYear) {
|
|
254
|
+
return undefined;
|
|
255
|
+
}
|
|
256
|
+
const copType = c.value.match(/(?:^\[?p|℗)/u) ? '℗' : '©';
|
|
257
|
+
const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;
|
|
258
|
+
// Moidy the original value:
|
|
259
|
+
c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data
|
|
260
|
+
return returnValue;
|
|
261
|
+
}
|
|
262
|
+
function createCopyright264Field(field) {
|
|
263
|
+
const c = createCopyright264Value(field);
|
|
264
|
+
if (!c) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
const data = {
|
|
268
|
+
'tag': '264',
|
|
269
|
+
'ind1': ' ',
|
|
270
|
+
'ind2': '4',
|
|
271
|
+
'subfields': [{
|
|
272
|
+
'code': 'c',
|
|
273
|
+
'value': c
|
|
274
|
+
}]
|
|
275
|
+
};
|
|
276
|
+
record.insertField(data);
|
|
277
|
+
}
|
|
278
|
+
function field260To264Normalization2(subfield) {
|
|
279
|
+
if (subfield.code === 'a') {
|
|
280
|
+
return subfield.value.replace(/\b[Ss]\. ?l\./u, 'Kustannuspaikka tuntematon');
|
|
281
|
+
}
|
|
282
|
+
if (subfield.code === 'b') {
|
|
283
|
+
return subfield.value.replace(/\b[Ss]\. ?n\./u, 'kustantaja tuntematon');
|
|
284
|
+
}
|
|
285
|
+
if (subfield.code === 'c') {
|
|
286
|
+
const year = getCopyrightYear(subfield.value);
|
|
287
|
+
if (year) {
|
|
288
|
+
const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';
|
|
289
|
+
if (subfield.value.includes('[')) {
|
|
290
|
+
return `${c}[${year}]`;
|
|
291
|
+
}
|
|
292
|
+
return `${c}${year}`;
|
|
293
|
+
}
|
|
294
|
+
return subfield.value.replace(/\b[Ss]\. ?a\./u, 'julkaisuaika tuntematon');
|
|
295
|
+
}
|
|
296
|
+
return subfield.value;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/*
|
|
301
|
+
function handle505(field) {
|
|
302
|
+
if (field.tag !== '505') {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
// Don't know how/why usemarcon-cyrillux is so sure about ind1...
|
|
306
|
+
field.ind1 = '0'; // eslint-disable-line functional/immutable-data
|
|
307
|
+
// usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:
|
|
308
|
+
const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));
|
|
309
|
+
|
|
310
|
+
if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {
|
|
311
|
+
field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
*/
|
|
316
|
+
|
|
317
|
+
function translateFieldToFinnish(field) {
|
|
318
|
+
if (!['020', '300'].includes(field.tag)) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));
|
|
322
|
+
function translateSubfieldToFinnish(subfield) {
|
|
323
|
+
if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {
|
|
324
|
+
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (field.tag === '300') {
|
|
328
|
+
subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function expandEnglishAbbreviations(value) {
|
|
334
|
+
return value.replace(/\bbk\.\b/gui, 'book').replace(/chiefly col\./ui, 'chiefly color').replace(/col\. ill\./ui, 'color illustrations').replace(/diagrs\./ui, 'diagrams').replace(/\bhbk\.\b/gui, 'hardcover').replace(/\bhbk\b/gui, 'hardcover').
|
|
335
|
+
// expand to MTS-compliant form
|
|
336
|
+
replace(/\bill\./gui, 'illustrated').
|
|
337
|
+
// or illustrations (or Swedish "illustrerad" or...)
|
|
338
|
+
replace(/\billus\./gui, 'illustrated').
|
|
339
|
+
// or illustrations
|
|
340
|
+
replace(/incl\./gui, 'includes').replace(/fold\.? maps/gui, 'folded maps').
|
|
341
|
+
// replace(/\bmin\./gu, 'minutes').
|
|
342
|
+
// replace(/\bmin\b/gu, 'minutes').
|
|
343
|
+
replace(/\bp\.\b/gui, 'pages').replace(/\bp\b/gu, 'pages').replace(/\bpbk\.\b/gui, 'paperback').replace(/\bpbk\b/gui, 'paperback').
|
|
344
|
+
// expand to MTS-compliant form
|
|
345
|
+
replace(/\bports\./gui, 'portraits').replace('sd., col.', 'sound, color').replace(/ *\((?:chiefly col\.|chiefly color|some cols)\)/gui, '').replace(/\b1 hr\./gui, '1 hour');
|
|
346
|
+
}
|
|
347
|
+
function expandFinnishAbbreviations(value) {
|
|
348
|
+
return value.replace(/\bcn\. /gu, 'noin ').
|
|
349
|
+
// replace(/\bmin\./gu, 'minuuttia').
|
|
350
|
+
// replace(/\bmin\b/gu, 'minuuttia').
|
|
351
|
+
replace(/\bnid\./gu, 'nidottu').replace(/\bnid\b/gui, 'nidottu').replace(/\bsid\./gu, 'sidottu').replace(/\bsid\b/gui, 'sidottu').replace(/\bverkkojulk\.\b/gu, 'verkkojulkaisu').replace(/\bverkkojulk\b/gu, 'verkkojulkaisu').replace(/^\(([^)]+)\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group
|
|
352
|
+
// <- removal of brackets above could use a better location
|
|
353
|
+
}
|
|
354
|
+
function expandSwedishAbbreviations(value) {
|
|
355
|
+
return value.replace(/\bca\. /gu, 'circa ').replace(/\bhft\./gui, 'häftad').replace(/\bhft\b/gui, 'häftad');
|
|
356
|
+
// replace(/\bmin\./gu, 'minuter').
|
|
357
|
+
// replace(/\bmin\b/gu, 'minuter');
|
|
358
|
+
}
|
|
359
|
+
function finnishTranslationsAndMappings(value) {
|
|
360
|
+
return value.replace('analog', 'analoginen').replace('approximately', 'noin').replace('audio discs', 'äänilevyä').replace('black and white', 'mustavalkoinen').replace(/\bcharts\b/gui, 'kaavioita').replace('chiefly color illustrations', 'pääosin värikuvitettu').replace('chiefly', 'pääosin').replace('color illustrations', 'värikuvitus').replace(/\bdigital\b/gui, 'digitaalinen').replace(/\belectronic book\b/gui, 'verkkoaineisto').replace(/\bfolded sheet\b/gui, 'taitelehti').replace(/\bhardback\b/gui, 'kovakantinen').replace(/\bhours\b/gui, 'tuntia').replace('illustrated', 'kuvitettu').replace(/illustration\b/gui, 'kuvitus').
|
|
361
|
+
// kuvitus/kuvitettu variation is taken from usemarcon-cyrillux...
|
|
362
|
+
replace('illustrations', 'kuvitettu').replace(/\binsert\b/gui, 'liite').replace(/\binserts\b/gui, 'liitteitä').replace('leaves of plates', 'kuvalehteä').replace(/\bmap\b/gui, 'kartta').replace(/\bmaps\b/gui, 'karttoja').
|
|
363
|
+
// or karttaa?
|
|
364
|
+
replace('minutes', 'minuuttia').replace('online resource', 'verkkoaineisto').replace('pages of plates', 'kuvalehteä').replace(/\bpages\b/gui, 'sivua').replace(/\bpaperback\b/gui, 'pehmeäkantinen').
|
|
365
|
+
// MTS alt
|
|
366
|
+
replace(/\bsoftcover\b/gui, 'pehmeäkantinen').
|
|
367
|
+
// MTS pref
|
|
368
|
+
replace('sound, color', 'äänellinen, värillinen').replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').replace('sound discs', 'äänilevyä').replace('sound disc', 'äänilevy').replace('unnumbered', 'numeroimatonta').replace(/\bverkkojulkaisu\b/gui, 'verkkoaineisto').replace('videodiscs', 'videolevyä').replace('videodisc', 'videolevy').replace(/\b1 hour\b/gui, '1 tunti');
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=cyrillux-usemarcon-replacement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cyrillux-usemarcon-replacement.js","names":["_clone","_interopRequireDefault","require","_marcRecord","_fix33X","_addMissingField","_addMissingField2","_addMissingField3","_fixCountryCodes","_fixLanguageCodes","_fixRelatorTerms","_indicatorFixes","_punctuation","_normalizeQualifyingInformation","_sortSubfields","_utils","obj","__esModule","default","description","dropTags","_default","fix","validate","record","nvdebug","realFix","res","message","valid","fixLeader","leader","substring","fields","filter","f","includes","tag","forEach","fieldSpecificStuff","field","removeOwnershipSubfield5","removeFromOldCatalog","translateFieldToFinnish","fixCountryCodes","fixLanguageCodes","fixQualifyingInformation","f028","sortAdjacentSubfields","fixField040","fixRelatorTerms","fix33X","add336","add337","add338","fieldSpecificStuff2","removeSubfieldH","field260To264s","field410To490And810","field440To490And830","fixIndicators","fixPunctuation","originalString","recordToString","clonedRecord","MarcRecord","subfieldValues","modifiedString","f040","subfieldsBE","code","value","length","data","ind1","ind2","subfields","insertField","fixField040Subfields","sf","push","removeFromOldCatalogFromSubfield","subfield","replace","filteredFields","remainingSubfields","field810","clone","field830","createCopyright264Field","getCopyrightYear","string","match","field260To264Normalization","field260To264Normalization2","createCopyright264Value","c","undefined","copyrightYear","copType","returnValue","year","translateSubfieldToFinnish","finnishTranslationsAndMappings","expandFinnishAbbreviations","expandSwedishAbbreviations","expandEnglishAbbreviations"],"sources":["../src/cyrillux-usemarcon-replacement.js"],"sourcesContent":["/*\n* cyrillux-usemarcon-replacement.js -- implement and improve https://github.com/NatLibFi/USEMARCON-Cyrillux/tree/master\n*\n* Author(s): Nicholas Volk <nicholas.volk@helsinki.fi>\n*\n*/\n\nimport clone from 'clone';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport {default as fix33X} from './fix-33X';\nimport {default as add336} from './addMissingField336';\nimport {default as add337} from './addMissingField337';\nimport {default as add338} from './addMissingField338';\nimport {default as fixCountryCodes} from './fix-country-codes';\nimport {default as fixLanguageCodes} from './fix-language-codes';\nimport {default as fixRelatorTerms} from './fixRelatorTerms';\nimport {default as fixIndicators} from './indicator-fixes';\nimport {default as fixPunctuation} from './punctuation2';\nimport {default as fixQualifyingInformation} from './normalize-qualifying-information';\nimport {sortAdjacentSubfields} from './sortSubfields';\n\n\n// import createDebugLogger from 'debug';\nimport {nvdebug, recordToString} from './utils';\n\n// const debug = createDebugLogger('@natlibfi/marc-record-validators-melinda/punctuation2');\n\nconst description = 'Replacement for Cyrillux usemarcon rules';\n\n// Extended original list with 541, 561, 562, 583, 584\nconst dropTags = ['001', '003', '010', '012', '014', '015', '016', '019', '025', '029', '032', '035', '036', '037', '038', '042', '049', '051', '061', '068', '071', '074', '079', '090', '091', '092', '094', '095', '096', '097', '099', '249', '261', '262', '350', '400', '411', '541', '561', '562', '574', '575', '577', '578', '583', '584', '589', '590', '591', '592', '593', '594', '595', '596', '597', '598', '599', '653', '698', '741', '742', '744', '761', '790', '841', '842', '843', '844', '845', '850', '852', '853', '854', '855', '858', '859', '863', '864', '865', '866', '867', '868', '876', '877', '878', '882', '886', '887', '888', '890', '899'];\n\nexport default function () {\n return {\n description, fix, validate\n };\n\n function fix(record) {\n nvdebug(`${description}: fix`);\n realFix(record);\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n function realFix(record) {\n // Fix leader: standard fixes + update LDR/17 to '4'\n fixLeader(record);\n record.leader = `${record.leader.substring(0, 17)}4${record.leader.substring(18, 24)}`; // eslint-disable-line functional/immutable-data\n\n // Remove unwanted fields:\n record.fields = record.fields.filter(f => !dropTags.includes(f.tag)); // eslint-disable-line functional/immutable-data\n\n record.fields.forEach(f => fieldSpecificStuff(f));\n\n function fieldSpecificStuff(field) {\n removeOwnershipSubfield5(field);\n removeFromOldCatalog(field); // Remove LoC phrase \"[from old catalog]\" from srings\n translateFieldToFinnish(field);\n }\n\n fixCountryCodes().fix(record); // 008/15-17\n fixLanguageCodes().fix(record); // 008/35-37 AND 041 (note that all relevant subfield codes are fixed, not just $a)\n\n fixQualifyingInformation().fix(record); // 015, 020, 024 and 028\n\n // Field 028: use $b$a, not $a$b:\n const f028 = record.fields.filter(f => f.tag === '028');\n f028.forEach(f => sortAdjacentSubfields(f));\n\n fixField040(record); // All $b values are changed to 'mul'. As a side effect 33X$b=>$a mappings are in Finnish! Ok in this domain!\n\n fixRelatorTerms().fix(record);\n\n fix33X().fix(record); // 33X$a => 33X$a$b$2\n add336().fix(record);\n add337().fix(record);\n add338().fix(record);\n\n record.fields.forEach(f => fieldSpecificStuff2(f));\n\n function fieldSpecificStuff2(field) {\n removeSubfieldH(field); // only after 33X creation, as 245$h might be useful\n\n field260To264s(field, record);\n\n // NB! 300 (before or after 33X creation?)\n field410To490And810(field, record);\n field440To490And830(field, record);\n // handle505(field); // not applying them usemarcon-cyrillux rules for field 505 as I can't understand their motivation.\n\n }\n\n // The fixer below implement Cyrillux rules such as 245I1 | 245I1 | If (Exists(@100) Or Exists(@110) Or Exists(@111) Or Exists(@130)) Then '1' Else '0' and plenty of other good stuff:\n fixIndicators().fix(record);\n\n fixPunctuation().fix(record);\n\n const res = {message: [], fix: [], valid: true};\n return res;\n }\n\n // Validation is currently done in subparts\n function validate(record) {\n nvdebug(`${description}: validate`);\n const originalString = recordToString(record);\n const clonedRecord = new MarcRecord(record, {subfieldValues: false});\n realFix(clonedRecord);\n const modifiedString = recordToString(clonedRecord);\n\n if (originalString === modifiedString) {\n return {message: [], valid: true};\n }\n\n return {message: ['Record changed'], valid: false}; // Less than descriptive but will do...\n\n }\n}\n\nfunction fixField040(record) {\n const f040 = record.fields.filter(f => f.tag === '040');\n\n const subfieldsBE = [\n {code: 'b', value: 'mul'},\n {code: 'e', value: 'rda'}\n ];\n\n // Add 040 if there isn't one:\n if (f040.length === 0) {\n const data = {tag: '040', ind1: ' ', ind2: ' ', subfields: subfieldsBE};\n\n record.insertField(data);\n return;\n }\n\n f040.forEach(f => fixField040Subfields(f));\n\n function fixField040Subfields(field) {\n field.subfields = field.subfields.filter(sf => !['b', 'e'].includes(sf.code)); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[0]); // eslint-disable-line functional/immutable-data\n field.subfields.push(subfieldsBE[1]); // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field); // put $b and $e to their proper places\n }\n\n}\n\nexport function removeFromOldCatalog(field) {\n // See https://catalog.loc.gov/vwebv/ui/en_US/htdocs/help/faqs.html for motivation\n field.subfields?.forEach(sf => removeFromOldCatalogFromSubfield(sf));\n\n function removeFromOldCatalogFromSubfield(subfield) {\n if (!subfield.value.includes('[from old catalog]')) {\n return;\n }\n subfield.value = subfield.value.replace(/ *\\[from old catalog\\]/gui, ''); // eslint-disable-line functional/immutable-data\n }\n}\n\nfunction removeSubfieldH(field) {\n if (!field.subfields || !['245', '246', '247', '740', '760', '762', '765', '767', '770', '772', '773', '774', '775', '776', '777', '780', '785', '786', '787', '788'].includes(field.tag)) {\n return;\n }\n\n const filteredFields = field.subfields.filter(sf => sf.code !== 'h');\n if (filteredFields.length > 0) {\n field.subfields = filteredFields; // eslint-disable-line functional/immutable-data\n return;\n }\n\n}\n\nexport function removeOwnershipSubfield5(field) {\n if (!field.subfields || field.subfields.length === 0) {\n return;\n }\n const remainingSubfields = field.subfields.filter(sf => sf.code !== '5');\n if (remainingSubfields.length === 0) { // sanity check/robustness\n return;\n }\n field.subfields = remainingSubfields; // eslint-disable-line functional/immutable-data\n}\n\nexport function fixLeader(record) {\n record.leader = `${record.leader.substring(0, 9)}a22${record.leader.substring(12, 18)}i${record.leader.substring(19, 20)}4500`; // eslint-disable-line functional/immutable-data\n}\n\nfunction field410To490And810(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '410') {\n return;\n }\n\n const field810 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n sortAdjacentSubfields(field);\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n\n\n field810.tag = '810'; // eslint-disable-line functional/immutable-data\n field810.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 810: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field810);\n}\n\nfunction field440To490And830(field, record) { // might be generic... if so, move to utils...\n if (field.tag !== '440') {\n return;\n }\n\n const field830 = clone(field);\n\n field.tag = '490'; // eslint-disable-line functional/immutable-data\n field.ind1 = '1'; // eslint-disable-line functional/immutable-data\n field.ind2 = ' '; // eslint-disable-line functional/immutable-data\n // 490: Fix punctuation elsewhere. (Note that the current support is lagging...)\n field830.tag = '830'; // eslint-disable-line functional/immutable-data\n // 830: Fix punctuation elsewhere. (Note that the current support is lagging...)\n record.insertField(field830);\n}\n\n\nfunction field260To264s(field, record) { // might be generic... if so, move to utils...\n // As per my quick reading of usemarcon-cyrillux\n if (field.tag !== '260') {\n return;\n }\n\n createCopyright264Field(field);\n\n field.tag = '264'; // eslint-disable-line functional/immutable-data\n field.ind1 = ' '; // eslint-disable-line functional/immutable-data\n field.ind2 = '1'; // eslint-disable-line functional/immutable-data\n\n // NB! Usemarcon does not handle 260$e$f$g => 264$a$b$c, so I'm not botherin with it either... (However, we could check our merge reducer code...)\n\n function getCopyrightYear(string) {\n if (string.match(/^(?:\\[?[Ccp]|[^0-9]*(?:cop|©|℗))[^0-9]*(?:1[789][0-9][0-9]|20[0-2][0-9])[^0-9]*$/u)) {\n return string.replace(/[^0-9]/ug, '');\n }\n return false;\n }\n\n field.subfields?.forEach(sf => field260To264Normalization(sf));\n\n function field260To264Normalization(subfield) {\n subfield.value = field260To264Normalization2(subfield); // eslint-disable-line functional/immutable-data\n }\n\n function createCopyright264Value(field) {\n // Extract/split copyright year to a separate field:\n const [c] = field.subfields.filter(sf => sf.code === 'c');\n if (!c) {\n return undefined;\n }\n const copyrightYear = getCopyrightYear(c.value);\n if (!copyrightYear) {\n return undefined;\n }\n const copType = c.value.match(/(?:^\\[?p|℗)/u) ? '℗' : '©';\n const returnValue = c.value.includes('[') ? `[${copType}${copyrightYear}]` : `${copType}${copyrightYear}`;\n // Moidy the original value:\n c.value = `[${copyrightYear}]`; // eslint-disable-line functional/immutable-data\n return returnValue;\n }\n\n function createCopyright264Field(field) {\n const c = createCopyright264Value(field);\n if (!c) {\n return undefined;\n }\n const data = {'tag': '264', 'ind1': ' ', 'ind2': '4', 'subfields': [{'code': 'c', 'value': c}]};\n record.insertField(data);\n }\n\n function field260To264Normalization2(subfield) {\n if (subfield.code === 'a') {\n return subfield.value.replace(/\\b[Ss]\\. ?l\\./u, 'Kustannuspaikka tuntematon');\n }\n if (subfield.code === 'b') {\n return subfield.value.replace(/\\b[Ss]\\. ?n\\./u, 'kustantaja tuntematon');\n }\n if (subfield.code === 'c') {\n const year = getCopyrightYear(subfield.value);\n if (year) {\n const c = subfield.value.match(/(?:^p|℗)/u) ? 'p' : 'c';\n if (subfield.value.includes('[')) {\n return `${c}[${year}]`;\n }\n return `${c}${year}`;\n }\n return subfield.value.replace(/\\b[Ss]\\. ?a\\./u, 'julkaisuaika tuntematon');\n }\n return subfield.value;\n }\n\n\n}\n\n/*\nfunction handle505(field) {\n if (field.tag !== '505') {\n return;\n }\n // Don't know how/why usemarcon-cyrillux is so sure about ind1...\n field.ind1 = '0'; // eslint-disable-line functional/immutable-data\n // usemarcon-cyrillux drops irrelevant subfields, so we do the same. However, we have included some control subfields in the kept side:\n const keptSubfields = field.subfields.filter(sf => ['a', 'g', 'r', 't', 'u', '6', '8', '9'].includes(sf.code));\n\n if (keptSubfields.some(sf => ['a', 'g', 'r', 't', 'u'].includes(sf.code))) {\n field.subfields = keptSubfields; // eslint-disable-line functional/immutable-data\n return;\n }\n}\n*/\n\nfunction translateFieldToFinnish(field) {\n if (!['020', '300'].includes(field.tag)) {\n return;\n }\n field.subfields?.forEach(sf => translateSubfieldToFinnish(sf));\n\n function translateSubfieldToFinnish(subfield) {\n if (field.tag === '020' && ['a', 'q', 'z'].includes(subfield.code)) {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n if (field.tag === '300') {\n subfield.value = finnishTranslationsAndMappings(expandFinnishAbbreviations(expandSwedishAbbreviations(expandEnglishAbbreviations(subfield.value)))); // eslint-disable-line functional/immutable-data\n return;\n }\n }\n}\n\nfunction expandEnglishAbbreviations(value) {\n return value.replace(/\\bbk\\.\\b/gui, 'book').\n replace(/chiefly col\\./ui, 'chiefly color').\n replace(/col\\. ill\\./ui, 'color illustrations').\n replace(/diagrs\\./ui, 'diagrams').\n replace(/\\bhbk\\.\\b/gui, 'hardcover').replace(/\\bhbk\\b/gui, 'hardcover'). // expand to MTS-compliant form\n replace(/\\bill\\./gui, 'illustrated'). // or illustrations (or Swedish \"illustrerad\" or...)\n replace(/\\billus\\./gui, 'illustrated'). // or illustrations\n replace(/incl\\./gui, 'includes').\n replace(/fold\\.? maps/gui, 'folded maps').\n // replace(/\\bmin\\./gu, 'minutes').\n // replace(/\\bmin\\b/gu, 'minutes').\n replace(/\\bp\\.\\b/gui, 'pages').replace(/\\bp\\b/gu, 'pages').\n replace(/\\bpbk\\.\\b/gui, 'paperback').replace(/\\bpbk\\b/gui, 'paperback'). // expand to MTS-compliant form\n replace(/\\bports\\./gui, 'portraits').\n replace('sd., col.', 'sound, color').\n replace(/ *\\((?:chiefly col\\.|chiefly color|some cols)\\)/gui, '').\n replace(/\\b1 hr\\./gui, '1 hour');\n}\n\nfunction expandFinnishAbbreviations(value) {\n return value.replace(/\\bcn\\. /gu, 'noin ').\n // replace(/\\bmin\\./gu, 'minuuttia').\n // replace(/\\bmin\\b/gu, 'minuuttia').\n replace(/\\bnid\\./gu, 'nidottu').replace(/\\bnid\\b/gui, 'nidottu').\n replace(/\\bsid\\./gu, 'sidottu').replace(/\\bsid\\b/gui, 'sidottu').\n replace(/\\bverkkojulk\\.\\b/gu, 'verkkojulkaisu').replace(/\\bverkkojulk\\b/gu, 'verkkojulkaisu').\n replace(/^\\(([^)]+)\\)$/u, '$1'); // eslint-disable-line prefer-named-capture-group\n // <- removal of brackets above could use a better location\n}\n\nfunction expandSwedishAbbreviations(value) {\n return value.replace(/\\bca\\. /gu, 'circa ').\n replace(/\\bhft\\./gui, 'häftad').replace(/\\bhft\\b/gui, 'häftad');\n // replace(/\\bmin\\./gu, 'minuter').\n // replace(/\\bmin\\b/gu, 'minuter');\n}\n\nfunction finnishTranslationsAndMappings(value) {\n return value.replace('analog', 'analoginen').\n replace('approximately', 'noin').\n replace('audio discs', 'äänilevyä').\n replace('black and white', 'mustavalkoinen').\n replace(/\\bcharts\\b/gui, 'kaavioita').\n replace('chiefly color illustrations', 'pääosin värikuvitettu').\n replace('chiefly', 'pääosin').\n replace('color illustrations', 'värikuvitus').\n replace(/\\bdigital\\b/gui, 'digitaalinen').\n replace(/\\belectronic book\\b/gui, 'verkkoaineisto').\n replace(/\\bfolded sheet\\b/gui, 'taitelehti').\n replace(/\\bhardback\\b/gui, 'kovakantinen').\n replace(/\\bhours\\b/gui, 'tuntia').\n replace('illustrated', 'kuvitettu').\n replace(/illustration\\b/gui, 'kuvitus'). // kuvitus/kuvitettu variation is taken from usemarcon-cyrillux...\n replace('illustrations', 'kuvitettu').\n replace(/\\binsert\\b/gui, 'liite').\n replace(/\\binserts\\b/gui, 'liitteitä').\n replace('leaves of plates', 'kuvalehteä').\n replace(/\\bmap\\b/gui, 'kartta').\n replace(/\\bmaps\\b/gui, 'karttoja'). // or karttaa?\n replace('minutes', 'minuuttia').\n replace('online resource', 'verkkoaineisto').\n replace('pages of plates', 'kuvalehteä').\n replace(/\\bpages\\b/gui, 'sivua').\n replace(/\\bpaperback\\b/gui, 'pehmeäkantinen'). // MTS alt\n replace(/\\bsoftcover\\b/gui, 'pehmeäkantinen'). // MTS pref\n replace('sound, color', 'äänellinen, värillinen').\n replace('sound cassettes', 'äänikasettia').replace('sound cassette', 'äänikasetti').\n replace('sound discs', 'äänilevyä').replace('sound disc', 'äänilevy').\n replace('unnumbered', 'numeroimatonta').\n replace(/\\bverkkojulkaisu\\b/gui, 'verkkoaineisto').\n replace('videodiscs', 'videolevyä').\n replace('videodisc', 'videolevy').\n replace(/\\b1 hour\\b/gui, '1 tunti');\n\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chai = require("chai");
|
|
4
|
+
var _marcRecord = require("@natlibfi/marc-record");
|
|
5
|
+
var _cyrilluxUsemarconReplacement = _interopRequireDefault(require("./cyrillux-usemarcon-replacement"));
|
|
6
|
+
var _fixura = require("@natlibfi/fixura");
|
|
7
|
+
var _fixugen = _interopRequireDefault(require("@natlibfi/fixugen"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
(0, _fixugen.default)({
|
|
10
|
+
callback,
|
|
11
|
+
path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],
|
|
12
|
+
useMetadataFile: true,
|
|
13
|
+
recurse: false,
|
|
14
|
+
fixura: {
|
|
15
|
+
reader: _fixura.READERS.JSON
|
|
16
|
+
},
|
|
17
|
+
mocha: {
|
|
18
|
+
before: () => testValidatorFactory()
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
async function testValidatorFactory() {
|
|
22
|
+
const validator = await (0, _cyrilluxUsemarconReplacement.default)();
|
|
23
|
+
(0, _chai.expect)(validator).to.be.an('object').that.has.any.keys('description', 'validate');
|
|
24
|
+
(0, _chai.expect)(validator.description).to.be.a('string');
|
|
25
|
+
(0, _chai.expect)(validator.validate).to.be.a('function');
|
|
26
|
+
(0, _chai.expect)(validator.fix).to.be.a('function');
|
|
27
|
+
}
|
|
28
|
+
async function callback({
|
|
29
|
+
getFixture,
|
|
30
|
+
fix = false
|
|
31
|
+
}) {
|
|
32
|
+
const validator = await (0, _cyrilluxUsemarconReplacement.default)();
|
|
33
|
+
const record = new _marcRecord.MarcRecord(getFixture('record.json'));
|
|
34
|
+
const expectedResult = getFixture('expectedResult.json');
|
|
35
|
+
// console.log(expectedResult); // eslint-disable-line
|
|
36
|
+
|
|
37
|
+
if (!fix) {
|
|
38
|
+
const result = await validator.validate(record);
|
|
39
|
+
(0, _chai.expect)(result).to.eql(expectedResult);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
await validator.fix(record);
|
|
43
|
+
(0, _chai.expect)(record).to.eql(expectedResult);
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=cyrillux-usemarcon-replacement.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cyrillux-usemarcon-replacement.spec.js","names":["_chai","require","_marcRecord","_cyrilluxUsemarconReplacement","_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/cyrillux-usemarcon-replacement.spec.js"],"sourcesContent":["import {expect} from 'chai';\nimport {MarcRecord} from '@natlibfi/marc-record';\nimport validatorFactory from './cyrillux-usemarcon-replacement';\nimport {READERS} from '@natlibfi/fixura';\nimport generateTests from '@natlibfi/fixugen';\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'cyrillux-usemarcon-replacement'],\n useMetadataFile: true,\n recurse: false,\n fixura: {\n reader: READERS.JSON\n },\n mocha: {\n before: () => testValidatorFactory()\n }\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,6BAAA,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,gCAAgC,CAAC;EAC1EC,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;AAGF,eAAeA,oBAAoBA,CAAA,EAAG;EACpC,MAAMC,SAAS,GAAG,MAAM,IAAAC,qCAAgB,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,qCAAgB,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":[]}
|